java - Spring security默认配置总是抛出401

标签 java spring rest spring-security

我正在使用一些基本服务和实体创建一个新的 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

这是我的要求

/image/8ezND.jpg

(抱歉,由于我的声誉,我无法嵌入图像)

这是端点

@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/

相关文章:

java - 通过构造函数初始化变量

Javafx 10 或更早版本可供下载以创建可运行的 jar 文件

java - Java中的多线程具有静态和非静态方法

java - 服务器始终使用 Jersey 2 + Tomcat 6 返回 404 错误

java - java中如何获取被调用方法的参数值?

java - 如何配置spring-hateoas注册的MappingJackson2HttpMessageConverter

mysql - 如何使用ibatis检查更新语句中是否为空?

java - Spring aop 资源

java - 在以 JSON 格式发布到 API 时,如何正确发送值中包含 double 和字符串的 HashMap

arrays - 在单个 JSON Patch 操作中向数组添加多个值?