当前位置: 首页 > news >正文

Spring Boot项目的控制器貌似只能get不能post问题

我这2天新建了一个Spring Boot项目测试,在控制器上写了两个接口,一个是支持Get方式访问,另一个支持Post方式访问,发现Get可以,而Post不行。前端Post后,报403,找不到这个方法。

一、原因

原因是spring boot的防csrf(跨站点请求伪造)机制导致。

当我们新建一个Spring Boot项目的时候,如果有添加了 spring-boot-starter-security 依赖,系统就会默认启用基本认证来保护所有端点,这是为了增加应用的安全性。如果没有配置显式的安全规则,Spring Security 将会要求进行身份验证。表现在前端,就是访问这个接口的时候,会弹出一个窗口让我们输入账号密码,而且这个窗口还不是我们自己做的。通常我们会在项目里添加一个配置类,然后里面加一些白名单。比如获取验证码、登录这些接口应设置为免身份认证,否则没法玩。

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/captcha","/verify").permitAll().anyRequest().authenticated().and().httpBasic();  // 使用 HTTP 基本认证}
}

但这段代码只解决了"/captcha","/verify"被允许无须身份验证就能访问的问题,但没有解决get可以访问,而post不能访问的问题。也许 Spring Security 认为,GET 请求相对于 POST 请求的行为通常会有所不同,所以对GET比较宽容,而POST就较为严格。这涉及到对CSRF的理解。

二、解决

解决之道就是在上面的Security配置中禁止对CSRF防范的限制,加上http.csrf().disable():

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().antMatchers("/slideCaptcha","/slideVerify")//.antMatchers("/**").permitAll().anyRequest().authenticated().and().httpBasic();  // 使用 HTTP 基本认证}
}

三、小结

去除防CSRF限制,好像有点不安全。但事实上,通常post方式访问的接口,都需要进行身份验证。身份验证的安全性要高于CSRF防范。另外,现在微服务架构大行其道,前后端分离,二者地址、端口都不一样。前端向后端请求、提交的地址,几乎都经过nginx转发。也就是说,跨域请求是常态,防范没有太多意义。

相关拙作:
防御CSRF问题
WEB项目的安全性注意事项

http://www.lryc.cn/news/401313.html

相关文章:

  • 最新版智能修图-中文luminar ai 1.55(13797) 和 neo1.20,支持m芯片和intel芯片(绝对可用)
  • Open3D 最小二乘法拟合点云平面
  • 【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录
  • 关于HBase、Phoenix、Flume、Maxwell 和 Flink
  • centos7停止维护,可替代的操作系统
  • andon系统在电力设备工管理中起到那些作用与价值
  • 消息队列-RabbitMQ
  • Elasticsearch(ES)集群监控
  • 图像处理:使用 OpenCV-Python 卡通化你的图像(2)
  • 淘宝扭蛋机小程序:旋转惊喜,开启购物新篇章!
  • JAVA零基础小白自学日志——第十七天
  • electron中app.whenReady()和app.on(‘ready‘)的区别
  • 技术速递|Let’s Learn .NET Aspire – 开始您的云原生之旅!
  • JSONNode树形解析或流式解析
  • 自制迷宫游戏 c++
  • 基于复旦微JFMQL100TAI的全国产化FPGA+AI人工智能异构计算平台,兼容XC7Z045-2FFG900I
  • 【数学建模】技术革新——Lingo的使用超详解
  • LLM-阿里 DashVector + langchain self-querying retriever 优化 RAG 实践【Query 优化】
  • 【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序
  • DockerCompose介绍,安装,使用
  • N叉树的前序遍历
  • Linux C++ 054-设计模式之外观模式
  • Linux - 冯-诺依曼体系结构、初始操作系统
  • 成功适配!极验设备指纹HarmonyOS 鸿蒙版官方下载
  • 【C++】字符串学习 知识点+代码记录
  • 尝试理解docker网络通信逻辑
  • 数据仓库哈哈
  • K最近邻(K-Nearest Neighbors, KNN)
  • 深度学习损失计算
  • 论文翻译:通过云计算对联网多智能体系统进行预测控制