Spring安全antMatchers允许所有都不起作用

时间:2017-08-23 07:17:54

标签: spring spring-security permissions

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

我的代码如下:

@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();

    }

1 个答案:

答案 0 :(得分:0)

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

您无法使用单个Configuration类执行此操作。看一下这个问题:How to apply spring security filter only on secured endpoints?

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

  

我们可以像我们一样配置多个HttpSecurity实例   多个块。关键是扩展   WebSecurityConfigurationAdapter多次。例如,   以下是对URL进行不同配置的示例   以/ api /.

开头

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

  
      
  1. 正常配置身份验证
  2.   
  3. 创建包含的WebSecurityConfigurerAdapter实例   @Order指定应该是哪个WebSecurityConfigurerAdapter   首先考虑。
  4.   
  5. http.antMatcher说明了这个HttpSecurity   仅适用于以/ api /
  6. 开头的网址   
  7. 创建WebSecurityConfigurerAdapter的另一个实例。如果URL不以/ api /开头,则将使用此配置。这个   在ApiWebSecurityConfigurationAdapter之后考虑配置   因为它在1之后有一个@Order值(没有@Order默认为最后一次)。
  8.   
祝你好运!