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         <mvc:interceptor>
 4             <mvc:mapping path="${adminPath}/**" />
 5             <mvc:exclude-mapping path="${adminPath}/"/>
 6             <mvc:exclude-mapping path="${adminPath}/login"/>
 7             <mvc:exclude-mapping path="${adminPath}/sys/menu/tree"/>
 8             <mvc:exclude-mapping path="${adminPath}/sys/menu/treeData"/>
 9             <mvc:exclude-mapping path="${adminPath}/oa/oaNotify/self/count"/>
10             <bean class="com.jeeplus.modules.sys.interceptor.LogInterceptor" />
11         </mvc:interceptor>
12         <!-- 手机视图拦截器 -->
13         <mvc:interceptor>
14             <mvc:mapping path="/**" />
15             <bean class="com.jeeplus.modules.sys.interceptor.MobileInterceptor" />
16         </mvc:interceptor>
17         <!--登陆超时验证拦截器-->
18         <mvc:interceptor>
19             <mvc:mapping path="/**" />
20             <bean class="com.jeeplus.modules.sys.interceptor.TimeOutInterceptor" />
21         </mvc:interceptor>
22     </mvc:interceptors>

 

posted @ 2019-06-20 10:16  lovleo  阅读(4740)  评论(0编辑  收藏  举报