Struts2令牌拦截器:CSRF保护

我试图通过使用struts令牌拦截器保护我的Web应用程序免受CSRF攻击。

我现在面临的问题是我们的JSP页面对服务器进行了多次调用(当JSP转换为JS时,一个struts令牌被添加到JS.But,在这个JS中有多个Ajax请求。我希望我自己清楚。),因为令牌拦截器只对服务器的第一次请求得到validation。 其他请求将失效,因为struts令牌在每次validation后都会重置。

有没有办法阻止Struts在每次validation时重置令牌? 是否有任何其他解决方案来处理struts拦截器。

我也在看tomcatcsrfprotection模块,我想我最终也会tomcatcsrfprotection同样的问题。

managepage.jsp

   var strutsToken = ""; var requestParams = {mainAction: 'loadGroups','struts.token.name': 'token' , token:strutsToken}; Ext.Ajax.request({ url: 'manageUserAccount.action', params: Ext.urlEncode(requestParams), disableCaching: true, success: this.actionCallback }); //loading widgets var requestParams = {mainAction: 'loadusers','struts.token.name': 'token' , token:strutsToken}; Ext.Ajax.request({ url: 'manageUserAccount.action', params: Ext.urlEncode(requestParams), disableCaching: true, success: this.actionCallback });  

Struts.xml

    /pages/manageUserAccount.jsp  

我刚刚添加了最少的代码,以便更容易理解它。

您可以使用我的答案中的代码来使Unable实现带有超链接的Struts 2令牌拦截器,以创建一个返回令牌的操作。 您可以使用任何结果streamjsondispatcher将标记作为Ajax成功回调结果返回。 您可以在jQuery Ajax中找到一个示例- 发出返回JSON值的问题 。 现在,您可以使用令牌来发出Ajax请求。 每次需要发出新请求时,都应调用令牌操作以获取新令牌。 使用令牌作为请求的参数,并将令牌拦截器放在您的操作之前。