博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
boke练习: springboot整合springSecurity出现的问题,post,delete,put无法使用
阅读量:6082 次
发布时间:2019-06-20

本文共 1027 字,大约阅读时间需要 3 分钟。

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到服务端。希望对你有所帮助,欢迎留言交流。

转载地址:http://zfkwa.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
apache之虚拟主机
查看>>
dedeCMS5.7在任意栏目获取顶级栏目名称及链接的方法
查看>>
linux之文本搜索工具(grep、egrep)用法
查看>>
活动目录中组的类型和可用范围
查看>>
子网掩码划分随手记
查看>>
mysqli_fetch_all
查看>>
OpenCL-0-基础概念
查看>>
‘char* maxn(const char**, int)’ does not match any template declaration
查看>>
打造企业级应用--邮件服务器postfix+dovecot+extmail
查看>>
微软开发者解释为什么Windows内核落后于Linux
查看>>
HP DL380G5安装Win2012后开启Hyper-V
查看>>
信息系统项目管理师系统集成项目管理工程师相关法律法规
查看>>
标准io和管道
查看>>
微会动平台免费开放多种活动场景现场抽奖功能产品助力企业市场活动
查看>>
Project:如何分析项目中的资源分配情况
查看>>
IT男的悲惨命运(自己写的连载中)2
查看>>
SQL server网络数据库的简单应用
查看>>
OpenBSD忘记root密码恢复
查看>>
jdbc报java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
查看>>