我有一个struts2 webapp,需要在其中实现CSRF保护。对于状态表格,这是非常简单的。我只需要激活tokenSession拦截器,然后设置<s:token/>要提交的表单即可。(在这里和这里解释)
tokenSession
<s:token/>
但是,当我需要为不一定通过表单提交的POST AJAX调用(我使用jQuery)启用CSRF保护时,就会出现问题。在进行后续的AJAX调用时,我面临重用令牌的问题。
任何指针或不同的方法都是可以理解的。
目前,我已经通过为AJAX请求生成令牌并以正常响应发送它来解决了该问题,如下所示-
Map<String, String> tokenInfo = Maps.newHashMap(); tokenInfo.put("struts.token.name", TokenHelper.getTokenName()); tokenInfo.put(TokenHelper.getTokenName(), TokenHelper.setToken());
我将从中提取出一个util方法,并将其标记激活的Actions作为响应的一部分返回,以将其重复执行而无需刷新页面。
我仍然在寻找一种优雅的解决方案。