加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Struts-利用Token处理重复提交

发布时间:2021-11-21 21:16:13 所属栏目:教程 来源:互联网
导读:利用同步令牌(Token)机制可以解决Web应用中重复提交的问题,Struts通过org.apache.struts.action.Action类中提供的一系列和Token相关的方法给出一个参考实现: 1.protected boolean isTokenValid(javax.servlet.http.HttpServletRequset requset) 判断存储在

利用同步令牌(Token)机制可以解决Web应用中重复提交的问题,Struts通过org.apache.struts.action.Action类中提供的一系列和Token相关的方法给出一个参考实现:
 
1.protected boolean isTokenValid(javax.servlet.http.HttpServletRequset requset)
 
判断存储在当前用户会话中的令牌值和请求参数中的令牌值是否匹配。如果匹配,就返回true,否则返回false.只要符合以下情况之一,就会返回false:
 
不存在HttpSession对象
在session范围内没有保存令牌值
在请求参数中没有令牌值
存储在当前用户session范围内的令牌和请求参数的令牌值不匹配
2.protected void resetToken(javax.servlet.http.HttpServletRequest request)
 
从当前session范围内删除令牌属性。
 
3.protected void saveToken(javax.servlet.http.HttpServletRequest request)
 
创建一个新的令牌,并把它保存在当前session范围内,如果HttpSession对象不存在就首先创建一个HttpSession对象。
 
同时<html:form>标签的实现类org.apache.struts.taglib.html.FormTag的renderToken()方法判断在session范围内是否存在Token,如果存在,就在表单中生成一个包含Token信息的隐藏字段,也就是说我们直接使用Struts的表单标签<html:form>就行,不用手动的添加判断获取 session中的Token。
 
下面就一个小例子来详细的讲叙Struts中如何利用Token解决重复提交:
 
1,配置web.xml,装配Struts框架:
 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>Struts-Token</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
 
  <servlet-mapping>
      <servlet-name>action</servlet-name>
      <url-pattern>*.do</url-pattern>
  </servlet-mapping>
</web-app>
 
 

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读