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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM