欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

@WebFilter在SpringBoot無效的原因分析和解決方案

 更新時(shí)間:2024年03月24日 14:57:30   作者:無悔人生(ffychina)  
使用Ruoyi的demo部署成功后,發(fā)現(xiàn)js、css等靜態(tài)文件都進(jìn)入了過濾器,但是發(fā)現(xiàn)靜態(tài)文件沒有使用瀏覽器緩存,新建BrowserCacheFilter.java并增加@WebFilter處理,應(yīng)用自動(dòng)重啟后發(fā)現(xiàn)@WebFilter無效,所以本文給大家介紹了@WebFilter在SpringBoot無效的原因分析和解決方案

問題描述:

使用Ruoyi的demo部署成功后,發(fā)現(xiàn)js、css等靜態(tài)文件都進(jìn)入了過濾器,修改application.yml:

xss: 
  # 過濾開關(guān)
  enabled: true
  # 排除鏈接(多個(gè)用逗號(hào)分隔)
  # 手動(dòng)增加.*\\.css,.*\\.jpg,.*\\.js,.*\\.map,注意使用的是正則表達(dá)式
  excludes: /system/notice/*,.*\\.css,.*\\.jpg,.*\\.js,.*\\.map
  # 匹配鏈接
  urlPatterns: /system/*,/monitor/*,/tool/*

自動(dòng)重啟應(yīng)用后發(fā)現(xiàn)過XssFilter.java已經(jīng)排除了靜態(tài)文件了。

但是發(fā)現(xiàn)靜態(tài)文件沒有使用瀏覽器緩存,新建BrowserCacheFilter.java并增加@WebFilter處理:

package com.ruoyi.framework.config;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@WebFilter(filterName = "browserCacheFilter", urlPatterns = {"*.css","*.jpg","*.js"})
public class BrowserCacheFilter implements Filter{
	@Override
	public void init(FilterConfig filterConfig) throws ServletException{
		Filter.super.init(filterConfig);
	}

	public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,ServletException{
		HttpServletRequest request=(HttpServletRequest)req;
		HttpServletResponse response=(HttpServletResponse)res;
//		response.addHeader("Cache-Control","no-cache");
//		response.addHeader("Expires","Thu, 01 Jan 1970 00:00:00 GMT");
		response.addHeader("Cache-Control","max-age=86400"); //86400s=24h
		chain.doFilter(request,response);
	}
}

應(yīng)用自動(dòng)重啟后發(fā)現(xiàn)@WebFilter無效!

解決方案:

方案1:BrowserCacheFilter.java增加@Component 或 @Configuration

@Component
@WebFilter(filterName = "browserCacheFilter", urlPatterns = {"*.css","*.jpg","*.js"})
public class BrowserCacheFilter implements Filter{

處理結(jié)果:重啟后可以進(jìn)入到init方法,但@WebFilter的urlPatterns無效,準(zhǔn)確地說,是@WebFilter仍然無效。

方案2:FilterConfig.java增加@Bean

package com.ruoyi.framework.config;

import java.util.HashMap;
import java.util.Map;
import javax.servlet.DispatcherType;

import org.nutz.lang.Lang;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.xss.XssFilter;

/**
 * Filter配置
 *
 * @author ruoyi
 */
@Configuration
public class FilterConfig {
    @Value("${xss.enabled}")
    private String enabled;

    @Value("${xss.excludes}")
    private String excludes;

    @Value("${xss.urlPatterns}")
    private String urlPatterns;

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public FilterRegistrationBean xssFilterRegistration()    {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setDispatcherTypes(DispatcherType.REQUEST);
        registration.setFilter(new XssFilter());
        registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));
        registration.setName("xssFilter");
        registration.setOrder(Integer.MAX_VALUE);
        Map<String, String> initParameters = new HashMap<String, String>();
        initParameters.put("excludes", excludes);
        initParameters.put("enabled", enabled);
        registration.setInitParameters(initParameters);
        return registration;
    }
    
    /**增加BrowserCacheFilter過濾器*/
    @Bean
    public FilterRegistrationBean browserCacheFilterRegistration()    {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new BrowserCacheFilter());
        registration.addUrlPatterns("*.css","*.js","*.jpg","*.png","");
        return registration;
    }
}

重啟后能進(jìn)入到init方法,并按【registration.addUrlPatterns(".css",".js",".jpg",".png","")】設(shè)置過濾靜態(tài)文件。

方案3:RuoYiApplication.java增加@ServletComponentScan

package com.ruoyi;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.servlet.ServletComponentScan;

/**
 * 啟動(dòng)程序
 * @author ruoyi
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
@ServletComponentScan
public class RuoYiApplication {
    public static void main(String[] args)    {
        // System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(RuoYiApplication.class, args);
         ...
    }
}

應(yīng)用重啟后能識(shí)別和處理@WebFilter注解,能進(jìn)入init方法并根據(jù)urlPatterns過濾靜態(tài)文件。

方案4:在FilterConfig.java增加@ServletComponentScan

package com.ruoyi.framework.config;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.DispatcherType;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.xss.XssFilter;

/**
 * Filter配置
 * @author ruoyi
 */
