Struts Token 使用

1,先在一个Action中,调用saveToken(HttpServletRequest request)方法。然后转向带有表单的JSP页面。

2,在JSP页面提交表单给一个Action,再这个Action中进行是否为重复提交的判断。

if (isTokenValid(request, true)) {

// 未重复提交时,正确的时候应该做的事情

return mapping.findForward("success");

} else {

// 重复提交时,需要做的事情

saveToken(request);

return mapping.findForward("error");

}

Struts Token 机制:

1,  由第一个Action调用saveToken(HttpServletRequest request),这个方法内部实现如下:

protected void saveToken(HttpServletRequest request) {

token.saveToken(request);

}

token.saveToken(request);

这个方法的实现如下:

public synchronized void saveToken(HttpServletRequest request) {

HttpSession session = request.getSession();

String token = generateToken(request);

if (token != null) {

session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);

}

}

这个方法调用generateToken方法实现如下:

public synchronized void saveToken(HttpServletRequest request) {

HttpSession session = request.getSession();

String token = generateToken(request);

if (token != null) {

session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);

}

}

generateToken完毕后,将得到的唯一值setAttribute到session中。

session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);

Globals.TRANSACTION_TOKEN_KEY的值是:” org.apache.struts.action.TOKEN”

然后跳转到JSP页面。

2,  JSP页面的Struts自定义标签 <html:form>的标签类:org.apache.struts.taglib.html. FormTag

这个类的doStartTag()方法会调用本类的renderToken()方法。

protected String renderToken() {

StringBuffer results = new StringBuffer();

HttpSession session = pageContext.getSession();

if (session != null) {

String token =

(String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);

if (token != null) {

results.append("<input type=\"hidden\" name=\"");

results.append(Constants.TOKEN_KEY);

results.append("\" value=\"");

results.append(token);

if (this.isXhtml()) {

results.append("\" />");

} else {

results.append("\">");

}

}

}

return results.toString();

}

这样子会生成类似于

 

<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" 
         value="6aa35341f25184fd996c4c918255c3ae">

的隐藏标签。

然后提交到一个Action中,在Action中用isTokenValid()方法进行比较session中” org.apache.struts.action.TOKEN”的这个key所对应的值和提交来的request中的” org.apache.struts.action.TOKEN”的这个value是否一致。

如果为true,那么证明可以提交。如果为false,证明已经重复,不允许提交。

转载于:https://www.cnblogs.com/u0mo5/p/4170426.html

[Struts]Token 使用及原理相关推荐

  1. 浅析Struts 体系结构与工作原理(图)

       Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架. 基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模 ...

  2. Struts 体系结构与工作原理(图)

       Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架. 基本概念 Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目,它采用模 ...

  3. Struts 体系结构与工作原理 图

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Stru ...

  4. 分步学习Struts(三) 原理分析

    之前的实例演示,我们已经基本了解了如何使用Struts框架,这次我们主要讲解一下Struts框架是如何具体实现MVC的. 在介绍之前有几个名词需要大家理解一下:         ActionServl ...

  5. oracle access manager token,AuthenticationManager验证原理

    AuthenticationManager相关类图 AuthenticationManager验证过程 AuthenticationManager验证过程涉及到的类和接口较多,我们就从这里开始逐一分析 ...

  6. 基于jwt的token验证、原理及流程

    来源:www.cnblogs.com/better-farther-world2099 一.什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JS ...

  7. oauth2.0授权协议中刷新令牌refresh token的工作原理及生命周期分析

    在学习oauth2.0协议的时候,对于刷新令牌refresh token感觉很困惑.主要是为啥需要刷新令牌,以及刷新令牌是如何工作的,技术细节是啥?比如通过refresh token可以让access ...

  8. Token令牌的原理及使用

    Token令牌 1. Token的定义 2. 使用Token的目的 3. Token 的优点 4. Token一般用在三个地方 5. Token的验证过程 1. Token的定义 Token是服务端生 ...

  9. Struts 体系结构与工作原理(图) .

    2019独角兽企业重金招聘Python工程师标准>>> 请至以下链接处查看. http://blog.csdn.net/fenglibing/archive/2007/08/21/1 ...

最新文章

  1. 【2016 Asia China-Final D题】
  2. RAC 的一些概念性和原理性的知识
  3. java ear war_[JAVA语法]怎样制作ear,war文件
  4. P4111 [HEOI2015]小Z的房间
  5. WordPress 主题教程 #5:主循环
  6. dsp调音一次多少钱_把手教你调音玩转DSP
  7. hp1015驱动64位_惠普1015驱动官方下载|
  8. 十种经典运放电路分析
  9. 全国计算机二级等级考试评卷,全国计算机等级c语言考试评卷老师是如何阅卷的...
  10. 打开cmd命令提示不能输入命令
  11. 2019年了桌面CPU还吊打笔记本CPU?真相了
  12. 5)自适应滤波(二)[RLS算法]
  13. 140种Python标准库、第三方库和外部工具
  14. 正则函数--search/match/findall/sub/split
  15. 【论文】针对图片过大问题,在不降低图片dpi的情况下缩小图片大小
  16. k8s 配置 Secret 集成Harbor
  17. 英文文献的阅读翻译神器
  18. (附源码)springboot奖助学金评审系统 毕业设计 031035
  19. saltstack安装 [一]
  20. Python图片处理模块PIL操作方法(pillow)(转载)

热门文章

  1. 都2021年了,不会还有人连深度学习还不了解吧(六)-- Padding篇
  2. 图像和流媒体 -- 详解YUV数据格式
  3. Hi3516A开发--mpp业务分析
  4. Judges' Time Calculation
  5. linux命令修改管理员时间,Linux管理员必须知道的sudo命令
  6. 在深度神经网络中你有多吸引人?
  7. 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口
  8. 树莓派linux系统识别u盘启动,树莓派Raspberry Pi实战之命令行下实现USB存储设备自动挂载...
  9. python监控进程状态_python监控进程脚本
  10. 打开指定摄像头_我在无人区深处,遇到了一个高清摄像头