需求说明:

  1、用户登录某页面一段时间之内,如果无任何操作,跳转至登录页面。

  2、用户在非登录状态下,无法访问项目下的某些页面。

解决方式:

  通过session过滤器实现对请求的过滤,如果未登录跳转至登录页面,如果已登录直接放行。在过滤器中不对登录页面进行过滤,不对css、js、img资源进行过滤。

如果不是前面说的两种资源,则判断记录用户信息的session是否为空,空则跳转至登录页面、非空则放行。

 

方法一:Java过滤器实现(推荐)

解决步骤:

步骤一:在项目下配置web.xml文件中配置session

  1、设置session失效时间(时间单位为分钟)

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

  2、配置过滤器

<filter>
    <description>session过滤器</description>
    <filter-name>sessionFilter</filter-name>
    <filter-class>com.filter.SessionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>sessionFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 注意:这里对所有的请求都进行了过滤。也可以在配置过滤器的时候设置某些请求不进行过滤,这里不进行具体的介绍。

步骤二:编写过滤器类

package com.filter;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.model.user.User;public class SessionFilter implements Filter {

    public void init(FilterConfig filterConfig) throws ServletException {

    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        res.addHeader("Access-Control-Allow-Origin", "*");
        String uri = req.getRequestURI();if (uri.indexOf("login") != -1 || uri.indexOf("Login") != -1) {
            chain.doFilter(req, res);

        } else if ((uri.contains(".css") || uri.contains(".js") || uri.contains(".jpg") || uri.contains(".png")
                || uri.contains(".jpng") && !uri.contains(".jsp")) {
            chain.doFilter(req, res);
        } else {
            HttpSession session = req.getSession();
            User user = (User) session.getAttribute("user");
            String username = "";
            if (user != null && !user.equals("")) {
                username = user.getLoginName();
            }
            if (username != "" && username != null) {
                chain.doFilter(req, res);
            } else {
                session.invalidate();
                res.setContentType("text/html;charset=utf-8");
                PrintWriter out = res.getWriter();
                out.println("<script language='javascript' type='text/javascript'>");
                out.println("window.top.location.href='" + req.getContextPath() + "/jsp/login.jsp'");
                out.println("</script>");
            }
        }

        if (uri.indexOf("redirect") != -1) {
       if (null != request.getParameter("userimg")) {
                chain.doFilter(req, res);
            }
        }
    }

    public void destroy() {

    }
}

  注意:1、这里使用window.top.location.herf,如果使用window.location.herf有时候无法完成跳转。2、上面的代码执行时需要用户在登录时将用户信息放入session中。

方法二:Jsp页面Java代码实现(了解)

  完成方法一的步骤就可以实现一个session过滤器了,过滤器会对请求想要访问的页面进行进行请求判断。如果我们只想对某一个页面进行session判断又不想使用过滤器,可以在页面上使用java代码进行判断。

注意这里只对某一个特定的页面,其他页面是不能用的。

<%    
       if(session.getAttribute("user") == null) {      
%>    
       <script type="text/javascript" language="javascript">  
          top.location.href="<%=basePath%>jsp/login.jsp";  
       </script>   
 <%    
      }    
 %>