使用 SpringSecurity 发送POST请求出现 403

问题场景

在使用 SpringSecurity 时对一些访问权限进行了设置, 在用户请求资源时出现了403错误 , 通过检查代码发现请求权限是开放的, 并且切换成 GET 请求也是可以通过, 换成POST 请求就无法通过。

解决方法

在 SpringSecurity 中关闭 CSRF 因为

前端向后台发送 post 请求时,必须验证 csrf,否则会报错 403 Forbidden。

java 复制代码
  @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                // CSRF禁用,因为不使用session
                .csrf().disable()
                .antMatchers(
                        HttpMethod.GET,
                        "/",
                        "/*.html",
                        "/**/*.html",
                        "/**/*.css",
                        "/**/*.js",
                        "/profile/**"
                ).permitAll()
       
                // activiti modeler 放行
                .antMatchers("/modeler/**").anonymous()
                .antMatchers( "/activiti/definition/readResource").anonymous()
                // 除上面外的所有请求全部需要鉴权认证
                .anyRequest().authenticated()
                .and()
                .headers().frameOptions().disable();
    }
1234567891011121314151617181920212223

这个时候就有新的问题出现, "/activiti/definition/readResource"已经是允许匿名访问了,但是在登录状态下访问还是会出现403,不登陆就可以正常获取,这个情况比较奇葩,大概理解的就是这个方法是匿名访问的,你登陆就不是匿名了,所以你没有权限访问。

看了下 SpringSecurity 权限设置有

java 复制代码
    /**
     * anyRequest          |   匹配所有请求路径
     * access              |   SpringEl表达式结果为true时可以访问
     * anonymous           |   匿名可以访问
     * denyAll             |   用户不能访问
     * fullyAuthenticated  |   用户完全认证可以访问(非remember-me下自动登录)
     * hasAnyAuthority     |   如果有参数,参数表示权限,则其中任何一个权限可以访问
     * hasAnyRole          |   如果有参数,参数表示角色,则其中任何一个角色可以访问
     * hasAuthority        |   如果有参数,参数表示权限,则其权限可以访问
     * hasIpAddress        |   如果有参数,参数表示IP地址,如果用户IP和参数匹配,则可以访问
     * hasRole             |   如果有参数,参数表示角色,则其角色可以访问
     * permitAll           |   用户可以任意访问
     * rememberMe          |   允许通过remember-me登录的用户访问
     * authenticated       |   用户登录后可访问
     */
123456789101112131415

将anonymous 改为permitAll 或者authenticated 后可以正常访问。

相关推荐
用户84913717547163 分钟前
ThreadLocal 源码深度解析:JDK 设计者的“妥协”与“智慧”
java·后端
用户0304805912635 分钟前
# 【Maven避坑】源码去哪了?一文看懂 Maven 工程与打包后的目录映射关系
java·后端
v***553425 分钟前
springboot使用logback自定义日志
java·spring boot·logback
qq_3363139327 分钟前
java基础-集合进阶
java·开发语言·windows
稚辉君.MCA_P8_Java29 分钟前
Gemini永久会员 归并排序(Merge Sort) 基于分治思想(Divide and Conquer)的高效排序算法
java·linux·算法·spring·排序算法
q***188429 分钟前
Spring Boot中的404错误:原因、影响及处理策略
java·spring boot·后端
222you29 分钟前
MybatisPlus常用注解
java·开发语言·spring
汤姆Tom44 分钟前
前端转战后端:JavaScript 与 Java 对照学习指南 (第一篇 - 深度进阶版)
java·javascript
济宁雪人1 小时前
Java安全基础——JNI安全基础
java·开发语言
q***96581 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu