You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Struts2页面刷新防重复表单提交:token标签报令牌参数未找到错误

解决Struts2 Token验证报错“Could not find token name in parameters.”

检查拦截器配置

确认login action是否正确配置了token拦截器。Struts2的token验证需要在action的拦截器栈中加入token(或tokenSession)拦截器,且需放在defaultStack之前:

<action name="login" class="your.package.LoginAction">
    <interceptor-ref name="token"/>
    <interceptor-ref name="defaultStack"/>
    <result name="success">/success.jsp</result>
    <result name="invalid.token">/error.jsp</result>
</action>

若使用tokenSession拦截器,替换上述token即可,它会在重复提交时返回上次请求结果而非直接报错。

确认表单渲染与提交参数

页面渲染后查看HTML源码,确认<s:token/>生成了两个隐藏字段:struts.token.name和对应token值。如果未生成,检查:

  • JSP页面顶部是否正确引入Struts2标签库:<%@ taglib prefix="s" uri="/struts-tags" %>
  • 表单action属性是否与struts.xml中配置的action名称(含命名空间,若有)完全匹配

提交表单时,通过浏览器开发者工具确认struts.token.name和struts.token两个参数都被正常提交到服务器。

检查Struts2核心常量配置

确保struts.xml中未禁用token相关常量:

<!-- 默认值为true,不要设为false -->
<constant name="struts.token.enabled" value="true"/>
<!-- 不要随意修改token参数名,除非自定义了token标签的name属性 -->
<constant name="struts.token.name" value="struts.token.name"/>

如果给<s:token>指定了自定义名称(如<s:token name="customToken"/>),需在拦截器配置中同步指定:

<interceptor-ref name="token">
    <param name="tokenName">customToken</param>
</interceptor-ref>

排除参数丢失或解析异常

  • 检查是否有自定义拦截器过滤了表单参数,导致token相关参数被移除
  • 确认action类继承了ActionSupport,且未重写validate()方法导致参数解析异常

内容的提问来源于stack exchange,提问作者Rafael Souza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:55:16