@Configuration
@ServletComponentScan
public class FilterConfig
{
    @Value("${xss.enabled}")
    private String enabled;

    @Value("${xss.excludes}")
    private String excludes;

    @Value("${xss.urlPatterns}")
    private String urlPatterns;

    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public FilterRegistrationBean xssFilterRegistration()
    {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setDispatcherTypes(DispatcherType.REQUEST);
        registration.setFilter(new XssFilter());
        registration.addUrlPatterns(StringUtils.split(urlPatterns, ","));
        registration.setName("xssFilter");
        registration.setOrder(Integer.MAX_VALUE);
        Map<String, String> initParameters = new HashMap<String, String>();
        initParameters.put("excludes", excludes);
        initParameters.put("enabled", enabled);
        registration.setInitParameters(initParameters);
        return registration;
    }
}

應(yīng)用重啟后能識(shí)別和處理@WebFilter注解,能進(jìn)入init方法并根據(jù)urlPatterns過濾靜態(tài)文件。方案4只掃描該目錄或其子目錄的@WebFilter,其他目錄不會(huì)掃描。

總結(jié):

比較以上4個(gè)方案,方案4是最理想的解決方案。

到此這篇關(guān)于@WebFilter在SpringBoot無效的原因分析和解決方案的文章就介紹到這了,更多相關(guān)SpringBoot @WebFilter無效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合Spring Security的詳細(xì)教程

    SpringBoot整合Spring Security的詳細(xì)教程

    這篇文章主要介紹了SpringBoot整合Spring Security的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java實(shí)現(xiàn)接口的典型案例

    java實(shí)現(xiàn)接口的典型案例

    下面小編就為大家?guī)硪黄猨ava實(shí)現(xiàn)接口的典型案例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java編程經(jīng)典小游戲設(shè)計(jì)-打磚塊小游戲源碼

    Java編程經(jīng)典小游戲設(shè)計(jì)-打磚塊小游戲源碼

    這篇文章主要介紹了Java編程經(jīng)典小游戲設(shè)計(jì)-打磚塊小游戲源碼,還是挺不錯(cuò)的,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • 不使用myeclipse注冊(cè)機(jī)得到myeclipse注冊(cè)碼的方法(myeclipse序列號(hào))

    不使用myeclipse注冊(cè)機(jī)得到myeclipse注冊(cè)碼的方法(myeclipse序列號(hào))

    本文為大家介紹不使用myeclipse注冊(cè)機(jī)就能得到myeclipse注冊(cè)碼(序列號(hào))的方法, 運(yùn)行下面的JAVA代碼就可以了
    2014-01-01
  • 記錄一個(gè)使用Spring?Data?JPA設(shè)置默認(rèn)值的問題

    記錄一個(gè)使用Spring?Data?JPA設(shè)置默認(rèn)值的問題

    這篇文章主要介紹了使用Spring?Data?JPA設(shè)置默認(rèn)值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Springcloud基于OpenFeign實(shí)現(xiàn)服務(wù)調(diào)用代碼實(shí)例

    Springcloud基于OpenFeign實(shí)現(xiàn)服務(wù)調(diào)用代碼實(shí)例

    這篇文章主要介紹了Springcloud基于OpenFeign實(shí)現(xiàn)服務(wù)調(diào)用代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java的Character類詳解

    Java的Character類詳解

    在實(shí)際開發(fā)過程中,我們經(jīng)常會(huì)遇到需要使用對(duì)象,而不是內(nèi)置數(shù)據(jù)類型的情況。為了解決這個(gè)問題,Java語言為內(nèi)置數(shù)據(jù)類型char提供了包裝類Character類。本文詳細(xì)介紹了Java的Character類,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • jQuery.event.trigger()的簡單解釋

    jQuery.event.trigger()的簡單解釋

    今天小編就為大家分享一篇關(guān)于jQuery.event.trigger()的簡單解釋,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 基于SpringBoot實(shí)現(xiàn)自動(dòng)裝配返回屬性的設(shè)計(jì)思路

    基于SpringBoot實(shí)現(xiàn)自動(dòng)裝配返回屬性的設(shè)計(jì)思路

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)自動(dòng)裝配返回屬性,這里涉及到的技術(shù)知識(shí)點(diǎn)有注解解析器,為什么用ResponseBodyAdvice這里解析?不在Filter,Interceptors,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-03-03
  • Spring框架 XML配置事務(wù)控制的步驟操作

    Spring框架 XML配置事務(wù)控制的步驟操作

    這篇文章主要介紹了Spring框架 XML配置事務(wù)控制的步驟操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論