Forcer les Https dans Websphere 6.1
Question
Je me demandais comment forcer un utilisateur ayant demandé une page utilisant Http à utiliser la version sécurisée https?
J'utilise Websphere 6.1 comme serveur d'applications et Rad 7 comme environnement de développement
Merci Damien
La solution
Une façon de le faire dans votre application plutôt que dans la configuration du serveur serait d'utiliser un Filtre (spécifié dans votre fichier web.xml) pour vérifier si ServletRequest.getScheme ()
est " http " ou "https" et redirigez l'utilisateur vers l'URL appropriée (à l'aide de HttpServletResponse.sendRedirect (String url)
).
Autres conseils
Vous pouvez ajouter l'entrée suivante dans votre fichier web.xml afin de vous assurer que toutes les demandes sont converties en https
.<!--********************************
*** SSL Security Constraint ***
*****************************-->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!--********************************* -->
Websphere n’est pas un serveur http complet. Il possède des «chaînes de transport» qui agissent comme un serveur HTTP.
Normalement, vous allez mettre un serveur HTTP devant. IBM fournit IHS (IBM HTTP Server), un serveur HTTP Apache légèrement modifié. Le serveur HTTP est configuré avec le fichier httpd.conf. Là, vous ajoutez des redirections de telle sorte que les requêtes http soient redirigées vers https.
Peut-être pourriez-vous donner des informations détaillées sur votre infrastructure.
Je suis d'accord. Je pense que l'utilisation d'un filtre permettra d'atteindre cet objectif. Voici un filtre que j'ai écrit pour l'équilibrage de la charge et la redirection de port, mais il devrait être facile de comprendre comment l'éditer pour l'adapter à vos besoins.
la classe publique RequestWrapperFilter implémente le filtre {
public void doFilter(ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
String requestWrapperClassName = (String) (httpRequest
.getAttribute(LoadBalancerRequestWrapper.class.getName()));
String initiatingServerName = httpRequest.getServerName();
if (requestWrapperClassName == null
&& initiatingServerName.equals(loadBalancerHostName)) {
httpRequest = new LoadBalancerRequestWrapper(AuthenticationUtil
.getHttpServletRequest(httpRequest));
}
filterChain.doFilter(httpRequest, httpResponse);
}
}
/**
* The custom implementation of the request wrapper. It simply overrides the
* getScheme() and getServerPort() methods to perform the redirect
* filtering.
*
*
*/
private static class LoadBalancerRequestWrapper extends
HttpServletRequestWrapper {
/**
* Default Constructor. Simply declares the Wrapper as injected.
*
* @param httpServletRequest
* the app-server HttpServletRequest.
*
*/
public LoadBalancerRequestWrapper(HttpServletRequest httpServletRequest) {
super(httpServletRequest);
}
/**
* The overridden scheme.
*
*/
public final String getScheme() {
if (loadBalancerHttpScheme.equals(EMPTY_STRING)) {
return super.getScheme();
}
return loadBalancerHttpScheme;
}
}
}