您的位置:首页 > 编程语言 > Java开发

阻止重复提交? struts2 的 token 这么搞绝对没问题!

2015-12-08 13:10 591 查看

虽然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.就是这么简单!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: