struts2 采用Session Token(Token 令牌)避免表单重负提交

表单的重复提交一直都是一个比较困扰人的问题,下面是struts2采用Token令牌的方式的来避免重复提交。

有表单的页面,也就是将要提交表单的那个页面,需用struts2自己的标签,要使用struts2的标签,当然是要在jsp文件的开头加上:

<%@ taglib prefix="s" uri="/struts-tags" %>
然后就可以用他的标签了、

现在以一个最基本的表单来示范:

<s:form action="token" theme="simple">
		username:<s:textfield name="username"></s:textfield><br/>
		password:<s:password name="password"></s:password><br/>
		<s:token></s:token>
		<s:submit></s:submit>
</s:form>

注意上面的表单,为一个亮点就是多加了<s:token></s:token>这个标签。这就是struts2封装好了的,查看他的源代码可以看到:

<form id="token" name="token" action="/strut2_302_token/token.action;jsessionid=946434B84A81E5B277DC0DE907204923" method="post">

		

		username:<input type="text" name="username" value="" id="token_username"/>
<br/>

		password:<input type="password" name="password" id="token_password"/><br/>



		<input type="hidden" name="struts.token.name" value="struts.token" />
<input type="hidden" name="struts.token" value="33T962IU08J88WEQWZ9WMSNXWYCQU11P" />



		<input type="submit" id="token_0" value="Submit"/>




</form>

呵呵,有多了个隐藏域、这应该就是重点了。我们不妨假设,struts2这个<s:token></s:token>的原理,应该就和那个value随机数有关。
接下来,为了测试,新建两个jsp页面。

刚刚提交时,转到tokenSuccess.jsp。

假设表单重复提交,则转到:tokenFail.jsp。

然后,最重要的一步:(当然还是我们struts2的核心配置文件struts.xml文件了)

    <package name="login" extends="struts-default" namespace="/">   

        <action name="token" class="com.guang.struts2.token">
        	<result name="success">/tokenSuccess.jsp</result>
        	<result name="invalid.token">/tokenFail.jsp</result>
  			      	<interceptor-ref name="token"></interceptor-ref>
        	<interceptor-ref name="defaultStack"></interceptor-ref>
        	
        </action>
    </package>

注意上面的代码,较平时多出了两句:

<interceptor-ref name="token"></interceptor-ref>
        <interceptor-ref name="defaultStack"></interceptor-ref>


这个是struts2的拦截器、


java文件没有什么特殊的,随便的生成get,set方法。再在execute方法中return SUCCESS; 即可了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值