Pergunta

Eu queria saber como eu pode forçar um usuário que solicitou uma página usando Http usar a versão https seguro?

Eu estou usando Websphere 6.1 como meu servidor de aplicativos e Rad 7 como meu ambiente de desenvolvimento

Graças Damien

Foi útil?

Solução

Uma maneira que você poderia fazer isso dentro de sua aplicação, em vez de na configuração do servidor seria usar um Filtro (especificado em seu web.xml) para verificar se ServletRequest.getScheme() é "http" ou "https", e re-direcionar o usuário para o URL apropriado (usando HttpServletResponse.sendRedirect(String url)).

Outras dicas

Você pode adicionar a seguinte entrada no seu web.xml e vai garantir que todos os pedidos são convertidos em 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ão é um servidor http completa. Ele tem 'cadeias de transporte', que agem como um servidor HTTP.

Normalmente, você vai colocar um servidor HTTP na frente. IBM fornece IHS (IBM HTTP Server) que é um Apache HTTP Server levemente modificado. O servidor HTTP está configurado com o arquivo httpd.conf. Lá você adicionar redirecionamentos de forma tal que pedido de http será redirecionado para https.

Talvez você possa dar alguma informação detalhada sobre sua infra-estrutura.

Eu concordo. Eu acho que usando um filtro vai conseguir isso. Aqui está um filtro que escrevi para balanceamento de carga e redirecionamento de porta, mas ele deve ser fácil de descobrir como para editá-lo para atender às suas necessidades.

classe pública implementos RequestWrapperFilter 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top