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< /显示名称>

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

<欢迎-文件列表>

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

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

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

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

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

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

< /欢迎-文件列表>

< servlet的>

<描述>< /描述>

&报价LT; /显示名称>

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

< servlet的类> org.springframework.web.servlet.DispatcherServlet< / servlet的类>

<负载上启动→1< /负载上启动>

< / servlet的>

< servlet的映射>

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

< URL模式> /< / url-pattern的>

< / servlet的映射>

<资源引用>

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

< RES-REF-名称>的JDBC / springtutorial< / RES-REF-名称>

< RES型> javax.sql.DataSource中< / RES型>

< RES-AUTH>集装箱< / RES-AUTH>

< /资源引用>

<听者GT;

<监听级> org.springframework.web.context.ContextLoaderListener< /监听级>

< /收听GT;

<的context-param>

< PARAM-名称>的contextConfigLocation< / PARAM-名称>

< PARAM值>

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

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

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

< / PARAM值>

< /的context-param>

<滤光器>

&springSecurityFilterChain LT; /显示名称>

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

<滤波器级> org.springframework.web.filter.DelegatingFilterProxy< /滤波器级>

< /滤光器>

<过滤器映射>

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

< URL模式> / *< / url-pattern的>

< /过滤器映射>

<会话配置>

<会话超时→1< /会话超时>

< /会话配置>

< / web应用程序>

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

我将此添加到我的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

你可能感兴趣的:(CSRF必须用java吗)