利用Token解决重复重复提交:
Struts利用同步令牌(Token)的方式来解决Web应用中重复提交的问题,其机制是在form表单中增加一个隐藏的?保存当前令牌?然后在程序中判断此o牌值是否合?
org.apache.struts.action.ActioncL供了相关操作Token的方?
1、isTokenValieҎ:
判断存储在当前用户会话中的o牌值和h参数中的令牌值是否匹?如果匚w,q回true,反之q回false.只要W合下列情况之一?׃q回false:
不存在HttpSession对象;
在session范围内没有保存o牌?
在请求参C没有令牌?
存储在当前用户session范围内的令牌值和h参数中的令牌g匚w.
2、resetTokenҎ:
从当前session范围内删除o牌属?
3、saveTokenҎ:
创徏一个新的o?q把它保存在当前session范围?如果HttpSession不存?首先创Z个HttpSession对象.
如何利用上述Ҏ应用令牌机制解决重复提交问题:
以用h册ؓ?
在用戯求newUser.jsp之前,首先把请求{发到PrepareAction,PrepareAction 调用saveTokenҎ,创徏一个新的o?q将令牌g存在当前HttpSession?新创建的),PrepareAction接着把请求{发给newUser.jsp.
newUser.jsp中的<html:form>标签自动判断在session范围内是否存在Token,如果存在,p动在表单中生成一个包含Token信息的隐藏字D?例如:
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="....">
在用h交表单后,由InsertUserAction处理h.在InsertUserAction?调用isTokenValidҎ,判断当前用户会话中的令牌值和h参数中的令牌值是否匹?如果匚w,p用resetTokenҎ,删除Token,然后执行插入数据操作.如果不匹?q回相关错误提示,q行相关操作.
OK.q可以有效放|重复提交了.
如何在不使用Struts的前提下利用令牌机制解决重复提交问题:
Struts的o牌机制有几个要点可以让我们在普通的JSP/Servlet中解决重复提交问?
1、提供几个操作Token的相x?
关键有三?
resetToken(HttpServletRequest request)-->重置令牌?
saveToken(HttpServletRequest request)-->保存令牌?
isTokenValid(HttpServletRequest request)-->o牌是否合?
2、在form表单中增加隐藏域,保存当前令牌?
3、在执行持久性数据操作之前调用相x法判断当前o牌是否合?之后在进行相x?
Ҏ是相同的,只是实现的方式不太一?
truts1.1 API关于几个Token操作Ҏ的说?
protected boolean isTokenValid(javax.servlet.http.HttpServletRequest request)
Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
protected boolean isTokenValid(javax.servlet.http.HttpServletRequest request, boolean reset)
Return true if there is a transaction token stored in the user's current session, and the value submitted as a request parameter with this action matches it.
protected void resetToken(javax.servlet.http.HttpServletRequest request)
Reset the saved transaction token in the user's session.
protected void saveToken(javax.servlet.http.HttpServletRequest request)
Save a new transaction token in the user's current session, creating a new session if necessary.