CSRF必须用java吗_java – 无法验证提供的CSRF令牌.仅使用xml

我正在学习Spring框架,我正在使用xml配置文件来实现安全性:

user-service-ref="jdbcUserService"

remember-me-parameter="remember-me" token-validity-seconds="1209600" />

并以我的登录表格:

method='POST'>

User:
Password:
Remember Me

value="Login" />

value="${_csrf.token}" />

但是在我登录并经过一段时间后(我在web.xml中将会话超时设置为1分钟)我在浏览器中收到此错误:

无法验证提供的CSRF令牌,因为找不到您的会话.

到目前为止,我找不到任何仅使用xml文件进行配置的帖子.这都是关于使用java进行配置的,其他一些答案建议在登录表单中包含csrf隐藏输入,我已经这样做了.知道如何解决这个问题吗?

P.S:web.xml文件如下所示:

< web-app xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xmlns =“http://xmlns.jcp.org/xml/ns/javaee”xsi:schemaLocation =“ http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd“id =”WebApp_ID“version =”3.1“>

弹簧教程-51&LT /显示名称>

< description> Spring教程网络应用< / description>

&LT欢迎-文件列表>

&LT欢迎-文件>&index.html的LT /欢迎-文件>

&LT欢迎-文件>&的index.htm LT; /欢迎-文件>

&LT欢迎-文件>&的index.jsp LT; /欢迎-文件>

&LT欢迎-文件>&default.html中LT; /欢迎-文件>

&LT欢迎-文件>&的Default.htm LT; /欢迎-文件>

&LT欢迎-文件>&的Default.jsp LT; /欢迎-文件>

&LT /欢迎-文件列表>

&LT servlet的&GT

&LT描述&GT&LT /描述&GT

&报价LT; /显示名称>

&LT servlet的名称>&报价LT; / servlet的名称>

&LT servlet的类&GT org.springframework.web.servlet.DispatcherServlet&LT / servlet的类&GT

&LT负载上启动→1&LT /负载上启动&GT

&LT / servlet的&GT

&LT servlet的映射&GT

&LT servlet的名称>&报价LT; / servlet的名称>

&LT URL模式&GT /&LT / url-pattern的&GT

&LT / servlet的映射&GT

&LT资源引用&GT

< description>数据库连接< / description>

&LT RES-REF-名称>的JDBC / springtutorial&LT / RES-REF-名称>

&LT RES型&GT javax.sql.DataSource中&LT / RES型&GT

&LT RES-AUTH&GT集装箱&LT / RES-AUTH&GT

&LT /资源引用&GT

&LT听者GT;

&LT监听级&GT org.springframework.web.context.ContextLoaderListener&LT /监听级&GT

&LT /收听GT;

&LT的context-param&GT

&LT PARAM-名称>的contextConfigLocation&LT / PARAM-名称>

&LT PARAM值&GT

类路径:COM / myproject的/春/网络/配置/道的context.xml

类路径:COM / myproject的/春/网络/配置/服务的context.xml

类路径:COM / myproject的/春/网络/配置/安全的context.xml

&LT / PARAM值&GT

&LT /的context-param&GT

&LT滤光器>

&springSecurityFilterChain LT; /显示名称>

&LT过滤器名称>&springSecurityFilterChain LT; /过滤器名称>

&LT滤波器级&GT org.springframework.web.filter.DelegatingFilterProxy&LT /滤波器级&GT

&LT /滤光器>

&LT过滤器映射&GT

&LT过滤器名称>&springSecurityFilterChain LT; /过滤器名称>

&LT URL模式&GT / *&LT / url-pattern的&GT

&LT /过滤器映射&GT

&LT会话配置&GT

&LT会话超时→1&LT /会话超时&GT

&LT /会话配置&GT

&LT / web应用程序&GT

我将以下配置添加到我的安全配置文件中.

我将此添加到我的security-context.xml,这是一个安全配置文件.

user-service-ref="jdbcUserService"

remember-me-parameter="remember-me" token-validity-seconds="1209600" />

我希望令牌在1分钟后有效,持续1209600秒.

解决方法:

我不明白这里令人惊讶的部分在哪里?你之前这么说

I set the session timeout to be 1 minute in the web.xml

除了会话之外,服务器还可以存储其CSRF令牌的副本吗?因此,当您的会话在一分钟内到期时,服务器无法找到其副本以匹配您的请求中的CSRF令牌并引发此类异常.

因此,要解决此问题,只需增加会话超时. (对我来说只有1分钟的超时时间看起来非常严格.即使在“安全”的地方,我也没有看到现实生活中不到10分钟的任何事情.通常更多.)

标签:java,spring

来源: https://codeday.me/bug/20190522/1154503.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值