我正在尝试用struts2开发一个应用程序,其中我有多个表单,可能有也可能没有相同的操作。为了避免CSRF,我还添加了具有这些形式的令牌,但一次只有一个令牌起作用。如果我点击了另一个提交按钮,那么我将重定向到为CSRF配置的错误页面。我被困在这里,为什么会发生这种情况,不能在同一页上使用多个令牌,或者有任何解决方案。
请找到我配置的struts2.xml代码。
<action name="expUsers" class="com.org.action.ExpUser">
<interceptor-ref name="CSRFStack"/>
<result name="invalid.token" type="tiles">csrfError</result>
<result name="success" type="stream">
<param name="contentDisposition">contentDisposition</param>
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
</result>
<result name="failed" type="chain">csrfError</result>
</action>我有下面这个虚构的例子,可以让你明白我在做什么。
<form id="form-1">
<s:token/>
....
</form>
<form id="form-2">
<s:token/>
....
</form>
<form id="form-3">
<s:token/>
....
</form>
... so on multiple forms with token.发布于 2015-09-10 17:12:54
感谢大家给我的建议。我已经找到了一个可行的解决方案,所以我正在回答我自己的问题。
当我们生成<s:token/>时,隐藏字段将像这样生成:-
<input type="hidden" name="struts.token.name" value="token">
<input type="hidden" name="token" value="1IPDKJ3QWM8X4JXAV0RKC0A9XVQ4I83E">这是默认行为。现在,如果我想为每个struts2令牌标签生成不同的令牌,那么我必须指定令牌的唯一名称,如下所示:
<s:token name="unique-1"/> 然后它将生成如下的隐藏字段:-
<input type="hidden" name="struts.token.name" value="unique-1">
<input type="hidden" name="unique-1" value="1IPDKJ3QWM8X4JXAV0RKC0A9XVQ4I83E">现在我有两个不同的令牌,两个不同的表单在同一个页面上,这个技巧也工作得很好,没有任何问题,在写这个答案的时候。
https://stackoverflow.com/questions/32494277
复制相似问题