springMVC3學習(七)--Interceptor攔截器
spring為我們提供了:org.springframework.web.servlet.HandlerInterceptor介面,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter介面卡,
實現這個介面或繼承此類,可以非常方便的實現自己的攔截器。
有以下三個方法:
Action之前執行
[java] view plain copy
- public
- HttpServletResponse response, Object handler)
生成檢視之前執行
[java] view plain
- public void postHandle(HttpServletRequest request,
- HttpServletResponse response, Object handler, ModelAndView modelAndView)
最後執行,可用於釋放資源
[java] view plain copy
- public void afterCompletion(HttpServletRequest request,
- HttpServletResponse response, Object handler, Exception e)
分別實現預處理、後處理(呼叫了Service並返回ModelAndView,但未進行頁面渲染)、返回處理(已經渲染了頁面)
在preHandle中,可以進行編碼、安全控制等處理;
在postHandle中,有機會修改ModelAndView;
在afterCompletion中,可以根據ex是否為null判斷是否發生了異常,進行日誌記錄。
引數中的Object handler是下一個攔截器。
如何使用攔截器
自定義一個攔截器,要實現HandlerInterceptor介面:
[java] view plain copy
- public class MyInterceptor implements HandlerInterceptor {...}
在springMVC的配置檔案中配置有三種方法
一、攔截所有URL
[html] view plain copy
- <mvc:interceptors>
- <bean class="com.itmyhome.MyInterceptor" />
- </mvc:interceptors>
二、攔截匹配的URL
[html] view plain copy
- <mvc:interceptors>
- <mvc:interceptor>
- <mvc:mapping path="/login" />
- <bean class="com.itmyhome.MyInterceptor"></bean>
- </mvc:interceptor>
- </mvc:interceptors>
三、HandlerMappint上的攔截器
[html] view plain copy
- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
- <property name="interceptors">
- <list>
- <bean class="com.itmyhome.MyInterceptor"></bean>
- </list>
- </property>
- </bean>
如果使用了<mvc:annotation-driven />, 它會自動註冊DefaultAnnotationHandlerMapping 與
AnnotationMethodHandlerAdapter 這兩個bean,所以就沒有機會再給它注入interceptors屬性,就無法指定攔截器。
當然我們可以通過人工配置上面的兩個Bean,不使用 <mvc:annotation-driven />,
就可以給interceptors屬性注入攔截器了。
攔截器MyInterceptor類
[java] view plain copy
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.web.servlet.HandlerInterceptor;
- import org.springframework.web.servlet.ModelAndView;
- public class MyInterceptor implements HandlerInterceptor {
- public void afterCompletion(HttpServletRequest request,
- HttpServletResponse response, Object handler, Exception e)
- throws Exception {
- System.out.println("******afterCompletion******");
- }
- public void postHandle(HttpServletRequest request,
- HttpServletResponse response, Object handler, ModelAndView arg3)
- throws Exception {
- System.out.println("******postHandle******");
- }
- /**
- * 如果返回false 從當前攔截器往回執行所有攔截器的afterCompletion方法,再退回攔截器鏈 如果返回true
- * 執行下一個攔截器,直到所有攔截器都執行完畢 再執行被攔截的Controller
- * 然後進入攔截器鏈從最後一個攔截器往回執行所有攔截器的postHandle方法
- * 接著依舊是從最後一個攔截器往回執行所有攔截器的afterCompletion方法
- */
- public boolean preHandle(HttpServletRequest request,
- HttpServletResponse response, Object handler) throws Exception {
- System.out.println("******preHandle******");
- return true;
- }
- }
spring配置檔案
[html] view plain copy
- <!-- 攔截所以URL
- <mvc:interceptors>
- <bean class="com.itmyhome.MyInterceptor" />
- </mvc:interceptors>
- -->
- <!-- 攔截匹配URL -->
- <mvc:interceptors >
- <mvc:interceptor>
- <mvc:mapping path="/login" />
- <bean class="com.itmyhome.MyInterceptor"></bean>
- </mvc:interceptor>
- </mvc:interceptors>
- <!-- HandlerMappint上的攔截器
- <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
- <property name="interceptors">
- <list>
- <bean class="com.itmyhome.MyInterceptor"></bean>
- </list>
- </property>
- </bean>-->
-
相關推薦
springMVC3學習(七)--Interceptor攔截器
spring為我們提供了:org.springframework.web.servlet.HandlerInterceptor介面, org.springframework.web.servlet.handler.HandlerInterceptorAdapter介面卡, 實現這個介面
CXF對Interceptor攔截器的支持
creat 自定義消息 jaxws out super 構造 imp factory odin 前面在Axis中介紹過Axis的Handler,這裏CXF的Interceptor就和Handler的功能類似。在每個請求響應之前或響應之後,做一些事情。這裏的Intercep
SpringMVC中使用Interceptor攔截器
lis elm auto let 發生 ins 系列 number ted 詳見:http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 攔截器也是相當重要和相當有用的,它的主要作用是攔截用戶的請求並進行相應的處
spring boot 學習(十二)攔截器實現IP黑名單
ppi html .html 日期類 dpa asp tails 我們 req 攔截器實現IP黑名單 前言 最近一直在搞 Hexo+GithubPage 搭建個人博客,所以沒怎麽進行 SpringBoot 的學習。所以今天就將上次的”?秒防刷新”進行了一番修改。上次是采用註
interceptor攔截器
ase patch response del ppi pack 設置 and bject fifter、servlet、interceptor fifter用來處理請求頭、請求參數、編碼的一些設置,然後轉交給servlet,處理業務,返回 servlet現在常用
Anguar 使用interceptor攔截器設定請求頭傳入jwt token
1.建立http-interceptors.ts檔案 import { Injectable } from "@angular/core"; import { HttpInterceptor, HttpRequest, HttpHandler, HttpErrorResponse
springMVC學習 十二 攔截器
一 攔截器概述 攔截器技術比較像java web技術中的過濾器技術,都是傳送 請求時被攔截器攔截,在控制器的前後新增額外功能。但是和Spring中的Aop技術是由區別的。AOP 在特定方法前後擴充(一般是對 ServiceImpl的方法進行擴充),而攔截器是對控制器的請求進行攔截。 但是攔截器和j
SpringMVC(七)攔截器
SpringMVC(七)攔截器 當請求來到DispatcherServlet時,它會根據HandlerMapping的機制找到處理器,這樣就返回一個HandlerExecutionChain物件,這個物件包含處理器和攔截器。這裡的攔截器會對處理器進行攔截,這樣通過攔截器就可以增強處理
SpringMVC Interceptor攔截器
今天偶爾看見的,以前還沒見過,就瞭解下 該攔截器主要是:在進Controller之前,
五十、Filter過濾器,Interceptor攔截器,ControllerAdvice,Aspect切片
Filter過濾器,Interceptor攔截器,ControllerAdvice,Aspect切片 上圖為在web專案中,在處理request請求時得處理順序 在專案中我們改怎麼使用呢? Filter過濾器 /** * Created by GAOMINGQIA
Springboot之如何使用interceptor攔截器
在這裡我就不細說它的原理什麼的了,具體原理看這個Filter和攔截器的區別 https://blog.csdn.net/kxj19980524/article/details/85316586 SpringBoot使用步驟 先建立一個interceptor實現HandlerInterce
springboot實現自定義的Interceptor攔截器
構建springboot專案 這裡使用的是eclipse,簡單化 其他實體之類的程式碼省略 專案程式碼 application.properties # 資料來源配置 sp
OkHttp 3.x 原始碼解析之Interceptor 攔截器
OkHttp攔截器原理解析 攔截器 Java裡的攔截器是動態攔截Action呼叫的物件。它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的程式碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中
SpringMVC之interceptor攔截器
Interceptor攔截器 一、概念 攔截器是SpringMVC中的一個強大控制元件,它可以在進入處理器之前做一些操作,或者在處理器完成後進行操作,甚至是在渲染檢視後進行操作。 二、攔截器定義 Spring要求處理器的攔截器都要實現org.springfram
Spring Interceptor攔截器
轉自:https://blog.csdn.net/qq_35246620/article/details/68487904 1. 攔截器 1.1 概念 Java 裡的攔截器是動態攔截 action 呼叫的物件。它提供了一種機制可以使開發者可以定義在一個 action 執行的前後執
解決 Springboot中Interceptor攔截器中依賴注入失敗
BeanFactory beanFactory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); userService = (UserService) bea
OkHttp攔截請求與相應,以及控制檯列印日誌(Interceptor攔截器)
OkHttp攔截請求與相應,以及控制檯列印日誌(Interceptor攔截器) 本文將簡單介紹OkHttp攔截器的使用,具體環境是這樣:伺服器有一個介面,在不同環境下,返回的資料和格式不同,你還想獲取這兩種不同的資料,那麼我想到了用攔截器。 攔截器的作用是什麼,舉一個例子,小明在
springboot web跨域訪問問題解決--Interceptor攔截器方式
跨域訪問時很多需求,所以springboot的跨域解決也是【必須的】 攔截器方式 //自定義攔截器 import org.springframework.web.servlet.HandlerInt
springMVC中Interceptor攔截器的使用
@RequestMapping("/checkAdmin.do") public void checkAdmin(Admin admin,HttpSession session,HttpServletRequest request,HttpServletResponse response)
OkHttp中Interceptor攔截器之公共引數請求封裝
前言 之前在面試的時候遇到這樣的一個問題,那就是如果app中所有的請求都要加入一些引數(例如 版本號、手機號、登入使用者名稱、token等。。。)那麼怎麼做才能實現,而不至於在每次請求的時候都去進行新增這些請求頭。其實這個問題,剛開始我是拒絕的(之前沒有遇到過