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

9個(gè)SpringBoot中的自帶實(shí)用過濾器使用詳解

 更新時(shí)間:2025年05月09日 08:10:24   作者:風(fēng)象南  
在SpringBoot應(yīng)用中,過濾器(Filter)是處理HTTP請求和響應(yīng)的重要組件,SpringBoot自帶了許多實(shí)用的過濾器,如字符編碼,跨域請求,緩存控制等,下面我們就來看看它的具體使用吧

在SpringBoot應(yīng)用中,過濾器(Filter)是處理HTTP請求和響應(yīng)的重要組件,它們能在請求到達(dá)控制器前或響應(yīng)返回客戶端前進(jìn)行攔截處理。

SpringBoot自帶了許多實(shí)用的過濾器,如字符編碼、跨域請求、緩存控制等。

1. CharacterEncodingFilter - 字符編碼過濾器

CharacterEncodingFilter是SpringBoot中最常用的過濾器之一,它確保HTTP請求和響應(yīng)使用正確的字符編碼,避免出現(xiàn)亂碼問題。

功能和配置

在SpringBoot應(yīng)用中,該過濾器默認(rèn)已啟用,使用UTF-8編碼。你可以通過以下屬性進(jìn)行自定義配置:

# application.properties
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true

手動配置示例

@Bean
public FilterRegistrationBean<CharacterEncodingFilter> characterEncodingFilter() {
    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    
    FilterRegistrationBean<CharacterEncodingFilter> registrationBean = new FilterRegistrationBean<>();
    registrationBean.setFilter(filter);
    registrationBean.addUrlPatterns("/*");
    registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return registrationBean;
}

實(shí)際應(yīng)用:當(dāng)你的應(yīng)用需要處理多語言內(nèi)容,特別是包含中文、日文、阿拉伯文等非ASCII字符時(shí),此過濾器能確保數(shù)據(jù)在傳輸過程中不會出現(xiàn)亂碼。

2. HiddenHttpMethodFilter - HTTP方法轉(zhuǎn)換過濾器

HTML表單只支持GET和POST方法,但RESTful API通常需要PUT、DELETE等HTTP方法。HiddenHttpMethodFilter通過識別表單中的隱藏字段來模擬這些HTTP方法。

配置方式

# 默認(rèn)是開啟的,如需禁用可設(shè)置為false
spring.mvc.hiddenmethod.filter.enabled=true

使用示例

<form action="/users/123" method="post">
    <input type="hidden" name="_method" value="DELETE"/>
    <button type="submit">刪除用戶</button>
</form>

上述表單提交后,過濾器將把POST請求轉(zhuǎn)換為DELETE請求,路由到對應(yīng)的刪除處理方法。

@DeleteMapping("/users/{id}")
public String deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
    return "redirect:/users";
}

實(shí)際應(yīng)用:當(dāng)你構(gòu)建不使用JavaScript的傳統(tǒng)Web應(yīng)用,而又希望遵循RESTful設(shè)計(jì)原則時(shí),這個(gè)過濾器非常有用。

3. FormContentFilter - 表單內(nèi)容過濾器

FormContentFilter允許處理非POST請求(如PUT、PATCH等)中的表單數(shù)據(jù),使這些請求的表單數(shù)據(jù)能像POST請求一樣被解析。

配置方式

spring.mvc.formcontent.filter.enabled=true

實(shí)際應(yīng)用場景

當(dāng)客戶端需要通過PUT請求更新資源,并以表單形式提交數(shù)據(jù)時(shí),該過濾器能確保SpringMVC正確解析請求數(shù)據(jù)。

@PutMapping("/users/{id}")
public String updateUser(@PathVariable Long id, UserForm form) {
    // 沒有FormContentFilter時(shí),form對象的屬性將無法被正確填充
    userService.updateUser(id, form);
    return "redirect:/users";
}

4. RequestContextFilter - 請求上下文過濾器

RequestContextFilter創(chuàng)建并維護(hù)一個(gè)RequestContext對象,使其在整個(gè)請求處理過程中可用,便于訪問特定于請求的信息。

主要功能

• 使Locale解析和主題解析可用于整個(gè)請求

• 允許在任何地方獲取當(dāng)前請求的信息

• 支持請求作用域的數(shù)據(jù)綁定

使用示例

@Component
public class RequestInfoService {
    
