停用csrf可为Spring Boot 2.0提供404

时间:2019-05-03 02:36:10

标签: java spring-boot spring-security

我正在使用Spring Boot 2.1.4.RELEASE并试图找出401未经授权的错误。

下面是我的webconfig类

public void configure(WebSecurity web) throws Exception {

            web.ignoring().antMatchers("/somepath/")

    }

@Override
    protected void configure(HttpSecurity http) throws Exception {
    if(securityEnabled) {
        http
                .csrf().disable()  
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .anyRequest().authenticated()
                .antMatchers("/somepath/").permitAll()
                .and()
                .httpBasic()
                .and()
                .anonymous().disable()
                .exceptionHandling().authenticationEntryPoint(unauthorizedEntryPoint());
    }

在我的主班上,我已经排除了-

 @EnableAutoConfiguration(exclude = {ErrorMvcAutoConfiguration.class,org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
    org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class})

现在,当我尝试使用http://localhost:8080/somepath测试api时,我将获得401未经授权。但是,当我尝试使用令牌使用相同的端点时,它将起作用,这意味着尚未成功禁用身份验证。我会在这里为您提供帮助。

1 个答案:

答案 0 :(得分:1)

  1. 更改以下语句的顺序。
  2. 在第一条语句中,您要求对任何请求(所有请求)进行身份验证
  3. 然后,您正在使用pattern(“ / somepath /”)过滤请求,该请求与第一条语句满足无关。

        .anyRequest().authenticated()
        .antMatchers("/somepath/").permitAll()
    
  4. 删除以下语句。使用allowAll时,它意味着每个经过身份验证的用户,但是您禁用了匿名访问,因此将无法使用。

            .anonymous().disable()
    

因此,使用下面的配置功能以重新排列顺序可以解决此问题。

public void configure(WebSecurity web) throws Exception {

            web.ignoring().antMatchers("/somepath/")

    }

@Override
    protected void configure(HttpSecurity http) throws Exception {
    if(securityEnabled) {
        http
                .csrf().disable()  
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .authorizeRequests()
                .antMatchers("/somepath/").permitAll()
                .anyRequest().authenticated()
                .and()
                .httpBasic()


                .exceptionHandling().authenticationEntryPoint(unauthorizedEntryPoint());
    }