我正在使用一些基本服务和实体创建一个新的 Spring REST 应用程序。
我添加了 Spring Security,并且没有覆盖任何类,我只是向 application.properties 添加了用户和密码。
到目前为止一切顺利,我打开 Postman 来尝试一个端点,它总是向我的请求返回 401。
我尝试在邮递员中通过“Basic Auth”设置授权(这是标头 WWW-Authenticate 所要求的),尝试使用标头中的“Realm”值进行“Digest auth”。但这些都不起作用。
这是我的应用程序属性
spring.security.user.name=root
spring.security.user.password=root
这是我的要求
https://i.stack.imgur.com/8ezND.jpg https://i.stack.imgur.com/8ezND.jpg
(抱歉,由于我的声誉,我无法嵌入图像)
这是终点
@PostMapping("saveUsuario")
public Usuario saveUsuario(Usuario usuario) {
return usuarioRepository.save(usuario);
}
(如果可能的话)我不想覆盖任何Spring Security类,只是“按原样使用”。
谢谢你!
这就是我发现的。
感谢@jzheaux,我们发现问题出在 csrf 配置(使用 POST 请求)上。
所以我被迫重写课程Web安全配置适配器禁用它。
@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 的创建,因此它总是要求提供凭据。
到目前为止一切顺利,正在发挥作用!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)