1.令牌机制的原理
当你发送请求时(即提交表单),后台就会生成一串像令牌一样的字符串隐藏的放在jsp页面中与后台留下的令牌一样,所以第一次提交验证能通过,但第一次提交时后台的令牌就会发生变化而前台页面的不变,所以再次提交时验证就通不过,这样就防止了表单重复提交。
2.令牌机制的代码实现
Action类:LoginAction.java
//在这里要继承ActionSupport这个类
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 1L;
//Getter和Setter方法省略,自己补上
private String name;
private String mobile;
public String execute() {
return "success";
}
}
配置文件:struts.xml
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="login" class="com.action.LoginAction" >
<result>/welcome.jsp</result>
<!-- 一旦重复提交就会转向message.jsp页面 -->
<result name="invalid.token">/message.jsp</result>
<!-- token(不在默认中)拦截器防止重复提交,默认拦截器为defaultStack -->
<interceptor-ref name="token"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
</struts>
jsp页面:
<s:form action ="login" method="post">
<s:token/> <!-- 令牌机制实现 -->
<s:textfield name="name" label="用户名"></s:textfield>
<s:textfield name="mobile" label="手机号"></s:textfield>
<s:submit value="登录"></s:submit>
</s:form>
这就可以实现了,提交表单后,可在浏览器中的源代码中查看到隐藏的token(令牌)。