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>
复制代码
原文地址:https://www.cnblogs.com/wangsicongde/p/7573531.html