Spring security antMatchers permitAll 不起作用

Posted

技术标签:

【中文标题】Spring security antMatchers permitAll 不起作用【英文标题】:Spring security antMatchers permitAll doesn't work 【发布时间】:2018-01-31 15:37:19 【问题描述】:

我知道有这个问题的主题,但我所做的配置是正确的,我将它与一个正常工作的项目进行了比较。 我想为 JWT 安全性“取消保护” /login 端点,但 AuthenticationFilter 在到达 /login 端点之前仍然运行。 我很困惑为什么它不起作用。

我的代码如下:

@Override
    protected void configure(HttpSecurity http) throws Exception 

        http
                .csrf().disable()

                .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()

                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()

                .authorizeRequests()

                .antMatchers("/login").permitAll()
                .anyRequest().authenticated();

        http
                .addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);

        http.headers().cacheControl();

    

【问题讨论】:

How to add a filter only for one special path WebSecurityConfigurerAdapter的可能重复 【参考方案1】:

重复:How to add a filter only for one special path WebSecurityConfigurerAdapter

您不能使用单个配置类来做到这一点。看看这个问题:How to apply spring security filter only on secured endpoints?。

在这种情况下,我认为更好的解决方案是配置多个HttpSecurity。来自Spring IO documentation:

我们可以配置多个 HttpSecurity 实例,就像我们可以拥有的一样 多个块。关键是延长 WebSecurityConfigurationAdapter 多次。例如, 以下是对 URL 进行不同配置的示例 以 /api/ 开头。

文档中有一个完整的示例,其中包含完成此操作的必要步骤:

    正常配置身份验证 创建一个 WebSecurityConfigurerAdapter 实例,其中包含 @Order 指定应该是哪个 WebSecurityConfigurerAdapter 优先考虑。 http.antMatcher 声明此 HttpSecurity 仅适用于以 /api/ 开头的 URL 创建另一个 WebSecurityConfigurerAdapter 实例。如果 URL 不以 /api/ 开头,则将使用此配置。这 在 ApiWebSecurityConfigurationAdapter 之后考虑配置 因为它在 1 之后有一个 @Order 值(没有 @Order 默认为最后一个)。

祝你好运!

【讨论】:

那么请观看这个示例项目并向我展示多个配置github.com/szerhusenBC/jwt-spring-security-demo/blob/master/src/… @Bart 在此示例中,您只有一个扩展 WebSecurityConfigurerAdapter 的类。正如我链接的 Spring IO 链接所示,您需要 2 个或更多。你试过了吗?

以上是关于Spring security antMatchers permitAll 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 在运行时动态添加/删除 antMatchers 和角色

Spring security antMatcher 未按预期工作

Spring Security:antMatcher 的序列未按预期工作 [重复]

Spring Security:所有端点返回状态 200 并且对约束没有响应作为 antMatchers

Spring security antMatchers permitAll 不起作用

使用 AngularJS 和 Spring Security 的单页应用程序中需要 AntMatchers