    public String getClientInfo() {
        ServletRequestAttributes attributes = 
            (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        
        return String.format("Client IP: %s, User-Agent: %s", 
                             request.getRemoteAddr(), 
                             request.getHeader("User-Agent"));
    }
}

實(shí)際應(yīng)用:當(dāng)你需要在非Controller組件(如Service層)中訪問當(dāng)前HTTP請求信息時(shí),此過濾器提供的功能非常有用。

5. CorsFilter - 跨域資源共享過濾器

CorsFilter實(shí)現(xiàn)了跨域資源共享(CORS)規(guī)范,允許瀏覽器向不同域的服務(wù)器發(fā)送請求,解決同源策略的限制。

配置方式

@Bean
public CorsFilter corsFilter() {
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowCredentials(true);
    config.addAllowedOrigin("https://example.com");
    config.addAllowedHeader("*");
    config.addAllowedMethod("*");
    
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/api/**", config);
    
    return new CorsFilter(source);
}

也可通過屬性配置:

spring.web.cors.allowed-origins=https://example.com
spring.web.cors.allowed-methods=GET,POST,PUT,DELETE
spring.web.cors.allowed-headers=Authorization,Content-Type
spring.web.cors.allow-credentials=true

實(shí)際應(yīng)用:當(dāng)你的前端應(yīng)用和API部署在不同域名下時(shí),如前端在example.com,API在api.example.com,CORS過濾器是必不可少的。

6. ShallowEtagHeaderFilter - ETag緩存過濾器

ShallowEtagHeaderFilter自動為HTTP響應(yīng)添加ETag 頭信息,幫助客戶端實(shí)現(xiàn)高效的緩存策略,減少不必要的網(wǎng)絡(luò)傳輸。

原理與配置

此過濾器通過計(jì)算響應(yīng)內(nèi)容的哈希值生成ETag,當(dāng)客戶端再次請求相同資源時(shí),可以通過比對ETag決定是否返回304(Not Modified)狀態(tài)碼。

@Bean
public FilterRegistrationBean<ShallowEtagHeaderFilter> shallowEtagHeaderFilter() {
    FilterRegistrationBean<ShallowEtagHeaderFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new ShallowEtagHeaderFilter());
    registration.addUrlPatterns("/api/*");
    registration.setName("shallowEtagHeaderFilter");
    return registration;
}

使用效果

  • 首次請求:服務(wù)器返回完整內(nèi)容和ETag
  • 后續(xù)請求:客戶端發(fā)送If-None-Match頭,服務(wù)器比較ETag值
  • 內(nèi)容未變:返回304狀態(tài)碼,無響應(yīng)體
  • 內(nèi)容已變:返回200狀態(tài)碼和新內(nèi)容

實(shí)際應(yīng)用:當(dāng)你的應(yīng)用提供大量靜態(tài)內(nèi)容或不頻繁變化的API響應(yīng)時(shí),此過濾器能顯著減少帶寬使用并提高響應(yīng)速度。

7. ForwardedHeaderFilter - 轉(zhuǎn)發(fā)頭信息過濾器

在使用負(fù)載均衡器或反向代理時(shí),ForwardedHeaderFilter能處理轉(zhuǎn)發(fā)的頭信息,確保應(yīng)用能正確識別客戶端的原始信息。

處理的頭信息

• X-Forwarded-Host

• X-Forwarded-Port

• X-Forwarded-Proto

• X-Forwarded-Prefix

• X-Forwarded-For

配置示例

@Bean
public FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter() {
    FilterRegistrationBean<ForwardedHeaderFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new ForwardedHeaderFilter());
    registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return registration;
}

實(shí)際應(yīng)用:當(dāng)你的SpringBoot應(yīng)用部署在Nginx或AWS ELB等反向代理后面時(shí),此過濾器能確保生成的URL和重定向使用正確的協(xié)議、主機(jī)名和端口。

8. OrderedRequestContextFilter - 有序請求上下文過濾器

OrderedRequestContextFilterRequestContextFilter的擴(kuò)展版本,實(shí)現(xiàn)了Ordered接口,使其在過濾器鏈中的執(zhí)行順序可以更精確控制。

與RequestContextFilter的區(qū)別

• 實(shí)現(xiàn)了Ordered接口

• 默認(rèn)優(yōu)先級為FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER - 10000

• 在SpringBoot應(yīng)用中替代了普通的RequestContextFilter

使用場景

當(dāng)你有多個(gè)過濾器,且它們之間存在依賴關(guān)系時(shí),OrderedRequestContextFilter能確保在正確的時(shí)機(jī)執(zhí)行請求上下文初始化。

9. ResourceUrlEncodingFilter - 資源URL編碼過濾器

ResourceUrlEncodingFilter主要用于處理靜態(tài)資源的版本化URL,特別是在使用資源指紋或版本策略時(shí)。

功能介紹

• 將資源路徑轉(zhuǎn)換為包含版本信息的URL

• 支持內(nèi)容哈?;蚬潭ò姹咎?/p>

• 與ResourceUrlProvider協(xié)同工作

使用示例

@Configuration
public class WebConfig implements WebMvcConfigurer {
    
    @Bean
    public ResourceUrlEncodingFilter resourceUrlEncodingFilter() {
        return new ResourceUrlEncodingFilter();
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("classpath:/static/")
                .setCachePeriod(3600)
                .resourceChain(true)
                .addResolver(new VersionResourceResolver()
                        .addContentVersionStrategy("/**"));
    }
}

在模板中使用:

<!-- Thymeleaf -->
<link rel="stylesheet" th:href="@{/resources/css/main.css}" rel="external nofollow" />

<!-- 渲染后可能變?yōu)?-->
<link rel="stylesheet" href="/resources/css/main-d41d8cd98f00b204e9800998ecf8427e.css" rel="external nofollow" />

實(shí)際應(yīng)用:當(dāng)你需要實(shí)現(xiàn)高效的前端資源緩存策略,特別是在部署新版本時(shí)確保用戶獲取最新資源而不受瀏覽器緩存影響時(shí),此過濾器非常有用。

總結(jié)

在實(shí)際項(xiàng)目中,根據(jù)應(yīng)用需求選擇合適的過濾器,并正確配置它們的執(zhí)行順序,將極大地提升應(yīng)用的質(zhì)量和開發(fā)效率。

到此這篇關(guān)于9個(gè)SpringBoot中的自帶實(shí)用過濾器使用詳解的文章就介紹到這了,更多相關(guān)SpringBoot過濾器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java多線程處理文件的示例詳解

    Java多線程處理文件的示例詳解

    在Java編程中,文件處理是一項(xiàng)常見的任務(wù),為了提高文件處理的效率,我們可以使用多線程技術(shù),本文將詳細(xì)介紹如何使用Java多線程來處理文件,需要的可以參考下
    2024-12-12
  • 簡單了解Spring Web相關(guān)模塊運(yùn)行原理

    簡單了解Spring Web相關(guān)模塊運(yùn)行原理

    這篇文章主要介紹了簡單了解Spring Web相關(guān)模塊運(yùn)行原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java花式解決'分割回文串 ii'問題詳解

    Java花式解決'分割回文串 ii'問題詳解

    最學(xué)習(xí)動態(tài)規(guī)劃思想的路上,遇見了‘分割回文串問題’,如臨大敵啊,題目聽起來蠻簡單,思考起來卻也沒那么容易,本文將為大家詳細(xì)介紹幾種解決分割回文串 ii問題的辦法,需要的可以參考一下
    2021-12-12
  • Spring Cache原理解析

    Spring Cache原理解析

    Spring Cache是一個(gè)框架,它提供了基于注解的緩存功能,使得開發(fā)者可以很方便地將緩存集成到他們的應(yīng)用程序中,這篇文章主要介紹了Spring Cache原理解析,需要的朋友可以參考下
    2024-05-05
  • Invalid bound statement(not found):錯(cuò)誤的解決方案

    Invalid bound statement(not found):錯(cuò)誤的解決方案

    本文介紹了在開發(fā)Java SpringBoot應(yīng)用程序時(shí)出現(xiàn)的"Invalidboundstatement(notfound)"錯(cuò)誤的原因及解決方法,該錯(cuò)誤通常與MyBatis或其他持久化框架相關(guān),可能是由于配置錯(cuò)誤、拼寫錯(cuò)誤或其他問題引起的,解決方法包括檢查SQL映射文件
    2025-01-01
  • SpringMVC 上傳文件 MultipartFile 轉(zhuǎn)為 File的方法

    SpringMVC 上傳文件 MultipartFile 轉(zhuǎn)為 File的方法

    這篇文章主要介紹了SpringMVC 上傳文件 MultipartFile 轉(zhuǎn)為 File的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • IDEA中JetBrains Mono字體的正確安裝姿勢

    IDEA中JetBrains Mono字體的正確安裝姿勢

    在 JetBrains Mono 的設(shè)計(jì)階段,它就充分考慮到了長時(shí)間工作可能導(dǎo)致的眼睛疲勞問題,比如字母的大小和形狀、空間量、自然等寬平衡、不必要的細(xì)節(jié)、連字、以及難以區(qū)分的符號等,從而最終設(shè)計(jì)出了這么一款字體
    2021-06-06
  • java操作PDF文件方法之轉(zhuǎn)換、合成、切分

    java操作PDF文件方法之轉(zhuǎn)換、合成、切分

    最近需要做?個(gè)把多個(gè)pdf報(bào)告合并成?個(gè)以?便預(yù)覽的需求,下面這篇文章主要給大家介紹了關(guān)于java操作PDF文件方法之轉(zhuǎn)換、合成、切分的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • RestTemplate請求失敗自動重啟機(jī)制精講

    RestTemplate請求失敗自動重啟機(jī)制精講

    這篇文章主要為大家介紹了RestTemplate請求失敗自定義處理的方法,自動重試的機(jī)制精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多所進(jìn)步,早日升職加薪
    2022-03-03
  • Java實(shí)現(xiàn)文件上傳的兩種方法(uploadify和Spring)

    Java實(shí)現(xiàn)文件上傳的兩種方法(uploadify和Spring)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)文件上傳的兩種方法,uploadify和Spring實(shí)現(xiàn)文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論

永安市| 安阳县| 灌云县| 大厂| 夏津县| 西宁市| 星子县| 济阳县| 岳西县| 光山县| 绥德县| 无极县| 临湘市| 长岭县| 浦北县| 江都市| 长治市| 青阳县| 百色市| 论坛| 临颍县| 昭通市| 怀柔区| 通化县| 闽侯县| 太湖县| 鹰潭市| 穆棱市| 肃南| 太谷县| 平凉市| 阿图什市| 定襄县| 临夏市| 平原县| 延边| 嵩明县| 彭山县| 阿拉善盟| 无极县| 德清县|