虽然struts2的标签用起来不是很方便不过 <s:token/>这个标签要我们自己来实现的话真的不太容易!!!
struts2 token 使用说明
-------------------------------------------------------------------------------------------------------------------
使用token标签的时候,Struts2会建立一个GUID(全局唯一的字符串)放在session中,并且会成为一个hidden放在form中。
token拦截器会判断客户端form提交的token和session中保存的session是否equals。如果equals则执行Action。否则拦截器直接返回invaid.token结果,Action对应的方法也不会执行
1.首先我们在jsp页面上导入struts标签库
<%@ taglib uri="/struts-tags" prefix="s" %>
2.在表单中添加<s:token/>标签
<form action="user/login" method="get">
用户名:<input name="username"><br>
密码:<input name="password"><br>
<s:token></s:token>
<input type="submit" value="登录">
</form>
3.添加了<s:token/>的表单在服务器返回之后会被添加一个隐藏域用于存储token这个令牌
<form action="" method="post">
用户ID:<input name="user.id">
姓名:<input name="user.name">
<input type="hidden" name="struts.token.name" value="token" />
<input type="hidden" name="token" value="11R5FX3JFC3QB2QUQ0M717U2A2RUCI66" />
<script type="text/javascript">
4.在struts.xml中配置token的拦截
<action name="login" class="com.xiangzi.action.UserAction">
<result name="success">/ok.jsp</result>
<interceptor-ref name="defaultStack" ></interceptor-ref>
<interceptor-ref name="token" ></interceptor-ref>
<result name="invalid.token">/error.jsp</result>
</action>
注意:1.这里需要些两个拦截器,默认的defaultStack要在上面,token在下面,为了能是所有拦截器有效
2.这个 <action>映射的action.class是需要继承ActionSupport这个类的,不然struts识别不了
3.要在这个 <action> 中配置一个 name="incalid.token" 的result结果,作为拦截之后的跳转
5.就是这么简单!