日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HandlerInterceptor拦截器使用总结

發(fā)布時間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HandlerInterceptor拦截器使用总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載自?https://blog.csdn.net/weixin_36832313/article/details/79115693

簡介

SpringMVC的處理器攔截器,類似于Servlet開發(fā)中的過濾器Filter,用于對請求進(jìn)行攔截和處理。

常見應(yīng)用場景

1、權(quán)限檢查:如檢測請求是否具有登錄權(quán)限,如果沒有直接返回到登陸頁面。?
2、性能監(jiān)控:用請求處理前和請求處理后的時間差計算整個請求響應(yīng)完成所消耗的時間。?
3、日志記錄:可以記錄請求信息的日志,以便進(jìn)行信息監(jiān)控、信息統(tǒng)計等。

使用方法

1、配置文件

<mvc:interceptors><!--對所有的請求記性攔截--><!--<beans:beanclass="com.sunp.common.interceptor.Myinterceptor"/>--><!--對特定的請求進(jìn)行攔截--><mvc:interceptor><!--進(jìn)行攔截的路徑--><mvc:mapping path="/**"/> <!--不進(jìn)行攔截的路徑--> <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、實現(xiàn)接口并繼承方法(可以同時包含多個實現(xiàn)類)

public class myInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandler(HttpServletRequest request, HttpServletResponse response, Object obj)throws Exception{/*該方法將在請求處理之前進(jìn)行調(diào)用,只有該方法返回true,才會繼續(xù)執(zhí)行后續(xù)的Interceptor和Controller,當(dāng)返回值為true 時就會繼續(xù)調(diào)用下一個Interceptor的preHandle 方法,如果已經(jīng)是最后一個Interceptor的時候就會是調(diào)用當(dāng)前請求的Controller方法;*/}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object obj,Exception e)throws Exception {/*該方法將在請求處理之后,DispatcherServlet進(jìn)行視圖返回渲染之前進(jìn)行調(diào)用,可以在這個方法中對Controller 處理之后的ModelAndView 對象進(jìn)行操作。*/}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2,ModelAndView arg3) throws Exception {/*該方法也是需要當(dāng)前對應(yīng)的Interceptor的preHandle方法的返回值為true時才會執(zhí)行,該方法將在整個請求結(jié)束之后,也就是在DispatcherServlet 渲染了對應(yīng)的視圖之后執(zhí)行。用于進(jìn)行資源清理。*/} }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

執(zhí)行順序

1、單個實現(xiàn)類的執(zhí)行順序

preHandler -> Controller -> postHandler -> model渲染-> afterCompletion

2、多個實現(xiàn)類的執(zhí)行順序

———————preHandler1——————-?
———————preHandler2——————-?
———————preHandler3——————-?
———————–Controller———————?
———————postHandler3——————?
———————postHandler2——————?
———————postHandler1——————?
———————postHandler1——————?
——————afterCompletion3—————-?
——————afterCompletion2—————-?
——————afterCompletion1—————-

簡單練習(xí)代碼

http://download.csdn.net/download/weixin_36832313/10215829

---------------------------------------------------------------------------------

package com.ibank.admin.ws.interceptor;


import com.alibaba.fastjson.JSONObject;
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 {
? ? }


}

總結(jié)

以上是生活随笔為你收集整理的HandlerInterceptor拦截器使用总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。