struts2---执令牌验证

指令牌的作用

假设说要求定义一个文章的发布系统,那么如果在进行文章编写并且提交之后,那么用户有可能出现这样一个操作:使用浏览器的后退按钮,回到了提交前的页面,这样的操作实际上就属于重复的提交操作,而在实际的开发之中要解决这样的操作,就可以使用指令牌的操作.

在这里插入图片描述

指令牌验证实现

  • 实现MessageAction,实现add()方法
package mao.shu.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class MessageAction extends ActionSupport {
	private String info;
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	
	public String add(){
		System.out.println("******成功添加数据"+this.info+"******");
		return super.SUCCESS;
	}
}

  • 实现PrepareAction,实现addPre()方法
package mao.shu.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

public class PrepareAction extends ActionSupport {

	public String addPre(){
		return "msg.add";
	}
}

  • 配置struts.xml文件,需要在防止重复提交的Action上配置"token"拦截器
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	 <package name="root" namespace="/" extends="struts-default">
     <action name="MessageAction" class="mao.shu.action.MessageAction">
     	<result name="success">/success.jsp</result>
     	<!--配置token  -->
     	<interceptor-ref name="token"></interceptor-ref>
     </action>  
     
     <action name="PrepareAction" class="mao.shu.action.PrepareAction">
     	<result name="msg.add">/msg_add.jsp</result>
     </action>  
 </package>
</struts>

  • 编写:msg_add.sjp页面,需要使用到struts2的标签"<token>"
  • 使用了这个标签,就会在页面之中向session中保存一个随机数,并且在表单提交的时候将该随机数发送到客户端之中,客户端会保存随机数,当表单提交成功之后,页面会修改session中的随机数,而后如果用户再次提交,客户端匹配随机数和新的随机数不一致,表示表单被重复提交了,就跳转到错误页面.
<form action="<%= addUrl%>" method="post">
	填写msg:<input type="text" name="msg" id="msg" />
	<input type="submit" value="发送"/>
	<s:token></s:token>
</form>
  • 生成的页面源代码

[img ]

  • success.jsp页面
<h1>添加数据成功</h1>
  • 通过访问PrepareAction中的addPre方法跳转到 msg_add.jsp页面之中

http://localhost:8080/TokenProject/PrepareAction!add.action

在这里插入图片描述

  • 显示错误信息
  • 此时当我重复提交表单时会出现以下提示,提示我们找不到invalid.token的页面

在这里插入图片描述

  • 因此我们需要在MessageAction的struts.xml文件的配置中,配置 invalid.token的返回页面
 <action name="MessageAction" class="mao.shu.action.MessageAction">
 	<result name="success">/success.jsp</result>
 	<!--  配置当触发token验证的时候跳转的路径-->
 	<result name="invalid.token">/error.jsp</result>
 	<!--配置token  -->
 	<interceptor-ref name="token"></interceptor-ref>
 </action>  
  • 当Token的验证出现了错误之后,实际可以使用标签实现错误信息的输出,错误信息都保存在actionErrors集合之中.
  • 定义error.jsp页面,使用EL表达式输出集合信息
<body>
	${actionErrors }
</body>
  • 提示信息
    在这里插入图片描述
  • 但是现实的信息为英文,要想让其以中文的方式显示,则需要定义struts.properties文件
struts.custom.i18n.resources=Message
  • 配置Messages.properties文件,配置错误的提示信息.
struts.messages.invalid.token="表单已经处理过了,请不要重复提交"
  • 效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值