最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot項(xiàng)目中定制攔截器的方法詳解

 更新時(shí)間:2019年10月28日 10:59:15   作者:SPRING BOOT實(shí)戰(zhàn)  
這篇文章主要介紹了Spring Boot項(xiàng)目中定制攔截器的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Spring Boot項(xiàng)目中定制攔截器的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Servlet 過濾器屬于Servlet API,和Spring關(guān)系不大。除了使用過濾器包裝web請(qǐng)求,Spring MVC還提供HandlerInterceptor(攔截器)工具。根據(jù)文檔,HandlerInterceptor的功能跟過濾器類似,但攔截器提供更精細(xì)的控制能力:在request被響應(yīng)之前、request被響應(yīng)之后、視圖渲染之前以及request全部結(jié)束之后。我們不能通過攔截器修改request內(nèi)容,但是可以通過拋出異常(或者返回false)來暫停request的執(zhí)行。

Spring MVC中常用的攔截器有:LocaleChangeInterceptor(用于國際化配置)和ThemeChangeInterceptor。我們也可以增加自己定義的攔截器,可以參考這篇文章中提供的demo

實(shí)戰(zhàn)

添加攔截器不僅是在WebConfiguration中定義bean,Spring Boot提供了基礎(chǔ)類WebMvcConfigurerAdapter,我們項(xiàng)目中的WebConfiguration類需要繼承這個(gè)類。

繼承WebMvcConfigurerAdapter;

為LocaleChangeInterceptor添加@Bean定義,這僅僅是定義了一個(gè)interceptor spring bean,但是Spring boot不會(huì)自動(dòng)將它加入到調(diào)用鏈中。

攔截器需要手動(dòng)加入調(diào)用鏈。

修改后完整的WebConfiguration代碼如下:

package com.test.bookpub;

import org.apache.catalina.filters.RemoteIpFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;

@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
  @Bean  public RemoteIpFilter remoteIpFilter() {
    return new RemoteIpFilter();
  }

  @Bean  public LocaleChangeInterceptor localeChangeInterceptor() {
    return new LocaleChangeInterceptor();
  }
  @Override  public void addInterceptors(InterceptorRegistry registry {
    registry.addInterceptor(localeChangeInterceptor());
  }
}

使用mvn spring-boot:run運(yùn)行程序,然后通過httpie訪問http://localhost:8080/books?locale=foo,在終端看到如下錯(cuò)誤信息。

Servlet.service() for servlet [dispatcherServlet] in context with path [] 
threw exception [Request processing failed; nested exception is 
java.lang.UnsupportedOperationException: Cannot change HTTP accept 
header - use a different locale resolution strategy] with root cause

PS:這里發(fā)生錯(cuò)誤并不是因?yàn)槲覀冚斎氲膌ocale是錯(cuò)誤的,而是因?yàn)槟J(rèn)的locale修改策略不允許來自瀏覽器的請(qǐng)求修改。發(fā)生這樣的錯(cuò)誤說明我們之前定義的攔截器起作用了。

分析

在我們的示例項(xiàng)目中,覆蓋并重寫了addInterceptors(InterceptorRegistory registory)方法,這是典型的回調(diào)函數(shù)——利用該函數(shù)的參數(shù)registry來添加自定義的攔截器。

在Spring Boot的自動(dòng)配置階段,Spring Boot會(huì)掃描所有WebMvcConfigurer的實(shí)例,并順序調(diào)用其中的回調(diào)函數(shù),這表示:如果我們想對(duì)配置信息做邏輯上的隔離,可以在Spring Boot項(xiàng)目中定義多個(gè)WebMvcConfigurer的實(shí)例。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

织金县| 奇台县| 颍上县| 双桥区| 康定县| 邻水| 竹山县| 揭西县| 岳西县| 调兵山市| 牟定县| 项城市| 秦皇岛市| 贵南县| 大关县| 连城县| 福贡县| 汝州市| 临江市| 南宁市| 旅游| 威远县| 陵川县| 洛扎县| 镇赉县| 天峨县| 隆尧县| 明溪县| 泸州市| 紫阳县| 年辖:市辖区| 黔江区| 铜梁县| 买车| 古丈县| 仪征市| 义乌市| 铅山县| 得荣县| 阳春市| 土默特左旗|