如何检查过滤器中是否存在HttpSession

时间:2015-08-04 13:36:50

标签: java web httpsession spring-session

我有一个javax.servlet.Filter,如果HttpSession是新的,我想重定向到登录页面,如果HttpSession过期则重定向到注销页面,如果存在HttpSession,则重定向到其他页面。

The login and logout pages are external pages. My sample method is given below

    @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
        FilterChain chain) throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) arg0;
    HttpServletResponse response = (HttpServletResponse) arg1;

    if (request.getSession(false) == null) { 
        response.sendRedirect("login page");
    } else if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) {
        response.sendRedirect("logout page");
    } else {
        chain.doFilter(request, response);
    }    

}

问题是会话过期后,注销页面不会呈现。如何让这个工作?

2 个答案:

答案 0 :(得分:0)

如果会话已过期,getSession(false)将返回null,因此您将重定向到登录页面。你的第二个if应该在第一个之前。

答案 1 :(得分:0)

或者你可以试试

getSession().isNew()
相关问题