Java自定义异常、全局捕获异常、拦截器 实现动态控制登录超时


参考文章:https://blog.csdn.net/psp0001060/article/details/53380160

自定义异常类

 1 package com.jeeplus.common.customException;
 2 
 3 /**
 4  * 登陆超时自定义异常
 5  */
 6 public class LoginTimeOutException extends Exception {
 7 
 8     private String message;
 9 
10     public LoginTimeOutException() {
11     }
12 
13     public LoginTimeOutException(String message) {
14         super(message);
15         this.message = message;
16     }
17 
18     @Override
19     public String getMessage() {
20         return message;
21     }
22 
23     public void setMessage(String message) {
24         this.message = message;
25     }
26 }

 全局捕获异常

 1 import org.springframework.web.servlet.HandlerExceptionResolver;
 2 import org.springframework.web.servlet.ModelAndView;
 3 
 4 import javax.servlet.http.HttpServletRequest;
 5 import javax.servlet.http.HttpServletResponse;
 6 
 7 /**
 8  * 全局异常处理器
 9  */
10 public class OverallExceptionResolver implements HandlerExceptionResolver {
11     @Override
12     public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) {
13         //handler为当前处理器适配器执行的对象
14         String message = null;
15         //判断是否为系统自定义异常。
16         if(e instanceof LoginTimeOutException) {
17             message = ((LoginTimeOutException) e).getMessage();
18             ModelAndView modelAndView = new ModelAndView();
19             //跳转到相应的处理页面
20             modelAndView.setViewName("modules/sys/sysLogin");
21             return modelAndView;
22         }
23         else {
24             e.printStackTrace();
25             return null;
26         }
27     }
28 }

 在springmvc.xml文件中配置

1 
2     <bean id="exceptionResolver" class="com.jeeplus.common.customException.OverallExceptionResolver">bean>

监听器

 1 public class TimeOutInterceptor extends BaseService implements HandlerInterceptor {
 2 
 3     @Autowired
 4     IdentityAuthenticationTimeService identityTimeService;
 5     
 6     /**
 7      * 判断是否登陆超时
 8      * @param request
 9      * @param response
10      * @param o
11      * @return
12      * @throws Exception
13      */
14     @Override
15     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
16         Principal principal = UserUtils.getPrincipal();
17         if (principal != null){
18             HttpSession sessionStart = request.getSession();
19             Long time = (Long) sessionStart.getAttribute("accessTime");
20 
21             if (time != null){
22                 Long timeSection = System.currentTimeMillis() - time;
23                 Long ts = timeSection/1000/60;
24                 Integer a = identityTimeService.getIdentityTime();
25                 logger.info("当前重鉴别时间:" + a + "分钟");
26                 logger.info("距离上次操作:" + ts + "分钟");
27                 if (ts >= a){
28                     logger.info("登录超过:" + a + "分钟,返回登录页!");
29                     UserUtils.getSubject().logout();
30                     throw new LoginTimeOutException("登录超时!");
31                 }
32             }
33             sessionStart.setAttribute("accessTime",System.currentTimeMillis());
34         }
35         return true;
36     }
37 
38     @Override
39     public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
40 
41     }
42 
43     @Override
44     public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
45 
46     }
47 }

在springmvc.xml文件中配置监听器

 1 
 2     <mvc:interceptors>
 3         
 4             
 5             
 6             
 7             
 8             
 9             
10             
11         
12         
13         
14             
15             
16         
17         
18         <mvc:interceptor>
19             <mvc:mapping path="/**" />
20             <bean class="com.jeeplus.modules.sys.interceptor.TimeOutInterceptor" />
21         mvc:interceptor>
22     mvc:interceptors>