zoukankan      html  css  js  c++  java
  • 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>
    复制代码
  • 相关阅读:
    填坑总结:python内存泄漏排查小技巧
    springMVC注解中@RequestMapping中常用参数value params 以及@RequestParam 详解
    springMVC 自定义类型转换器
    为什么Java需要lambda 表达式? 上帝爱吃苹果
    利器| Cypress 强大全新的 Web UI 测试框架应用尝鲜
    缺少锻炼面试的机会?城市群之北上广杭一起来了!
    实战 | 基于JMeter 完成典型电商场景(首页浏览)的性能压测
    一文搞定 pytest 自动化测试框架(一)
    测试面试 | Java 经典面试题汇总
    软件测试工程师成长痛点和职业发展建议
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7573531.html
Copyright © 2011-2022 走看看