Pessoal, tive uns probleminhas para fazer minha aplicação (feita usando o e-gen) rodar em https e descobri que o problema era num filter.
Dentro do filter que estava sendo usado (próprio do e-gen) existia o seguinte código:
url = new URL("http", hrequest.getServerName(), hrequest.getServerPort(), loginPage);
hresponse.sendRedirect(url.toString());
Que mandava o usuário para a página de login quando ele não estivesse autenticado.
O problema é aquele “http”, que faz com que, quando a aplicação estiver sendo acessada por https, seja feito um redirect para (http://localhost:8443/Login.do , sendo que a porta 8443 está configurada para o https, o que faz com que a página não seja carregada).
O método doFilter() recebe os seguintes parâmetros:
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
Logo eu precisaria obter alguma informação existente no ServletRequest ou no ServletResponse para descobrir se está vindo ho https ou do http.
Consegui achar uma solução meio “porca”. Faço um :
if ((hrequest.getLocalPort()==8443)||(hrequest.getLocalPort()==443)){
url = new URL("https", hrequest.getServerName(), hrequest.getServerPort(), loginPage);
}else{
url = new URL("http", hrequest.getServerName(), hrequest.getServerPort(), loginPage);
}
hresponse.sendRedirect(url.toString());
Que, obviamente, dará erro se o https for configurado em qualquer outra porta que não a 8443 ou a 443.
Alguém tem alguma idéia mais “decente” para resolver isso?