Struts2令牌机制的简单实现

情景模拟:在实际应用中由于设备网速等原因导致用户在提交表单后服务器长时间未响应,此时用户可能会对表单进行重复提交。或是在用户提交完表单后服务器给出了响应,而另一端用户对响应页面进行反复多次刷新,此时也会出现表单重复提交的情况。

令牌机制(隐藏域)
用户在页面提交资源请求后,服务器当即产生一个随机字符串(此字符串即称为令牌)并为该字符串保留两个副本,其中一个保留在服务器,另一个则跟随响应返回给客户端。

原理解析:
    ① 在令牌机制的加持下用户对表单进行首次提交时,系统会将本地副本字符串与服务器副本字符串相比较,此时的比较结果一定相同。
    ② 系统判断比较结果相同后,服务器端会修改原先保留的副本字符串,而此修改并不会影响到浏览器端的原副本。
    ③ 用户在页面中对表单进行重复提交时,用户向服务器端发送的请求中仍带有原副本字符串,当原副本字符串与服务器端已修改的副本字符串相比较的结果不同时证明表单被重复提交。

Action类

package action;

import com.opensymphony.xwork2.ActionSupport;

public class TokenSysAction extends ActionSupport {

	private String userName;
	private String userPwd;

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPwd() {
		return userPwd;
	}

	public void setUserPwd(String userPwd) {
		this.userPwd = userPwd;
	}

	public String execute() {
		return "success";
	}

}

struts.xml





	
		
			/welcome.jsp
			
			/message.jsp
			
			
			
			
		
	


index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>


	
		
		Index
		
	
	
		
您好,请登录!
用户名:
密    码:

message.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>


	
		
		Message
	
	
		

提示:您已提交过该请求,无需重复提交!

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>


	
		
		Welcome
	
	
		

请求已提交,请静候处理!

运行示例:
Struts2令牌机制的简单实现_第1张图片
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

你可能感兴趣的:(Struts2,Struts2,token,AOP,令牌机制)