Pregunta

Me preguntaba cómo puedo forzar a un usuario que ha solicitado una página utilizando Http para usar la versión segura de https.

Estoy utilizando Websphere 6.1 como mi servidor de aplicaciones y Rad 7 como mi entorno de desarrollo

Gracias Damien

¿Fue útil?

Solución

Una forma en que podría hacer esto dentro de su aplicación en lugar de hacerlo en la configuración del servidor sería usar un Filter (especificado en su web.xml) para verificar si ServletRequest.getScheme () es " http " o " https " ;, y redirija al usuario a la URL apropiada (utilizando HttpServletResponse.sendRedirect (String url) ).

Otros consejos

Puedes agregar la siguiente entrada en tu web.xml y se asegurará de que todas las solicitudes se conviertan a 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 no es un servidor http completo. Tiene 'Cadenas de transporte', que actúan como un servidor HTTP.

Normalmente pondrás un servidor HTTP al frente. IBM proporciona IHS (IBM HTTP Server) que es un servidor HTTP Apache ligeramente modificado. El servidor HTTP está configurado con el archivo httpd.conf. Allí se agregan redirecciones de tal manera que la solicitud de http se redirige a https.

Tal vez pueda proporcionar información detallada sobre su infraestructura.

Estoy de acuerdo. Creo que usar un filtro logrará esto. Aquí hay un filtro que escribí para el equilibrio de carga y la redirección de puertos, pero debería ser fácil descubrir cómo editarlo para que se ajuste a sus necesidades.

la clase pública RequestWrapperFilter implementa el filtro {

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

}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top