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

来源:互联网 发布:ajax eval json 编辑:程序博客网 时间:2024/05/16 09:18

虽然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.就是这么简单!








0 0