Spring Security每个url的过滤顺序

u4dcyp6a  于 2023-04-30  发布在  Spring
关注(0)|答案(2)|浏览(123)

我有两个过滤器来处理我的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之后添加我的过滤器。.这使得请求被我的过滤器处理两次!而且不止一次!
你知道吗?

hm2xizp9

hm2xizp91#

阅读this问题的详细信息,这正是您所要求的。它读出
Spring Security不会在它创建的Filterbean上设置顺序。这意味着,当 Boot 为它创建FilterRegistrationBean时,它会得到默认的顺序,即LOWEST_PRECEDENCE。
如果你想让你自己的Filter跟随Spring Security的Filter,你可以为Spring Security的Filter创建你自己的注册并指定顺序。

cs7cruho

cs7cruho2#

您必须在筛选器中覆盖此方法:

@Override
    protected boolean shouldNotFilter(HttpServletRequest request) {
        RequestMatcher uriMatcher = new AntPathRequestMatcher("/api/some/url", HttpMethod.GET.name());
        RequestMatcher matcher = new NegatedRequestMatcher(uriMatcher);
        return matcher.matches(request);
    }

相关问题