首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >令牌不起作用的Struts2多个表单。一次只有一个令牌有效

令牌不起作用的Struts2多个表单。一次只有一个令牌有效
EN

Stack Overflow用户
提问于 2015-09-10 14:04:15
回答 1查看 1.2K关注 0票数 0

我正在尝试用struts2开发一个应用程序,其中我有多个表单,可能有也可能没有相同的操作。为了避免CSRF,我还添加了具有这些形式的令牌,但一次只有一个令牌起作用。如果我点击了另一个提交按钮,那么我将重定向到为CSRF配置的错误页面。我被困在这里,为什么会发生这种情况,不能在同一页上使用多个令牌,或者有任何解决方案。

请找到我配置的struts2.xml代码。

代码语言:javascript
复制
<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>

我有下面这个虚构的例子,可以让你明白我在做什么。

代码语言:javascript
复制
<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.
EN

回答 1

Stack Overflow用户

发布于 2015-09-10 17:12:54

感谢大家给我的建议。我已经找到了一个可行的解决方案,所以我正在回答我自己的问题。

当我们生成<s:token/>时,隐藏字段将像这样生成:-

代码语言:javascript
复制
<input type="hidden" name="struts.token.name" value="token">
<input type="hidden" name="token" value="1IPDKJ3QWM8X4JXAV0RKC0A9XVQ4I83E">

这是默认行为。现在,如果我想为每个struts2令牌标签生成不同的令牌,那么我必须指定令牌的唯一名称,如下所示:

代码语言:javascript
复制
<s:token name="unique-1"/> 

然后它将生成如下的隐藏字段:-

代码语言:javascript
复制
<input type="hidden" name="struts.token.name" value="unique-1">
<input type="hidden" name="unique-1" value="1IPDKJ3QWM8X4JXAV0RKC0A9XVQ4I83E">

现在我有两个不同的令牌,两个不同的表单在同一个页面上,这个技巧也工作得很好,没有任何问题,在写这个答案的时候。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32494277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档