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();”有关,当您在属性中设置此项时,您似乎希望进行基本身份验证。
我拍的是你的WebConfig
是not 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
我在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();”有关,当您在属性中设置此项时,您似乎希望进行基本身份验证。
我拍的是你的WebConfig
是not 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