我有一个使用Spring Security,版本4.0.1和Spring版本4.1.6的Web应用程序 在网页应用的每个页面中,我都有
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
将CSRF令牌发送到服务器的参数。现在我的问题是如果我看到jsp的源代码我有
<input type="hidden" name="" value=""/>
因此令牌不会发送到服务器,后置操作会产生消息 HTTP状态405 - 请求方法&#39; POST&#39;不支持
如果我在Tomcat 7.0.5.x上部署相同的Web应用程序,一切正常,它在WAS 7,WAS 8.5和Jboss EAP 6.4中也能正常工作。
我无法理解为什么在这个版本的Tomcat(7.0.28)上,我从网站上下载而没有改变任何关于配置等的东西,Spring Security提供的CSRF保护不起作用。
答案 0 :(得分:1)
我遇到了同样的问题:Tomcat 7.0.28无法自动检测弹簧安全过滤器。
我的解决方案是添加:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
到web.xml并再试一次。
答案 1 :(得分:0)
打开 tomacat / confg 文件夹
看到有一个文件 Context.xml 并打开它
将&lt; Context&gt; 更改为&lt; Context useHttpOnly =“false”&gt;
那你已经完成了。