Use HTTPS apenas para determinadas páginas no servlet baseado webapp
Pergunta
Eu tenho um webapp baseado servlet em execução no servidor Tomcat 6. O esquema de URL é HTTPS. Todo o site está sendo servido em HTTPS. Mas o que eu realmente gostaria de fazer é configurar HTTPS apenas para determinadas operações como compra e login. Existe alguma configuração no Tomcat que pode me ajudar a fazer isso facilmente?
Há algum código mudanças necessárias para persistir sessão em HTTPS e HTTP?
Solução
Realmente, idealmente, este é configurado no arquivo web.xml do aplicativo web. Basta especificar certas URLs que deve ser seguro como <security-constraint><web-resource-collection>
e especificar HTTPS exigência como <transport-guarantee>
com valor de CONFIDENTIAL
. O recipiente irá gerenciar redirecionamentos de forma transparente. Simples.
<security-constraint>
<web-resource-collection>
<web-resource-name>My Secure Stuff</web-resource-name>
<url-pattern>/some/secure/stuff/*</url-pattern>
<url-pattern>/other/secure/stuff/*</url-pattern>
...
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Outras dicas
Você só precisa configurar um HTTP conector e todo o seu servlet estará disponível em HTTP também.
Para operações que requerem HTTPS, é necessário reforçar este mesmo assim,
if (!request.isSecure()) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
No nosso caso, o URL de login podem ser digitadas pelo usuário para que redirecionar o usuário para a página HTTPS se HTTP URL é digitado.
Se você está falando de sessões Servlet (JSESSIONID), você não deve ter quaisquer problemas de compartilhamento de sessões entre HTTP e HTTPS desde Tomcat não adicionar "seguro" bandeira para os cookies.