java - 每个 url 的 Spring Security 过滤器顺序
问题描述
我有两个过滤器来处理我的 httpRequest 并添加标题和数据。
我想以特定的执行顺序应用我的过滤器。所以我试过了:
@Component
@Order(1)
public class FirstFilter implements Filter { //**** }
@Component
@Order(2)
public class SecondFilter implements Filter { //**** }
这工作正常。但是,我只想将此顺序应用于以 (/api) 开头的请求,而不是应用于所有请求。所以 @Order 注释没有做我想做的事情。
我试过了 :
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.addFilterAfter(new FirstFilter (), ChannelProcessingFilter.class)
.addFilterAfter(new SecondtFilter (), FirstFilter .class)
这也有效,但我不想在 ChannelProcessingFilter 之后添加我的过滤器 .. 这会使我的过滤器处理两次请求!而且不止一次!
任何想法 ?
解决方案
阅读此问题详细信息,这正是您要问的。它读出
Spring Security 不会在它创建的 Filter bean 上设置顺序。这意味着,当 Boot 为其创建 FilterRegistrationBean 时,它会获得默认顺序,即 LOWEST_PRECEDENCE。
如果您希望自己的过滤器跟随 Spring Security,您可以为 Spring Security 的过滤器创建自己的注册并指定顺序。
推荐阅读
- javascript - 如何通过自定义服务器访问 next.js 呈现的 HTML
- node.js - Vercel Node 版本不兼容(Node、npm)
- java - 将 KafkaListener 使用的消息转换为 json
- laravel - 如何使用 Laravel API 在 Flutter 中进行无限滚动
- bash - 如果上一个命令成功完成,当上一个命令已经运行时,运行命令的简洁方法
- java - .class 文件与 Intellij 和 javac 的区别
- binary-search-tree - 这是最优二叉搜索树吗?
- c++ - 函数(通过 std::move)返回的 unique_ptr 何时超出范围
- javascript - 在 AJAX 和 php 文件之间解析 JSON 数据
- firebase - 我如何将 Pagination 3 与 Firestore 一起使用?