SpringMVC配置拦截器实现登录控制的方法

SpringMVC读取Cookie判断用户是否登录,对每一个action都要进行判断。之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面。


 
 


 

但是测试发现如果session过期,页面渲染就会无故中断并且不会跳转到登录页面。故尝试使用拦截器来进行登录判断。

拦截器配置文件如下



 
  
  
   
    
     /login
     /static/
    
   
  
 


拦截器实现类如下

public class LoginInterceptor implements HandlerInterceptor {
 private AvatarLogger logger = AvatarLoggerFactory.getLogger(this.getClass());

 private List excludedUrls;

 /**
  * 在DispatcherServlet完全处理完请求后被调用
  * 当拦截器抛出异常时,依然会从当前拦截器往回执行所的拦截器的afterCompletion()
  */
 public void afterCompletion(HttpServletRequest request,
        HttpServletResponse response, Object handler, Exception exception)
   throws Exception {

 }

 //在业务处理器处理请求执行完成后,生成视图之前执行的动作
 public void postHandle(HttpServletRequest request, HttpServletResponse response,
       Object handler, ModelAndView modelAndView) throws Exception {

 }

 /**
  * 在业务处理器处理请求之前被调用
  * 如果返回false 则退出本拦截器,本拦截器后面的postHandle与afterCompletion不再执行
  */
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
        Object handler) throws Exception {

  String requestUri = request.getRequestURI();
  for (String url : excludedUrls) {
   if (requestUri.contains(url)) {
    return true;
   }
  }

  HttpSession session = request.getSession();
  Boolean login = (Boolean) session.getAttribute("login");
  if (login == null || !login) {
   //System.out.println(request.getContextPath());
   logger.info("Pedirect to login page");
   response.sendRedirect(request.getContextPath() + "/login");
  }
  return true;
 }

 public void setExcludedUrls(List excludedUrls) {
  this.excludedUrls = excludedUrls;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(SpringMVC配置拦截器实现登录控制的方法)