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.
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
"/>
Por padrão esta porta não irá aparecer na URL.
Olá Alex,
ResponderExcluirNao 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.
Olá amigo, você pode utilizar um Filter:
ResponderExcluir1 - 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 !
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.
ResponderExcluirEstou usando porta 80 e 443. Alguma dica ?