HandlerInterceptor拦截器使用总结
轉載自?https://blog.csdn.net/weixin_36832313/article/details/79115693
簡介
SpringMVC的處理器攔截器,類似于Servlet開發中的過濾器Filter,用于對請求進行攔截和處理。
常見應用場景
1、權限檢查:如檢測請求是否具有登錄權限,如果沒有直接返回到登陸頁面。?
2、性能監控:用請求處理前和請求處理后的時間差計算整個請求響應完成所消耗的時間。?
3、日志記錄:可以記錄請求信息的日志,以便進行信息監控、信息統計等。
使用方法
1、配置文件
<mvc:interceptors><!--對所有的請求記性攔截--><!--<beans:beanclass="com.sunp.common.interceptor.Myinterceptor"/>--><!--對特定的請求進行攔截--><mvc:interceptor><!--進行攔截的路徑--><mvc:mapping path="/**"/> <!--不進行攔截的路徑--> <mvc:exclude-mapping path="/lib/**" /> <beans:bean class="com.sunp.common.interceptor.Myinterceptor"/></mvc:interceptor> </mvc:interceptors>- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2、實現接口并繼承方法(可以同時包含多個實現類)
public class myInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandler(HttpServletRequest request, HttpServletResponse response, Object obj)throws Exception{/*該方法將在請求處理之前進行調用,只有該方法返回true,才會繼續執行后續的Interceptor和Controller,當返回值為true 時就會繼續調用下一個Interceptor的preHandle 方法,如果已經是最后一個Interceptor的時候就會是調用當前請求的Controller方法;*/}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object obj,Exception e)throws Exception {/*該方法將在請求處理之后,DispatcherServlet進行視圖返回渲染之前進行調用,可以在這個方法中對Controller 處理之后的ModelAndView 對象進行操作。*/}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2,ModelAndView arg3) throws Exception {/*該方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行,該方法將在整個請求結束之后,也就是在DispatcherServlet 渲染了對應的視圖之后執行。用于進行資源清理。*/} }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
執行順序
1、單個實現類的執行順序
preHandler -> Controller -> postHandler -> model渲染-> afterCompletion
2、多個實現類的執行順序
———————preHandler1——————-?
———————preHandler2——————-?
———————preHandler3——————-?
———————–Controller———————?
———————postHandler3——————?
———————postHandler2——————?
———————postHandler1——————?
———————postHandler1——————?
——————afterCompletion3—————-?
——————afterCompletion2—————-?
——————afterCompletion1—————-
簡單練習代碼
http://download.csdn.net/download/weixin_36832313/10215829
---------------------------------------------------------------------------------
package com.ibank.admin.ws.interceptor;
import com.ibank.admin.service.AdminRedisService;
import com.tasfe.framework.redis.RedisService;
import com.tasfe.framework.support.model.ResponseData;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
?* Created by Dengw on 2018/1/4
?*/
@Component
public class LoginInteceptor implements HandlerInterceptor{
? ? private static Logger logger = LoggerFactory.getLogger(LoginInteceptor.class);
? ? @Autowired
? ? private AdminRedisService adminRedisService;
? ? @Override
? ? public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
? ? ? ? String accountNo = request.getHeader("accountNo");
? ? ? ? String token = request.getHeader("token");
? ? ? ? boolean judgeFlag = adminRedisService.judgeTimeout(accountNo,token);
? ? ? ? if(!judgeFlag){
? ? ? ? ? ? response.setContentType("application/json");
? ? ? ? ? ? response.setCharacterEncoding("UTF-8");
? ? ? ? ? ? ResponseData responseData = ResponseData.error("登錄超時,請重新登錄!");
? ? ? ? ? ? responseData.setStatus("2");
? ? ? ? ? ? PrintWriter printWriter = response.getWriter();
? ? ? ? ? ? printWriter.write(JSONObject.toJSONString(responseData));
? ? ? ? ? ? printWriter.flush();
? ? ? ? ? ? printWriter.close();
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? return true;
? ? }
? ? @Override
? ? public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
? ? }
? ? @Override
? ? public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
? ? }
}
總結
以上是生活随笔為你收集整理的HandlerInterceptor拦截器使用总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特殊格式的 汇潮支付接口对接
- 下一篇: 使用SSH密钥对给你的阿里云ECS加把安