SpringMVC 攔截器

一 自定義攔截器

? ? 1. 跟過濾器比較像的技術

? ? 2.發(fā)送請求時被攔截器攔截,在控制器前后添加額外功能

? ? ? ? 2.1 跟AOP 區(qū)分開,AOP 在特定方法前后擴充(對ServiceImpl)

? ? ? ? 2.2 攔截器,請求攔截,針對點是控制器方法(對Controller)

????3. SpringMVC 攔截器 和 Filter的區(qū)別

? ? ? ? 3.1 攔截器只能攔截Controller

? ? ? ? 3.2 Filter可以攔截任何請求

????4. 實現(xiàn)自定義攔截器的步驟

? ? ? ? 4.1 新建類實現(xiàn) HandlerInterceptor 接口

package com.chen.interceptor;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

public class DemoInterceptor implements HandlerInterceptor{

????//在進入控制器之前執(zhí)行

????//如果返回值為false,阻止進入控制器

????//控制代碼

????@Override

????public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {

????????System.out.println("arg2:"+arg2);

????????System.out.println("preHandle");

????????return true;

????}

? ? //控制器執(zhí)行完成,進入jsp之前執(zhí)行.

????//日志記錄

????//敏感詞語過濾

????@Override

????public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)

????throws Exception {

????????System.out.println("往"+arg3.getViewName()+"跳轉");

????????System.out.println("model的值"+arg3.getModel().get("model"));

????????String word = arg3.getModel().get("model").toString();

????????String newWord = word.replace("祖國", "**");

????????arg3.getModel().put("model",newWord);

????????System.out.println("postHandle");

????}

????//jsp執(zhí)行完成后執(zhí)行

????//記錄執(zhí)行過程中出現(xiàn)的異常

????//可以把異常幾率到日志中

????@Override

????public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)

????throws Exception {


????System.out.println("agr3:"+arg3);

????System.out.println("afterCompletion"+arg3.getMessage());

????}

}

? ? ? ? 4.2 在 SpringMVC.xml配置攔截器需要攔截哪些控制器

? ? ? ? 4.2.1 攔截所有控制器

?<!-- 攔截器 -->

<mvc:interceptors>

????<mvc:interceptor>

????????<bean class="com.chen.controller.DemoController"></bean>

????</mvc:interceptor>

</mvc:interceptors>

? ? ? ? 4.2.2 攔截特定的 url

????<!-- 攔截器 -->

????<mvc:interceptors>

????????<mvc:interceptor>

????????????<mvc:mapping path="/demo"/>

????????????<mvc:mapping path="/demo1"/>

????????????<mvc:mapping path="/demo2"/>

????????????<bean class="com.chen.controller.DemoController"></bean>

????</mvc:interceptor>

????</mvc:interceptors>


二 攔截器棧

? ?1. 多個攔截器同時生效時,組成攔截器棧

? ? 2.順序 先進后廚

? ? 3 執(zhí)行順序和在springmvc.xml 中配置順序有關

? ? preHandle(A) -> preHandle(B) -> 控制器方法 -> postHandle(B) ->postHanle(A) -> jsp -> afterCompletion(B)-> afterCompletion(A)

三 使用springmvc 攔截器實現(xiàn)登陸驗證

? ? 1 把頁面放到 web-inf中

? ? 2 放入到web-inf中后必須通過控制器轉發(fā)到頁面,springMVC 攔截器攔截的是控制器,不攔截jsp

? ? 2. 通過攔截器棧攔截全部控制器,需要在攔截器內部方形login控制器

controller

public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object arg2) throws Exception {

????String uri = req.getRequestURI();

????if(uri.equals("/springmvc03/login")){

????????return true;

????}else{

????Object obj = req.getSession().getAttribute("users");

????if(obj!=null){

????????eturn true;

????}

????res.sendRedirect("/springmvc03/login.jsp");

????????return false;

????}

}

? ??????

<!-- 配置攔截器 -->

<mvc:interceptors>

<bean class="com.chen.interceptor.LoginInterceptor"></bean>

</mvc:interceptors>

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1、在springmvc-config.xml中添加一下配置 注意:這里攔截的是請求、而不是頁面 <!-- 配置攔...
    閆子揚閱讀 402評論 0 0
  • 一、定義Interceptor實現(xiàn)類 SpringMVC 中的Interceptor 攔截請求是通過Handler...
    bboymonk閱讀 436評論 0 0
  • 本文作者:鐘昕靈,叩丁狼高級講師。原創(chuàng)文章,轉載請注明出處。 前言 Spring MVC屬于SpringFrame...
    叩丁狼教育閱讀 3,388評論 1 4
  • Interceptor攔截器是Spring MVC中重要的功能,它的主要作用是攔截用戶的請求 并進行相應的處理。比...
    養(yǎng)碼哥閱讀 568評論 0 1
  • 從來到南京算起,到最后死去,朱元璋在南京前后待了40年,雖然這期間他生了42個兒女,但朱元璋的后宮不算多。據(jù)沈德符...
    一夕厘閱讀 1,271評論 0 21

友情鏈接更多精彩內容