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

SpringBoot中9個內(nèi)置過濾器用法的完整指南

 更新時間:2025年08月12日 10:06:48   作者:小馬不敲代碼  
這篇文章主要為大家詳細(xì)介紹了SpringBoot中9個內(nèi)置過濾器用法的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一

Spring Boot - 內(nèi)置的9個過濾器用法

01CharacterEncodingFilter —— 亂碼終結(jié)者

關(guān)鍵詞:UTF-8、forceEncoding、Ordered.HIGHEST_PRECEDENCE

只要出現(xiàn)中文、emoji、阿拉伯文,就用它!

@Bean
public FilterRegistrationBean<CharacterEncodingFilter> characterEncodingFilter() {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");              // ① 指定編碼
    filter.setForceEncoding(true);            // ② 強(qiáng)制覆蓋已有編碼
    FilterRegistrationBean<CharacterEncodingFilter> bean = new FilterRegistrationBean<>(filter);
    bean.addUrlPatterns("/*");                // ③ 攔截所有請求
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);// ④ 最先執(zhí)行,防止其他過濾器搗蛋
    return bean;
}

注解:

  • setEncoding 解決請求/響應(yīng)亂碼;
  • setForceEncoding(true) 覆蓋 Tomcat 默認(rèn) ISO-8859-1;
  • addUrlPatterns(“/*”) 全局生效;
  • 最高優(yōu)先級,保證后續(xù)過濾器拿到的就是 UTF-8。

02HiddenHttpMethodFilter —— 把 POST 偽裝成 PUT/DELETE

關(guān)鍵詞:RESTful、_method、HTML 表單

<form action="/books/7" method="post">
  <input type="hidden" name="_method" value="DELETE"/>
  <button type="submit">刪除圖書</button>
</form>

spring.mvc.hiddenmethod.filter.enabled=true # application.yml 一行搞定

注解:

  • 表單必須是 POST;
  • 隱藏字段 _method 的值就是真實(shí) HTTP 方法;
  • Spring MVC 會自動路由到 @DeleteMapping。

03FormContentFilter —— PUT/PATCH 也能玩表單

關(guān)鍵詞:application/x-www-form-urlencoded、非 POST 表單

spring.mvc.formcontent.filter.enabled: true # 同樣一行配置

場景:老項(xiàng)目前端不會發(fā) application/json,但接口想用 PUT 更新。

@PutMapping("/users/{id}")
public String updateUser(@PathVariable Long id, UserForm form) {
    // 表單字段自動封裝進(jìn) UserForm
    userService.update(id, form);
    return "redirect:/users";
}

注解:

  • 過濾器把 PUT 請求體解析成 Map<String,String[]>;
  • Spring 數(shù)據(jù)綁定無縫銜接。

04RequestContextFilter —— 隨時隨地拿 Request

關(guān)鍵詞:RequestContextHolder、非 Controller 取 IP

@Service
public class ClientInfoService {
    public String whoami() {
        ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest req = attrs.getRequest();
        return String.format("IP: %s, UA: %s",
                             req.getRemoteAddr(),
                             req.getHeader("User-Agent"));
    }
}

注解:

  • 任何地方都能拿到當(dāng)前線程的 HttpServletRequest;
  • 適用于日志、審計(jì)、灰度路由。

05CorsFilter —— 跨域通行證

關(guān)鍵詞:Access-Control-Allow-Origin、Credentials、預(yù)檢

@Bean
public CorsFilter corsFilter() {
    CorsConfiguration cfg = new CorsConfiguration();
    cfg.setAllowCredentials(true);                // ① 允許攜帶 Cookie
    cfg.addAllowedOrigin("https://spa.xxx.com");  // ② 白名單域名
    cfg.addAllowedHeader("*");                    // ③ 任意請求頭
    cfg.addAllowedMethod("*");                    // ④ 任意方法
    UrlBasedCorsConfigurationSource src = new UrlBasedCorsConfigurationSource();
    src.registerCorsConfiguration("/api/**", cfg);
    return new CorsFilter(src);
}

注解:

  • 精準(zhǔn)控制哪些接口、哪些域名可以跨域;
  • 支持 Authorization 頭與 Cookie;
  • 比 @CrossOrigin 粒度更細(xì),可集中管理。

06ShallowEtagHeaderFilter —— 讓 304 飛起來

關(guān)鍵詞:ETag、緩存、節(jié)省帶寬

@Bean
public FilterRegistrationBean<ShallowEtagHeaderFilter> etag() {
    FilterRegistrationBean<ShallowEtagHeaderFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new ShallowEtagHeaderFilter());
    bean.addUrlPatterns("/static/*", "/api/report/*");
    return bean;
}

第一次 200 + ETag,第二次 304,直接省 80% 流量!

注解:

  • 計(jì)算響應(yīng)體 MD5 作為 ETag;
  • 客戶端帶 If-None-Match 對比即可;
  • 靜態(tài)資源、報(bào)表接口效果最佳。

07ForwardedHeaderFilter —— 反向代理小棉襖

關(guān)鍵詞:X-Forwarded-Proto、Nginx、ELB、HTTPS

@Bean
public FilterRegistrationBean<ForwardedHeaderFilter> forwarded() {
    FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new ForwardedHeaderFilter());
    bean.setOrder(Ordered.HIGHEST_PRECEDENCE);   // 越早越好
    return bean;
}

注解:

  • 自動重寫 request.getScheme()、getServerName();
  • 解決 HTTPS 終止在 Nginx 時,重定向變成 http 的尷尬。

08OrderedRequestContextFilter —— 順序可控的 RequestContext

如果你寫了 10+ 個自定義 Filter,誰先誰后就是生命線。

默認(rèn)優(yōu)先級:REQUEST_WRAPPER_FILTER_MAX_ORDER - 10000

想插隊(duì)?直接實(shí)現(xiàn) Ordered 接口

09ResourceUrlEncodingFilter —— 靜態(tài)資源“帶版本號”

關(guān)鍵詞:緩存破壞、內(nèi)容哈希、Thymeleaf 自動替換

@Configuration
public class WebCfg implements WebMvcConfigurer {
    @Bean
    public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
        return new ResourceUrlEncodingFilter();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/")
                .setCacheControl(CacheControl.maxAge(365, TimeUnit.DAYS))
                .resourceChain(true)
                .addResolver(new VersionResourceResolver()
                        .addContentVersionStrategy("/**")); // ① 哈希指紋
    }
}

Thymeleaf 模板:

<link rel="stylesheet" th:href="@{/static/css/app.css}" rel="external nofollow"  />
<!-- 實(shí)際輸出:/static/css/app-8a9b2c3.css -->

注解:

  • 文件內(nèi)容變動 → 指紋變化 → 瀏覽器重新下載;
  • 365 天強(qiáng)緩存,更新即發(fā)版,用戶無感知。

到此這篇關(guān)于SpringBoot中9個內(nèi)置過濾器用法的完整指南的文章就介紹到這了,更多相關(guān)SpringBoot內(nèi)置過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java字符串所有操作方法匯總

    java字符串所有操作方法匯總

    這篇文章主要介紹了java字符串所有操作方法匯總,需要的朋友可以參考下,在實(shí)際的編程中,我們經(jīng)常需要對字符串進(jìn)行各種操作,例如連接、截取、替換等,本文將按類別介紹一些Java字符串的常用方法,幫助讀者更好地理解和使用
    2023-11-11
  • MyBatisPlus靜態(tài)工具Db的實(shí)現(xiàn)方法

    MyBatisPlus靜態(tài)工具Db的實(shí)現(xiàn)方法

    Db是MyBatis-Plus3.5.4+提供的靜態(tài)工具類,無需注入Service或Mapper,直接通過靜態(tài)方法操作數(shù)據(jù)庫,本文就來詳細(xì)的介紹一下MyBatisPlus靜態(tài)工具Db的實(shí)現(xiàn),感興趣的可以了解一下
    2026-03-03
  • java分形繪制科赫雪花曲線(科赫曲線)代碼分享

    java分形繪制科赫雪花曲線(科赫曲線)代碼分享

    部分與整體以某種形式相似的形,稱為分形,科赫曲線是一種外形像雪花的幾何曲線,所以又稱為雪花曲線,它是分形曲線中的一種,畫法如下
    2013-12-12
  • Spring中propagation的傳播機(jī)制詳解

    Spring中propagation的傳播機(jī)制詳解

    這篇文章主要介紹了Spring中propagation的傳播機(jī)制詳解,要搞懂事務(wù)的傳播機(jī)制,那么就要明白邏輯事務(wù)中各個事務(wù)的關(guān)系,才能徹底理解事務(wù)傳播特性,在Spring事務(wù)中,各個邏輯事務(wù)的關(guān)系可以是并列、覆蓋或包含,需要的朋友可以參考下
    2023-12-12
  • maven依賴版本沖突如何處理

    maven依賴版本沖突如何處理

    文章主要介紹了Maven依賴版本沖突的原因以及如何處理版本沖突的方法,包括使用exclusions排除依賴和使用dependencyManagement鎖定版本號
    2025-01-01
  • Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見郵箱的配置)

    Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見郵箱的配置)

    這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件服務(wù)的相關(guān)資料,文中還附上了常見郵箱的配置,通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 淺析如何利用Spring AI構(gòu)建一個簡單的問答系統(tǒng)

    淺析如何利用Spring AI構(gòu)建一個簡單的問答系統(tǒng)

    Spring AI是Spring生態(tài)系統(tǒng)的最新成員,旨在簡化AI服務(wù)與Spring應(yīng)用的集成過程,本文小編就來和大家簡單介紹一下如何利用Spring AI構(gòu)建一個簡單的問答系統(tǒng)吧
    2025-05-05
  • SpringMVC按Ctrl上傳多個文件的方法

    SpringMVC按Ctrl上傳多個文件的方法

    這篇文章主要為大家詳細(xì)介紹了SpringMVC按Ctrl上傳多個文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)示例

    Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)示例

    這篇文章主要介紹了Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)示例,包括前中后序遍歷和求二叉樹深度的方法,需要的朋友可以參考下
    2015-08-08
  • Springboot詳解RocketMQ實(shí)現(xiàn)消息發(fā)送與接收流程

    Springboot詳解RocketMQ實(shí)現(xiàn)消息發(fā)送與接收流程

    這篇文章主要介紹了SpringBoot整合RocketMQ實(shí)現(xiàn)消息發(fā)送和接收功能,我們使用主流的SpringBoot框架整合RocketMQ來講解,使用方便快捷,本文分步驟給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評論

财经| 陆川县| 泰来县| 金川县| 牙克石市| 胶南市| 泾川县| 封丘县| 银川市| 玉山县| 石景山区| 菏泽市| 衡东县| 稷山县| 孟州市| 筠连县| 马鞍山市| 加查县| 长沙县| 桂林市| 济南市| 普洱| 五家渠市| 叶城县| 廉江市| 抚远县| 泸定县| 丰原市| 铜鼓县| 南郑县| 通许县| 开封县| 汤阴县| 武川县| 百色市| 中阳县| 普格县| 呼伦贝尔市| 阳信县| 和政县| 锦屏县|