原理:用户登录成功后会把登录信息放到session里 。在web.xml里设置session过期时间。当用户在过期时间内没有操作系统,系统默认用户退出登录
<session-config> <session-timeout>1</session-timeout> </session-config>
创建loginIntercepter 用来检测登录状态
public class loginIntercepter implements HandlerInterceptor { private final Log logger = LogFactory.getLog(loginIntercepter.class); @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { logger.debug("afterCompletion"); System.out.println("afterCompletion"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { logger.debug("postHandle"); System.out.println("postHandle"); } @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { logger.debug("preHandle"); System.out.println("preHandle"); HttpSession session=arg0.getSession(); if(arg0.getRequestURI().indexOf("toLogin")>0){ return true; } if(arg0.getRequestURI().indexOf("userLogin")>0){ return true; } if(session.getAttribute("loginUser")!=null) { return true; } //登录超时 arg0.getRequestDispatcher("/WEB-INF/page/museum/login.jsp").forward(arg0, arg1); return false; } }
在 spring配置文件配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*/*"/>
<bean class="com.ptlogie.intercepter.loginIntercepter">
</bean>
</mvc:interceptor>
</mvc:interceptors>
特别注意路径问题 我的url http://localhost:8080/PTologie/loginUser/userLogin
这里的path指相对路径 /loginUser/userLogin