SpringMVC-攔截器



1臣咖、定義

Spring Web MVC 的處理器攔截器類似于Servlet 開發(fā)中的過濾器Filter跃捣,用于對處理器進(jìn)行預(yù)處理和后處理。


2夺蛇、定義攔截器

2.1疚漆、定義一個類

實現(xiàn)HandlerInterceptor接口,如下:

public class Interceptor1 implements HandlerInterceptor {

    /**
     * controller執(zhí)行前調(diào)用此方法
     * 返回true表示繼續(xù)執(zhí)行刁赦,返回false中止執(zhí)行
     * 這里可以加入登錄校驗娶聘、權(quán)限攔截等
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        System.out.println("Interceptor1 preHandle......");
        // 在handle執(zhí)行之前執(zhí)行此方法。
        //返回值:如果返回true截型,放行
        //返回值:如果返回false趴荸,攔截
        return true;
    }

    /**
     * controller執(zhí)行后但未返回視圖前調(diào)用此方法
     * 這里可在返回用戶前對模型數(shù)據(jù)進(jìn)行加工處理,比如這里加入公用信息以便頁面顯示
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        //handle執(zhí)行之后宦焦,返回ModelAndView之前发钝。
        System.out.println("Interceptor1 postHandle......");
    }

    /**
     * controller執(zhí)行后且視圖返回后調(diào)用此方法
     * 這里可得到執(zhí)行controller時的異常信息
     * 這里可記錄操作日志,資源清理等
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // 返回ModelAndView之后波闹。
        //可以在此處理異常
        System.out.println("Interceptor1 afterCompletion......");
    }

2.2酝豪、攔截器配置

2.2.1、 針對某種mapping配置

在springmvc配置文件中:

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
  <property name="interceptors">
    <list>
        <ref bean="handlerInterceptor1"/>
        <ref bean="handlerInterceptor2"/>
    </list>
  </property>
</bean>
<bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/>
<bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>

2.2.2精堕、配置全局?jǐn)r截器

在springmvc配置文件中:

<!-- 配置攔截器 -->
<mvc:interceptors>
  <!-- 按照配置的順序執(zhí)行 -->
  <mvc:interceptor>
    <mvc:mapping path="/**"/>
    <!-- 排除對js的攔截-->
    <mvc:exclude-mapping path="/**/*.js"/>
    <bean class="com.itheima.springmvc.interceptor.Interceptor1"></bean>
  </mvc:interceptor>
  <mvc:interceptor>
    <mvc:mapping path="/**"/>
    <bean class="com.itheima.springmvc.interceptor.Interceptor2"></bean>
  </mvc:interceptor>
</mvc:interceptors>

2.3孵淘、攔截器總結(jié)

preHandle按攔截器定義順序調(diào)用
postHandler按攔截器定義逆序調(diào)用
afterCompletion按攔截器定義逆序調(diào)用

postHandler在攔截器鏈內(nèi)所有攔截器返回成功時調(diào)用
afterCompletion只有preHandle返回true才調(diào)用

2.4、防止攔截靜態(tài)資源

方案二方案三只支持不在/WEB-INF/下的靜態(tài)資源

2.4.1歹篓、方案一

在攔截器配置中添加<mvc:exclude-mapping path="/**/*.js"/>
如下:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <!--spring-mvc3.0以后才支持瘫证,spring-mvc3.0不支持-->
        <mvc:exclude-mapping path="/**/*.js"/>
        <bean class="cn.itheima.springmvc.interceptor.Interceptor1"></bean>
    </mvc:interceptor>
</mvc:interceptors>

2.4.2、方案二

在web.xml中對DispatcherServlet添加:

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

2.4.3庄撮、方案三

在springmvc配置文件中添加:

<!-- spring-mvc3.0后推薦 -->
<mvc:default-servlet-handler/>

2.4.4背捌、方案四

配置攔截器只攔截*.do或者*.action等,只攔截請求不攔截靜態(tài)資源洞斯。

<!-- 配置攔截器 -->
<mvc:interceptors>
  <!-- 按照配置的順序執(zhí)行 -->
  <mvc:interceptor>
    <mvc:mapping path="/**/*.do"/>
    <mvc:mapping path="/**/*.action"/>
    <bean class="com.itheima.springmvc.interceptor.Interceptor1"></bean>
  </mvc:interceptor>
  <mvc:interceptor>
    <mvc:mapping path="/**/*.do"/>
    <mvc:mapping path="/**/*.action"/>
    <bean class="com.itheima.springmvc.interceptor.Interceptor2"></bean>
  </mvc:interceptor>
</mvc:interceptors>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毡庆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子烙如,更是在濱河造成了極大的恐慌么抗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亚铁,死亡現(xiàn)場離奇詭異蝇刀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)徘溢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門熊泵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仰迁,“玉大人甸昏,你說我怎么就攤上這事顽分。” “怎么了施蜜?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵卒蘸,是天一觀的道長。 經(jīng)常有香客問我翻默,道長缸沃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任修械,我火速辦了婚禮趾牧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肯污。我一直安慰自己翘单,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布蹦渣。 她就那樣靜靜地躺著哄芜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柬唯。 梳的紋絲不亂的頭發(fā)上认臊,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音锄奢,去河邊找鬼失晴。 笑死,一個胖子當(dāng)著我的面吹牛拘央,可吹牛的內(nèi)容都是我干的涂屁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼堪滨,長吁一口氣:“原來是場噩夢啊……” “哼胯陋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袱箱,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤遏乔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后发笔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盟萨,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年了讨,在試婚紗的時候發(fā)現(xiàn)自己被綠了捻激。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片制轰。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖胞谭,靈堂內(nèi)的尸體忽然破棺而出垃杖,到底是詐尸還是另有隱情,我是刑警寧澤丈屹,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布调俘,位于F島的核電站,受9級特大地震影響旺垒,放射性物質(zhì)發(fā)生泄漏彩库。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一先蒋、第九天 我趴在偏房一處隱蔽的房頂上張望骇钦。 院中可真熱鬧,春花似錦竞漾、人聲如沸眯搭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坦仍。三九已至,卻和暖如春叨襟,著一層夾襖步出監(jiān)牢的瞬間繁扎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工糊闽, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留梳玫,地道東北人。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓右犹,卻偏偏與公主長得像提澎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子念链,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.定義 定義攔截器,實現(xiàn)HandlerInterceptor接口,接口中實現(xiàn)三個方法. 2.攔截器配置 針對Ha...
    王子也寂寞閱讀 491評論 0 0
  • 一.攔截器 定義攔截器盼忌,實現(xiàn)HandlerInterceptor接口 可以從名稱和參數(shù)看出各個接口的順序和作用: ...
    Mr_歡先生閱讀 1,434評論 0 13
  • 一、定義Interceptor實現(xiàn)類 SpringMVC 中的Interceptor 攔截請求是通過Handler...
    bboymonk閱讀 381評論 0 0
  • SpringMVC中使用Interceptor攔截器 有兩種常用的方法實現(xiàn)SpringMVC攔截器: 1.一種是實...
    劉陽0292閱讀 985評論 0 4
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理掂墓,服務(wù)發(fā)現(xiàn)谦纱,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139