<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
springMVC 中的攔截器用於攔截控制器方法的執行。
先建立出前置需要的一些條件:
<a th:href="@{/testInterceptor}" rel="external nofollow" >測試攔截器</a>
後端:
@Controller public class TestController { @RequestMapping("/testInterceptor") public String testInterceptor() { return "success"; } }
新建一個包 interceptors,在下面建立一個攔截器 FirstInterceptor ,並且要實現 HandlerInterceptor 介面。
快捷鍵Ctrl + O,快速重寫方法,圖示裡的 3 個。
public class FirstInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("FirstInterceptor --> preHandle"); return false; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("FirstInterceptor --> postHandle"); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("FirstInterceptor --> afterCompletion"); } }
preHandle
: 在當前控制器方法執行之前執行。
postHandle
: 在當前控制器方法執行之後執行。
afterCompletion
:處理完檢視和模型資料,渲染檢視完畢之後執行。
在 springMVC 組態檔裡設定攔截器,物件就是FirstInterceptor 類:
<!-- 設定攔截器 --> <mvc:interceptors> <bean class="com.pingguo.mvc.interceptors.FirstInterceptor"></bean> </mvc:interceptors>
重新部署,存取http://localhost:8080/springmvc/,發現頁面空白,檢視控制器紀錄檔看到有列印:
說明攔截成功。
看下上面重新的三個方法中,只有preHandle有返回值,是個布林型別:false 表示攔截,true 表示放行。
修改上面preHandle的返回為 true,重新部署後再次存取首頁,可以存取成功。
檢視控制檯列印輸出,看到在渲染之前,前面2個方法執行了:preHandle、postHandle 。
在非常多的 Thymeleaf 渲染之後,最後一個 afterCompletion 也執行了。
現在繼續點選首頁裡的新加的超連結,發現也會被攔截放行。
說明這種設定方式,會攔截所有的請求。
可以通過 ref 或 bean 標籤設定攔截器:
<bean name="firstInterceptor" class="com.pingguo.mvc.interceptors.FirstInterceptor"></bean> <!-- 設定攔截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/"></mvc:exclude-mapping> <ref bean="firstInterceptor"></ref> </mvc:interceptor> </mvc:interceptors>
注意這裡我在外部註冊了一個 bean 叫 firstInterceptor,以便 ref 參照。
也就是說,現在我存取http://localhost:8080/springmvc/的時候,應該不攔截。
存取http://localhost:8080/springmvc/testInterceptor就會攔截了。
試一下,先存取 http://localhost:8080/springmvc/:
可以正常開啟首頁,並且控制檯也沒有輸出攔截器裡的內容:
現在繼續存取 http://localhost:8080/springmvc/testInterceptor,
攔截了。
繼續新建一個攔截器SecondInterceptor,注意這次我加了 @Component,方便在組態檔中直接ref參照使用。
@Component public class SecondInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("SecondInterceptor --> preHandle"); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("SecondInterceptor --> postHandle"); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("SecondInterceptor --> afterCompletion"); } }
修改攔截器設定:
<!-- 設定攔截器 --> <mvc:interceptors> <ref bean="firstInterceptor"></ref> <ref bean="secondInterceptor"></ref> </mvc:interceptors>
重新部署,存取下首頁http://localhost:8080/springmvc/,檢視控制檯列印輸出。
可以發現,preHandle 方法執行的順序是 FirstInterceptor->SecondInterceptor。其他 2 個方法則是順序倒過來。
若每個攔截器的 preHandle()都返回 true:
若某個攔截器的preHandle()返回了false:
試一下,把 SecondInterceptor 中的preHandle()修改返回 false,再次請求下首頁:
符合預期。
這些過程可以打斷點看下原始碼的執行過程。
以上就是SpringMVC攔截器建立設定及執行順序的詳細內容,更多關於SpringMVC攔截器設定的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45