问题描述:

使用Ruoyi的demo部署成功后,发现js、css等静态文件都进入了过滤器,修改application.yml:

xss: # 过滤开关enabled: true# 排除链接(多个用逗号分隔)# 手动增加.*\\.css,.*\\.jpg,.*\\.js,.*\\.map,注意使用的是正则表达式excludes: /system/notice/*,.*\\.css,.*\\.jpg,.*\\.js,.*\\.map# 匹配链接urlPatterns: /system/*,/monitor/*,/tool/*

自动重启应用后发现过XssFilter.java已经排除了静态文件了。
但是发现静态文件没有使用浏览器缓存,新建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{@Overridepublic 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=24hchain.doFilter(request,response);}
}

应用自动重启后发现@WebFilter无效!

解决方案:

方案1:BrowserCacheFilter.java增加@Component 或 @Configuration
@Component
@WebFilter(filterName = "browserCacheFilter", urlPatterns = {"*.css","*.jpg","*.js"})
public class BrowserCacheFilter implements Filter{

处理结果:重启后可以进入到init方法,但@WebFilter的urlPatterns无效,准确地说,是@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" })@Beanpublic 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过滤器*/@Beanpublic FilterRegistrationBean browserCacheFilterRegistration()    {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new BrowserCacheFilter());registration.addUrlPatterns("*.css","*.js","*.jpg","*.png","");return registration;}
}

重启后能进入到init方法,并按【registration.addUrlPatterns(".css",".js",".jpg",".png","")】设置过滤静态文件。

方案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;/*** 启动程序* @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);...}
}

应用重启后能识别和处理@WebFilter注解,能进入init方法并根据urlPatterns过滤静态文件。

方案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" })@Beanpublic 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;}
}

应用重启后能识别和处理@WebFilter注解,能进入init方法并根据urlPatterns过滤静态文件。方案4只扫描该目录或其子目录的@WebFilter,其他目录不会扫描。

总结:

比较以上4个方案,方案4是最理想的解决方案。

@WebFilter在SpringBoot无效的原因分析和解决相关推荐

  1. php setcookie 出错,PHP setcookie无效的原因分析

    PHP setcookie无效的原因分析 在PHP开发中,有时候你在本地开发测试过程中是正常的,但是上传到服务器环境时候便运行不正常了,最近遇到了这样一个问题,本地PHP开发环境中setcookie正 ...

  2. mysql数据库连接过多的错误,可能的原因分析及解决办法

    mysql数据库连接过多的错误,可能的原因分析及解决办法 来源:网络采集 作者:未知 系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是 ...

  3. win8计算机usb无法识别usb设备,Win8.1无法识别USB设备原因分析及解决办法(适合Win8)...

    Win8.1无法识别USB设备原因分析及解决办法 同事孩子要上大学,购买了预装Win8.1系统的笔记本,想要使用读卡器传照片,插上USB读卡器后,任务栏右下角显示无法识别的USB设备,这怎么可能呢?W ...

  4. php 修改css 不生效,HTML外部引用CSS文件不生效原因分析及解决办法

    本文主要给大家介绍html外部引用css文件不生效的原因分析及解决办法,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧 作为一个前端小白,鼓捣了几天前端..今天突然发现我深信不疑的东西, ...

  5. mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决

    本文主要向大家介绍了线上MySQL数据库机器内存爆掉原因分析与解决,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨 ...

  6. Eclipse 的常见报错、警告和原因分析、解决方式以及相关操作快捷键小结(持续更新)

    文章目录 前言 一.常见的三种类型错误 二.运行时错误 总结 前言 Eclipse 作为我们开发中最为常用的一款 IDE,功能齐全(虽然近几年被 IDEA 占尽了风头),但是最为基本的一些操作我们是要 ...

  7. WampServer + phpcms 开发中,浏览器 localhost 出现 Cannot to connect to mySQL server 的原因分析和解决办法?

    首先,确定你phpcms的文件已经都已经放置在对应的文件目录下! 注意: 本文针对 Wampserver + phpcms 开发中出现的此类问题.其他情况仅供参考. 在安装软件**WampServer ...

  8. 3蛋白wb_WB常见问题原因分析及解决办法

    蛋白免疫印迹(WB):基于抗原抗体的特异性结合作用,以检测复杂样品中的某种蛋白,并对其进行半定量分析的一种方法. 主要用于靶标蛋白特异性表达的定性或半定量分析,蛋白与蛋白或蛋白与DNA相互作用的后续分 ...

  9. 球球大作战显示中国服务器较差,球球大作战延迟卡顿原因分析及解决方法

    球球大作战想必不用说也知道多火了吧,小编周围的朋友都在玩,当然在玩的时候要是卡顿延迟的话就会让游戏体验大打折扣了,那么出现延迟卡顿要怎么解决呢?下面就让小编来告诉你处理的方法. 球球大作战延迟卡顿 球 ...

最新文章

  1. 中国的人生路上是紧跟领导就会有回报
  2. python详细安装教程3.7.4-Linux下Python3.7.4 安装教程
  3. ei指什么_SCI、EI、SSCI和ISTP的区别!
  4. 12c集群日志位置_Oracle 19C RAC 集群日志位置变化
  5. django ajax 更新表格_Django(反向解析,路由分发、名称空间、视图层、虚拟环境、Django版本、json,CBV)...
  6. css定位:相对定位
  7. .c和.h文件的区别(转载)
  8. php和python-php与python谁更适合web开发?为什么?
  9. js 中二叉树的深度遍历与广度遍历(递归实现与非递归实现)
  10. android谷歌打印插件下载地址,谷歌浏览器打印插件:Print Plus
  11. 解决问题:Something‘s wrong--perhaps a missing \item. \end{thebibliography}
  12. 2020-11-05
  13. 基于javacv(推流),nginx(流媒体服务器),VCL(播放器)搭建直播视频
  14. 个人邮箱|如何群发邮件?3秒教你搞定
  15. 关于Angular Js动态表格合并单元格的一点见解
  16. contourf()绘制填充颜色的二维等高线图
  17. 将视频背景扣掉换成白色相关知识
  18. 高斯积分e^(-x^2)在无限域上的定积分
  19. 雷达原理2——雷达发射机(更新中)
  20. Amazon SES介绍 - 如何通过SES发送邮件

热门文章

  1. 在Windows下使用vs2019编译libjpeg库
  2. 南阳理工学院计算机专业很强吗,南阳理工学院最好的专业?实力最强的是那个专业...
  3. VisualGDB使用SSH连接远程Linux服务器运行调试Linux工程
  4. STM32+0.96OLED的多级菜单设计
  5. 阿里云OSS存储 前端上传 MPS-转码模板 工作流以及媒体Bucket设置流程
  6. 抖音Vlog短视频达人必备2000+PR无缝转场过渡模板 全格式Premiere转场包
  7. win7计算机所有软件无法运行程序,解决win7电脑程序打不开方法
  8. SX1276/77/78学习笔记3 - SX1278 的 FIFO 工作流程和应用注意事项
  9. mac的safari浏览器如何开启开发者模式
  10. 旋转接头出现故障的原因分享