• 使用Spring Security的Basic Auth认证后Postman的POST请求不成功的可能原因


      今天在用Postman测试接口,没上Spring Security之前,GET类和POST类的接口都测试的好好!

      接着在pom.xml添加的Security依赖:

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>

      并在application.yml中添加的Security配置:

      security:
        user:
          name: user
          password: pwd123

      通过以上配置使用上Spring Security后,GET类和POST类的接口都报未授权:

      这个好理解:因为Security默认启用了Basic Auth授权,接着我就在Postman的Authorization页签中设置Basic Auth授权基本信息:

      填好授权信息后,清理Cookie再次请求,GET类请求一切正常:

      然而,清理Cookie再次请求,POST类请求却依旧不行:

      首先,接口本身肯定是没问题的,因为上Spring Security之前一切都挺好!其次,Spring Security本身肯定也是正常工作的,因为Postman中没有进行授权前GET类的POST类的请求都不行!现在GET类的行了,POST类的却不行~,那么这两类请求肯定有不一样的地方,让Spring Security进行了拦截!

      捣鼓了大半天,最后发现是Spring Security会对POST、PUT、PATCH等数据提交类的请求进行CSRF验证(防止跨站请求伪造攻击),Spring Security要求这些请求必须携带CSRFToken,但是目前Postman并不会利用Authorization页签中填上的Basic Auth相关信息生成CSRFToken。你得用自己的登录接口来生成,并将生成的CSRFToken添加到Postman后续的各个测试请求的Headers中(X-CSRFToken)。

      既然知道了原因,我们为了测试方便,我就不使用登录接口拿CSRFToken,而是暂时将Spring Security的CSRF验证关掉即可(交付测试和上生产时记得重新打开),添加Web安装配置类继承WebSecurityConfigurerAdapter适配器类,并重写configure(HttpSecurity http)方法即可:

    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @Configuration
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().authenticated().and().httpBasic().and().csrf().disable();
        }
    }

      重新运行应用,清理Cookie再次请求,POST类请求也可以了:

  • 相关阅读:
    C# 内存映射研究学习
    js Promise async await 学习研究
    js 字节数组转数字以及数字转字节数组
    C# 生成一个当前程序唯一的短字符串
    C# FileStream 读取大文件时ReadByte和Read的速度对比
    用一个数维护最多32个可叠加状态,比如权限的状态,既有“读”,又有“写”
    大牛干货:100条Unity基础小贴士
    Unity教程之-Unity3d移动平台性能优化专题(12):面板的设置
    Unity ShaderLab学习总结
    (转)【Unity技巧】Unity中的优化技术
  • 原文地址:https://www.cnblogs.com/xuruiming/p/13296312.html
Copyright © 2020-2023  润新知