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

Était-ce utile?

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;
    }
}

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top