Amigos estou utilizando filter para redirecionar o usuario para a tela de login quando a sessao expirar e no mesmo filter eu informo o tempo de sessao, ou seja eu configuro o tempo de sessao dentro do filter e nao no web.xml
Classe filter logo abaixo.
public class SessionTimeoutFilter implements Filter {
private String timeoutPage = “forUserLogin.jsp”;
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
// is session expire control required for this request?
HttpSession session = ((HttpServletRequest) request).getSession();
session.setMaxInactiveInterval(20);
if (isSessionControlRequiredForThisResource(httpServletRequest)) {
// is session invalid?
if (isSessionInvalid(httpServletRequest)) {
String timeoutUrl = httpServletRequest.getContextPath() + "/" + getTimeoutPage();
System.out.println("Session is invalid! redirecting to timeoutpage : " + timeoutUrl);
httpServletResponse.sendRedirect(timeoutUrl);
return;
}
}
}
filterChain.doFilter(request, response);
}
private boolean isSessionControlRequiredForThisResource(HttpServletRequest httpServletRequest) {
String requestPath = httpServletRequest.getRequestURI();
boolean controlRequired = !org.apache.commons.lang.StringUtils.contains(requestPath, getTimeoutPage());
return controlRequired;
}
private boolean isSessionInvalid(HttpServletRequest httpServletRequest) {
boolean sessionInValid = (httpServletRequest.getRequestedSessionId() != null) && !httpServletRequest.isRequestedSessionIdValid();
return sessionInValid;
}
public void destroy() {
}
}
Quando a sessao expirar o filter redireciona para a forUserLogin.jsp.
Codigo forUserLogin.jsp logo abaixo
Eu uso javaScript para redirecionar para “telasComponentes/usuarioLogin.jsf”;
O meu problema é o seguinte.
Nos meus diretorios minha classe usuarioLogin esta dentro de Projeto/telasComponentes/usuarioLogin.jsp
Quando o usuario esta navegando no sistema e esta na tela Cadastro de Pessoa (exemplo) localizado dentro de Projeto/cadastro/cadPessoa.jsp, o usuario fica um tempo sem dar submite e entao a sessao expira, quando o usuario clica na tela deveria abrir a tela de Login pq a sessao expirou ne, porem o sistema da o seguinte erro:
The requested resource (/Projeto/cadastro/telasComponentes/usuarioLogin.jsp) is not available.
O sistema pega o endereco do filter "telasComponentes/usuarioLogin.jsp "e concatena com o endereço do diretorio de onde o usuario deu o ultim submit “Projeto/cadastro/”.
Galera nao sei com arrumar isso eu imaginava que meu codigo javascript deveria redirecionar para “telasComponentes/usuarioLogin.jsf” independente de onde o usuario esteja no sistema, caiu a sessao redirecionar para “telasComponentes/usuarioLogin.jsf”;
Gente ficou meio confuso mas sera q tem como dar um luz ai,
valeu…
thank you.