springboot WebFilter+@Component urlPatterns 全部拦截

ops/2024/11/14 15:01:38/

问题描述
@WebFilter(filterName = “ssoFilter”,urlPatterns = “/*”)配置

@Order中的value越小,优先级越高。
解决方法一:
在springboot启动类上添加
@ServletComponentScan(basePackages = “com.package.path”)

解决方法二:
手动配置bean(推荐这种方式,可以在FilterRegistrationBean里设置Order)不需要@WebFilter注解

java">package com.zhkj.saas.ims.lnterceptor;import com.zhkj.saas.ims.controller.ProxyController;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;/*** @author lvyuanjun* @date 2023/4/26 15:27*/
public class ChannelFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {try {ServletRequest requestWrapper = null;if (request instanceof HttpServletRequest) {HttpServletRequest req = (HttpServletRequest) request;String requestURI = req.getRequestURI();boolean state = ProxyController.REQUEST_URI_DATA_AUTH_LIST.contains(requestURI);if(state){requestWrapper = new RequestParameterWrapper(req);}}if (requestWrapper == null) {chain.doFilter(request, response);} else {chain.doFilter(requestWrapper, response);}} catch (IOException e) {e.printStackTrace();} catch (ServletException e) {e.printStackTrace();}}@Overridepublic void destroy() {}
}
java">@Configuration
public class WebAuthFilterConfig {@Beanpublic FilterRegistrationBean webAuthFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(loginFilter());registration.setName("ChannelFilter");registration.addUrlPatterns("/spu/*");registration.setOrder(0);return registration;}@Beanpublic Filter channelFilter() {return new ChannelFilter();}
}

尝试了如下几种情况:

  1. Filter 实现类 + @WebFilter + @ServletComponentScan:正常urlpattern的Filter
  2. Filter 实现类 + FilterRegistrationBean构造 + @Configuration:正常urlpattern的Filter,并且可以设置Order
  3. 仅仅 Filter实现类 + @Component :会注册一个urlpattern 为 /*的过滤器
  4. 通过1、2、3可以得知,只要在Filter实现类上增加 @Component ,就会导致 1个正常urlpattern的filter+1个拦截/*的filter(由于@Component注解导致)

http://www.ppmy.cn/ops/5810.html

相关文章

迁移学习入门

参考文献 [1]迁移学习与领域自适应:如何让模型更好地适应新的任务 [2]迁移学习与多模态数据处理的结合与应用 [3]Domain Adaptation(领域自适应,MMD,DANN) [4]迁移学习与多模态学习:实现跨模态知识传递 [5…

Linux编辑器gcc/g++的使用以及Makefile的用法

gcc如何完成 格式 gcc [选项] 要编译的文件 [选项] [目标文件] gcc对code.c编译形成可执行文件mybin,十分推荐直接这样写,下面会有拆分写法(不推荐) gcc与我们使用过的编辑器无二,都需要经过 1. 预处理(…

UE4_动画基础_动画重定位原理

动画重定位 是一种允许在共用相同骨架资源但比例差异很大的角色之间复用动画的功能。通过重定位,可以防止生成动画的骨架在使用来自不同外形的角色的动画时丢失比例或产生不必要的变形。 通过动画重定位,还可以在使用 不同骨架 资源的角色之间共享动画&a…

【LeetCode热题100】【图论】实现 Trie (前缀树)

题目链接:208. 实现 Trie (前缀树) - 力扣(LeetCode) 这应该和图论没啥关系,应该属于哈希和树,题目没讲前缀树到达是啥 前缀树是如何做到高效查找字符串的呢,先说单词查找树吧,一共就只有26个…

Docker Desktop 卡死在 “Starting the Docker Engine“问题解决

docker desktop启动卡死在这个界面长时间没有反应 wsl --status输入以上命令查看wsl状态,发现也是卡死的状态,长时间没有反应,猜测是因为WSL卡死导致的docker desktop卡死的 netsh winsock reset通过以上命令重置 重启电脑后问题解决

《量化投资以Python为工具》目录

《量化投资以Python为工具》 获取链接:《量化投资以Python为工具》 更多技术书籍:技术书籍分享,前端、后端、大数据、AI、人工智能... ​ ​ ​ ​

大数据:【学习笔记系列】Flink 中的 DataStream API 和 DataSet API

Apache Flink 提供了两种主要的数据处理API:DataStream API 和 DataSet API,这两种API分别针对不同的数据处理场景设计。以下是对这两种API的详细介绍: DataSet API 概述: DataSet API 是 Flink 的一个批处理API,用于…

一、pwn - 零基础ROP之Android ARM 32位篇(新修订,精华篇)

一、环境搭建 安装ndk r10e,必须得这个版本,其他版本可能导致 -fno-stack-protector 不生效! r10e Darwin: https://dl.google.com/android/repository/android-ndk-r10e-darwin-x86_64.zipLinux: https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_6…