SpringSecurity 登录页面无法获取CSRF令牌的解决方法
来源:互联网 发布:丁丁停车关闭 知乎 编辑:程序博客网 时间:2024/05/23 01:59
捡重要的说
配置说明:项目是基于maven+springMVC+springSecurity的,maven、web.xml和springmvc具体配置可以百度,具体说下springsecurity.xml的配置,
<http pattern="/init" security="none"/><http pattern="/login" security="none"/><http auto-config="true"> <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> <form-login login-page="/login" default-target-url="/welcome" authentication-failure-url="/login?error" username-parameter="uname" login-processing-url="/j_spring_security_check" password-parameter="pwd" /> <logout logout-success-url="/login?logout" /> <csrf/></http>
如代码所示,我过滤了2条url请求的验证后拦截所有的url请求,springsecurity是4.2.2,由于csrf在4.x之后默认开启,我也就不关闭了,登录页面jsp代码
<form name='loginForm' action="<c:url value='j_spring_security_check' />" method='POST'> <table> <form:form> <tr> <td>User:</td> <td><input type='text' name='uname' value=''></td> </tr> <tr> <td>Password:</td> <td><input type='password' name='pwd' /></td> </tr> <tr> <td colspan='2'><input name="submit" type="submit" value="submit" /></td> </tr> </form:form> </table> <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> </form>jsp页面代码中有csrf参数,但是当访问 /login的时候,检查页面源码中发现没有csrf参数,这就奇怪了,因为当springsecurity配置改为 <http pattern="/init" security="none"/> <!--<http pattern="/login" security="none"/>--> <http auto-config="true"> <intercept-url pattern="/admin" access="hasRole('ROLE_USER')" /> <form-login login-page="/login" default-target-url="/welcome" authentication-failure-url="/login?error" username-parameter="uname" login-processing-url="/j_spring_security_check" password-parameter="pwd" /> <logout logout-success-url="/login?logout" /> <csrf/> </http> login页面的就有了csrf令牌了。猜测是配置问题,debug之后发现了第一个配置文件的时候,/login过springspecrutiy过滤器时的过滤器链为0,而第二个配置的过滤器链过滤器为13,在这13个过滤器中,有一个过滤器名字为CsrfFilter,这个就是csrf令牌验证过滤器。在这个过滤器中,会先往request请求中放一个token对象,这个对象包含如下参数: ![debug下的CsrfFilter文件](http://img.blog.csdn.net/20170321104717410?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb3FxTGFpMTIzNDU2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 因此,如果直接过滤掉login请求,则springsecurity无法将token放入jsp页面,该页面无论怎么样也无法获取csrf令牌了。
0 0
- SpringSecurity 登录页面无法获取CSRF令牌的解决方法
- springBoot+springSecurity+freemarker项目中页面获取当前登录用户
- springSecurity自定义用户登录页面时,常见的问题
- springSecurity的登录验证
- springSecurity的登录验证
- springSecurity的登录验证
- 基于rest的SpringSecurity(依赖csrf)
- springsecurity ajax超时返回登录页面
- 使用Form验证,未登录时登录页面无法显示图片、css、js文件的解决方法
- springSecurity csrf ajax
- MSN无法登录的解决方法
- Oracle无法登录的解决方法
- SQL无法登录的解决方法
- 页面无法获取list bean解决方法
- express无法在页面中无法获取本地图片的解决方法
- 姚博文 springsecurity restful 自定义 csrf
- Administrator无法本地登录的一种解决方法
- Ubuntu无法登录mysql的解决方法
- java多线程之线程与进程简介
- 并发集合:ConcurentLinkedDeque
- chrome浏览器下如何非法安装postman
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- 递归实现进制转换
- SpringSecurity 登录页面无法获取CSRF令牌的解决方法
- Android中Service和Thread区别
- linux 查看用户上次修改密码的日期
- OpenCV 配置篇 —— Android Studio
- 字符串的替换
- java nio 使用异常整理
- nginx负载均衡配置
- 技术博客收藏
- 图像特征提取三大算法:HOG特征,LBP特征,Haar特征