• struts2令牌,防止重复提交


    struts2的令牌,可以用来防止重复提交,其原理是在提交jsp页面中,写入一个隐藏域name="token",然后在action中定义一个变量token并get、set。在服务器端避免表单重复提交,通常是采用同步令牌的方式实现,其基本原理是:

    (1)用户访问包含表单的页面,服务器端在这次会话中,创建一个Session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域(<input>元素的type属性为hidden)的值,随表单一起发送到客户端,同时将令牌值保存到Session中。

    (2)用户提交页面,服务器端首先判断请求参数中的令牌值和Session中保存的令牌值是否相等,如果相等,则清除Session中的令牌值,然后执行数据处理操作。如果不相等,则提示用户已经提交过了表单,同时产生一个新的令牌值,保存到Session中。当用户重新访问提交数据页面中,将新产生的令牌值作为隐藏输入域的值。

    假定提交前该令牌号为LY7DPVNMJ872N6EOJ1OTO8URRON7P0NX,如果保存后返回到jsp页面令牌号会重新生成并保存到session中。那么你通过刷新或后退再次保存,提交到后台的令牌号依然是上次的LY7DPVNMJ872N6EOJ1OTO8URRON7P0NX。这样,这次保存提交的号与session中的号就不一样了。那么系统就可以判断出你是重复提交,然后跳转到相应的提示页面!

    下面是java代码:

    package com.test;  
    1.   
    2. import com.opensymphony.xwork2.ActionSupport;  
    3.   
    4. public class Test extends ActionSupport {                   
    5.    private String token;  //令牌     
    6.     public String getToken() {
            return token;
         }
        public void setToken(String token) {
           this.token = token;
        }
          
    7.   。。
    8.   。。
    9.   。。          
    10. }       

    struts.xml文件代码:

    <?xml version="1.0" encoding="UTF-8"?>  
    1. <!DOCTYPE struts PUBLIC  
    2.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
    3.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
    4. <struts>        
    1.     <!-- action 设置-->  
    2.   <package name="test" extends="struts-default" namespace="/testToken">           
    3.                 <action name="test" class="com.test.Test">           
    4.                <result name="invalid.token">/error.jsp</result> <!当重复提交时,转到error.jsp页面>                                                          
    5.                         <result>/test.jsp</result>           
    6.           
    7.                      <interceptor-ref name="defaultStack" />           
    8.                      <interceptor-ref name="token" />           
    9.           
    10.                 </action>           
    11.     </package>           
    12.   
    13.   
    14. </struts>  

    test.jsp代码

    <%@ page language="java" contentType="text/html; charset=utf-8"  
    1.     pageEncoding="utf-8"%>  
    2. <%@ taglib prefix="s" uri="/struts-tags"%>  
    3.   
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
    5. <html xmlns="http://www.w3.org/1999/xhtml">  
    6.     <head>  
    7.         <title>struts2 test token</title>  
    8.         <s:head />  
    9.     </head>  
    10.     <body>  
    11.         <s:actionerror/>  
    12.      <s:form action="test" namespace="/testToken">     
    13.            <s:textfield name="message" label="请输入您的信息"/>  
    14.            <s:token name="token"/>  
    15.            <s:submit value="确定" />  
    16.        </s:form>  
    17.   
    18.     </body>  
    19. </html>  

    error.jsp代码

    <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>  
    1. <%@ taglib prefix="s" uri="/struts-tags" %>  
    2. <html>  
    3. <body>  
    4. <s:actionerror/>  
    5.     不能重复提交表单!  
    6. </body>  
    7. </html>  
  • 相关阅读:
    IEEE 网址
    知乎上非常棒的机器学习专栏
    怎样认识比你优秀的人并和他们成为朋友?
    影藏铜皮,显示原点与更改
    PCB检查事项,生成钻孔表
    布局-同样模块复用
    制作DIP Package及DIP焊盘制作,不规则焊盘制作
    制作SMD Package及SMD焊盘制作
    导入网络表
    导入DXF文件
  • 原文地址:https://www.cnblogs.com/kaka-bing/p/3178077.html
Copyright © 2020-2023  润新知