boke练习: springboot整合springSecurity出现的问题,post,delete,put无法使用

本文详细介绍了在SpringBoot项目中整合SpringSecurity后的CSRF防御策略。包括如何在POST、DELETE和PUT请求中添加CSRF token,以及解决CSRF开启后logout功能失效的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot 与 SpringSecurity整合后,为了防御csrf攻击,只有GET|OPTIONS|HEAD|TRACE|CONNECTION可以通过。

其他方法请求时,需要有token

解决方法:

1,支持post的方法:

      1,如果使用freemarker模板

      在form里添加<input type="hidden" name="${_csrf.parameterName}" value="_csrf.token">

      2,使用ajax时

       $.ajax({

         url:"/manager",

        type:"POST",

        data:{

              "${_csrf.parameterName}":"${_csrf.token}",

              //其他的数据       

 

         }

         })

2,支持delete,put的方法:

在支持post的基础上,

$.ajax({

         url:"/manager",

        type:"POST",

        data:{

              "${_csrf.parameterName}":"${_csrf.token}",

             _method:"DELETE",   /添加了这个,在后端就可以使用delete方法接收请求了,实现restful

              //其他的数据       

 

         }

         })

 

 二、当开启CSRF后,原来以Get方式,调用/logout,退出登录状态的功能失效了,跳转后报404错误。

         1、查看源码,发现框架方法里做了备注。大概意思就是开启CSRF后,logout方法需要以post方式提交。或者调用logoutRequestMatcher方法,显示设置/logout请求为GET方法

2、用logoutRequestMatcher设置logout为get请求来解决404报错问题。POST方式比较简单这里就不在赘述。当然,实际项目中,最好选择以post方式退出系统。

http
         .formLogin().loginPage("/user/login.do")
         .defaultSuccessUrl("/free/list.do")//启用FORM登录
        .and().logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout","GET"))

  

至此CSRF防止方案示例就讲完了。在项目中,对于post请求都需要注意提交_csrf到服务端。希望对你有所帮助,欢迎留言交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值