Redirecionando requisições http para https no tomcat

Muitas pessoas tem me perguntado como se faz para redirecionar requisições http para https usando apenas o tomcat.

Quando se utiliza um IIS ou APACHE, essa tarefa é mais fácil pelas rotinas embutidas de redirecionamento que eles possuem, mas a questão aqui, é quanto não existe esta camada.

Pois bem, vamos às configurações:

1 - No arquivo web.xml da sua aplicação, inclua as configurações de segurança no final do arquivo : 

 
  <security-constraint>
            <web-resource-collection>
                <web-resource-name>secured</web-resource-name>
                <url-pattern>/*</url-pattern>
            </web-resource-collection>
            <user-data-constraint>
                <transport-guarantee>CONFIDENTIAL</transport-guarantee>
            </user-data-constraint>
  </security-constraint>
           

 

Reinicie o tomcat.

Apenas com essa configuração, ao acessar a porta 8080 (se esta for a porta configurada no seu tomcat para HTTP/1), você será redirecionado para a porta 8443, ai temos um problema.

A porta 8443 é um 'atalho' para a porta de SSL 443, por isso ela fica visível na url do browser, ex (https://www.bjbraz.com.br:8443) , e não queremos isso.

Vamos corrigir :

2 - No arquivo server.xml TOMCAT_HOME/conf/server.xml :

Na linha de redirecionamento para SSL, altere o parametro redirectPort para 443

443
"/>
Por padrão esta porta não irá aparecer na URL.

Comentários

  1. Olá Alex,
    Nao tenho muita experiência nessa área e por isso estou com dificuldades para resolver um problema.
    Utilizando essa configuração que você citou, toda a aplicação será redirecionada para HTTPS (ssl), certo?
    Como faço para que apenas o login utilize HTTPS, e depois de logado volte para HTTP?
    Quando indico a página de login em /login, depois de logado continua utilizando HTTPS; é isso que não quero.
    Abraço.

    ResponderExcluir
  2. Olá amigo, você pode utilizar um Filter:

    1 - Crie uma classe que implementa Filter

    public class MeuFilter implements Filter

    2 - No web.xml


    meuFilter
    caminhocompleto.MeuFilter



    meuFilter
    *.jsp ***


    *** Aponte as páginas ou diretórios que você não quer utilizar o https.


    3 - Faça o tratamento no seu filter:

    Dentro do método doFilter no seu Filter.

    public void doFilter

    String name = request.getScheme();

    if("https".equals(name)){
    request.sendRedirect("http:\\\\www.urlhttp.com.br\\");
    return;
    }

    Espero que ajude !

    ResponderExcluir
  3. Srs... Tenho utilizado essa config no web.xml do /conf . Quando ativada somente o https funciona, quando tento conectar no http a pagina não redireciona, fica como se não existisse.

    Estou usando porta 80 e 443. Alguma dica ?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas