• Struts2--二次提交


      在Struts2中,使用token的方式来防止二次提交。并且在默认的拦截器栈中提供了两个默认拦截器Token Interceptor和Token Session Interceptor。必须要在form中添加token标签,如果没有的话,则会被认为是invalid token。

    Token Interceptor

      这个拦截器在发现一个重复提交的无效的token的时候,会返回一个invalid.token,会在action的配置文件中匹配。

    <%@ page language="java" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>表单界面</title>
    </head>
    <body>
        <s:actionerror/>
        <s:form action="regist" method="post">
            <s:token/>
            <s:textfield name="name" label="名字" value="张三"/>
            <s:textfield name="age" label="年龄" value="10"/>
            <s:submit value="注册"/>
        </s:form>
    </body>
    </html>
    package com.fuwh.model;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class Regist extends ActionSupport{
        
        private static final long serialVersionUID = 1L;
        
        private String name;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String execute() throws Exception {
            // TODO Auto-generated method stub
            System.out.println("添加学生:姓名:"+name+" 年龄:"+age);
            Thread.sleep(5000);
            return SUCCESS;
        }
        
    
    }
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    <struts>
        <!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
        <constant name="struts.devMode" value="true" />
        
        <!-- 配置action -->
        <package name="regist" extends="struts-default">
            <action name="regist" class="com.fuwh.model.Regist">
                <interceptor-ref name="token"/>
                <interceptor-ref name="defaultStack"/>
                <result name="success">success.jsp</result>
                <result name="invalid.token">index.jsp</result>
            </action>
        </package>
    
    </struts>

    Token Session Interceptor

      这个拦截器会无视掉第一次提交的直至完成的所有二次提交,也不会返回什么invalid token

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    <struts>
        <!-- 开启debug模式,会自动加载配置文件等等,不用每次更改了配置文件就去重新启动下服务器 -->
        <constant name="struts.devMode" value="true" />
        
        <!-- 配置action -->
        <package name="regist" extends="struts-default">
            <action name="regist" class="com.fuwh.model.Regist">
                <interceptor-ref name="tokenSession"/>
                <interceptor-ref name="defaultStack"/>
                <result name="success">success.jsp</result>
                <result name="invalid.token">index.jsp</result>
            </action>
        </package>
    
    </struts>
  • 相关阅读:
    select移动选项
    jFinal+AngularJs未来javaEE开发的趋势——程序员的福音 .
    MVC框架PK:Angular、Backbone、CanJS与Ember
    错误 1093 You can't specify target table 'table name' for update in FROM clause
    Angularjs开发一些经验总结
    需求调研的步骤、方法
    MyEclipse如何跟踪调试
    需求入门: 软件需求的三个层次
    JAVA的Random类(转)
    Java中从[1,36]随机生成7个不重复的数字,放入一个数组中
  • 原文地址:https://www.cnblogs.com/zerotomax/p/6354458.html
Copyright © 2020-2023  润新知