使用 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 后可以正常访问。

相关推荐
就叫_这个吧4 小时前
Java递归方法实现面包屑导航
java·开发语言
fīɡЙtīиɡ ℡4 小时前
AI 应用系统设计
java·开发语言·人工智能
城管不管5 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅5 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒5 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
最强小杰5 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai
吠品7 小时前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
亚历克斯神8 小时前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务
金銀銅鐵9 小时前
[Java] 一个方法最多可以有多少个入参?
java·jvm
哭哭啼10 小时前
JAVA服务问题诊断
java·开发语言·jvm