Spring 安全 - 尽管允许所有请求但未授权

Spring Security - Unauthorized though permitting all requests

我在Spring Boot App:

中有这样一个web配置
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests().anyRequest().permitAll()
        .and()
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
                .httpBasic();
    }
}

当我尝试访问其中一个网址 (localhost:8080/test) 时,我得到了未经授权。我做错了什么?

我的照片与“.httpBasic();”有关,当您在属性中设置此项时,您似乎希望进行基本身份验证。

我拍的是你的WebConfignot placed in the right package。 如果您的 @SpringBootApplication 注释 class 在 com.example.demo 那么你的 WebConfig class 应该放在 com.example.demo 包下(或其他子包,例如:com.example.demo.config)。

package com.example.demo.config; // <-- move it to the (not-default) package

// skipped imports
// ...

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
      // config same as in the question's snippet
      // ...
    }
}

如果您收到 Unauthorize (401),则表示身份验证失败,无论您是否有权访问该资源。 您正在使用基本身份验证,spring 流程分为身份验证和授权两部分,首先进行身份验证,了解用户是否有效,然后查看他们是否有权访问资源。在这种情况下,给出错误是因为它没有身份验证,更好地称为 401,如果您有身份验证但没有授权,您将收到 403 forbiden