Struts Token机制实现与应用

Struts 的令牌机制,说白了就是个用来防重复提交的“小护身符”,挺适合做表单安全控制的。如果你平时在搞 Java Web 开发,尤其是还在用 Struts 框架,那这个机制值得你用用。它不光能防止用户手抖点两下提交按钮,还能挡住一些常见的 CSRF 攻击,配置也不复杂。

Struts 的 token 拦截器tokenSession 拦截器配合使用,基本就搞定了整个令牌流程。一个生成,一个存着防丢,这组合还挺顺。只需要在struts.xml里加一下这俩拦截器就行,代码也不多:


<;interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor" />

,在你想保护的Action类里加上@TokenSave注解,一访问表单页面就会自动生成一个令牌扔进会话里:

@TokenSave
public class MyAction extends ActionSupport {
  // 表单逻辑
}

表单页面也别忘了加上隐藏字段,Struts 会自动生成一段令牌字段代码,用标签就行:


  
  <input type="submit" value="提交" />
<;/s:form>;

提交时,拦截器会自动比对令牌。如果不对,比如用户重复点提交按钮,就会抛TokenException。你可以在Action里这个异常,跳回页面或提示出错:

@Override
public String execute() throws Exception {
  try {
    return SUCCESS;
  } catch (TokenException e) {
    return INPUT;
  }
}

几个小提醒哦:
- 每个表单建议用不同令牌,避免互相干扰
- 表单提交成功后,记得清掉令牌,别让旧的还留着
- 别在 URL 或日志里暴露令牌内容,容易泄露

Struts 的这个安全机制虽然不是什么黑科技,但胜在简单实用。如果你项目中有提交按钮,不想让用户点两次都跑同一个求,或者担心 CSRF,直接用这个就挺合适。

rar
struts令牌.rar 预估大小:43个文件
folder
struts令牌 文件夹
file
~WRL2148.tmp 26KB
folder
menu 文件夹
file
.mystrutsdata 254B
folder
src 文件夹
folder
com 文件夹
folder
kxc 文件夹
folder
struts 文件夹
file
ApplicationResources.properties 79B
folder
form 文件夹
file
TestForm.java 1KB
folder
action 文件夹
file
MainAction.java 1001B
file
TestAction.java 1KB
file
.project 1KB
folder
WebRoot 文件夹
folder
META-INF 文件夹
file
MANIFEST.MF 39B
folder
WEB-INF 文件夹
file
struts-nested.tld 63KB
file
struts-template.tld 2KB
file
validator-rules.xml 41KB
file
struts-bean.tld 9KB
file
struts-html.tld 65KB
file
struts-logic.tld 14KB
file
struts-tiles.tld 8KB
file
web.xml 946B
file
.struts-config.mex 3KB
folder
classes 文件夹
folder
com 文件夹
folder
kxc 文件夹
folder
struts 文件夹
file
ApplicationResources.properties 79B
folder
form 文件夹
file
TestForm.class 1KB
folder
action 文件夹
file
MainAction.class 1KB
file
TestAction.class 2KB
file
index.jsp 1KB
file
struts-config.xml 882B
file
test.jsp 839B
folder
lib 文件夹
file
struts-legacy.jar 12KB
file
commons-beanutils.jar 121KB
file
commons-collections.jar 174KB
file
jakarta-oro.jar 69KB
file
commons-validator.jar 48KB
file
commons-fileupload.jar 25KB
file
commons-logging.jar 33KB
file
struts.jar 501KB
file
commons-digester.jar 111KB
file
commons-lang.jar 66KB
file
index.jsp 833B
file
.mymetadata 285B
file
.classpath 1KB
folder
.myeclipse 文件夹
file
~$令牌.doc 162B
file
~WRL2626.tmp 25KB
file
~WRL1013.tmp 24KB
file
~WRL1695.tmp 26KB
file
令牌.doc 26KB
file
~WRL0099.tmp 25KB
rar 文件大小:1.04MB