zoukankan      html  css  js  c++  java
  • boke练习: springboot整合springSecurity出现的问题,post,delete,put无法使用

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

  • 相关阅读:
    HttpContext.Current.Cache过期使用方法
    IE11下使用IE8
    Sqldbx连接oracle
    XML序列之System.Xml.Serialization
    怎样设置域名带www和不带www都可以访问
    log4net一些配置说明
    部署wcf到IIS时的问题
    spring.net学习(一) 搭建环境,实例化spring.net容器。
    WPF 多语言实现
    C# 类型转换问题
  • 原文地址:https://www.cnblogs.com/achengmu/p/9778001.html
Copyright © 2011-2022 走看看