我正在使用一些基本服务和实体创建一个新的 Spring REST 应用程序。
我添加了 Spring Security,并且没有覆盖任何类,我只是向 application.properties 添加了用户和密码。
到目前为止一切顺利,我打开 Postman 来尝试一个端点,它总是向我的请求返回 401。
我尝试在 postman 中通过“基本身份验证”(这是 header WWW-Authenticate 所要求的内容)设置授权,尝试使用 header 中的“领域”值进行“摘要身份验证”。但这些都不起作用。
这是我的application.properties中的内容
spring.security.user.name=root
spring.security.user.password=root
这是我的要求
(抱歉,由于我的声誉,我无法嵌入图像)
这是端点
@PostMapping("saveUsuario")
public Usuario saveUsuario(Usuario usuario) {
return usuarioRepository.save(usuario);
}
(如果可能的话)我不想重写任何 Spring Security 类,只是“按原样使用”。
谢谢!
最佳答案
这就是我发现的。
感谢@jzheaux,我们发现问题出在 csrf 配置(使用 POST 请求)。
所以我被迫重写类WebSecurityConfigurerAdapter来禁用它。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}
但是,端点可以在没有身份验证的情况下被调用!
所以,这是最终的代码:
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.cors();
http.authorizeRequests().anyRequest().fullyAuthenticated();
http.httpBasic();
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
}
}
- 首先禁用 CSRF。
- 然后启用 Cors。
- 我设置希望任何请求都经过完全身份验证
- 质询类型是 HTTP basic
- 我禁止创建 Cookie,因此它始终会要求提供凭据。
到目前为止一切顺利,正在运行!
关于java - Spring security默认配置总是抛出401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55812923/