山寨版struts的TokenProcessor类

2023-05-16

 

【文章标题】山寨版strutsTokenProcessor

【文章作者】曾健生

【作者邮箱】zengjiansheng1@126.com

【作者QQ190678908

【作者声明】本人水平有限,失误之处,敬请各位指出。

*******************************************************************************

Struts 1.x中有个很有用的工具类TokenProcessor,在阅读了源代码后根据原理进行了一定程度上的改写,同时也对这个类的编写思路进行阐述。

 

由于在原代码中要用到另外一个类Globals的常量值,方便起见把需要用到常量值写到山寨版的TokenProcessorMyTokenProcessor中,内容如下:

 

//标识session中的属性

    public static final String TOKEN_KEY = "newjueqi.net.csdn.session.token.key";

   

    //标识通过表单传递的属性

    public static final String PARAM_TOKEN_KEY = "newjueqi.net.csdn.session.param.token.key";

 

编写MyTokenProcessor类分以下几步:

 

一.把类变为“单实例模式”

 

//单例模式

    private MyTokenProcessor(){}

    private static final MyTokenProcessor myTokenProcessor=new MyTokenProcessor();

    public static MyTokenProcessor getInstance()

    {

       return myTokenProcessor;

    }  

 

二.产生一个随机的字符串, 把该字符串放在 Session , 并返回

 

//产生一个随机的字符串, 把该字符串放在 Session , 并返回

    public String saveToken(HttpServletRequest request){

      

       String tokenStr=null;

      

       //产生一个随机的字符串

       tokenStr=this.generateToken(request);

      

       //获取session

       HttpSession session=request.getSession();

      

       //把产生的字符串放入到session

       session.setAttribute(TOKEN_KEY, tokenStr);      

      

       return tokenStr; 

    }

 

其中的generateToken方法用MD5 算法和 sessionId, 系统时间产生一个随机的字符串

 

    private String generateToken(HttpServletRequest request){

      

       String tokenStr=null;

       String currentTime=null;

       String sessionId=null;

      

       //获取现在系统时间的字符串

       currentTime=System.currentTimeMillis()+"";

      

       //获取sessionID

       sessionId=request.getSession().getId();      

      

       try {

          

           MessageDigest md=null;

          

           //使用MD5算法

           md = MessageDigest.getInstance("MD5");

          

           //把系统时间和sessionId都参与MD5运算

           md.update( currentTime.getBytes());

          

           md.update( sessionId.getBytes());

          

      

           //获取MD5

           byte tokenByte[]=md.digest();

          

          

           //MD5值转换为16进制字符串

           tokenStr=this.toHex(tokenByte);

          

       } catch (NoSuchAlgorithmException e) {

          

           e.printStackTrace();

       }

      

       return tokenStr;

    }

 

generateToken中使用了一个函数把字节数组变成一个字符串,其中的原理已在本人的博文《从计算机的核心思想探讨一种进制转换的方法》(http://blog.csdn.net/newjueqi)进行了相关的阐述,这个函数的算法generateToken过程如图1 所示:

                                                               1

 

三.检验在 session 域中的 TOKEN_KEY 属性值和表单传递的请求参数的值是否一致。

    public boolean isTokenValid(HttpServletRequest request){

      

       //1.先检查session是否存在,如果不存在就返回

       HttpSession session=null;

       //getSession()获取session,传入的参数为false

       //则表示如果session不存在就不创建新的session

       session=request.getSession(false);

       if( session==null )

       {

           return false;

       }

      

       //2.检查 Session 中是否有 TOKEN_KEY 属性, 若没有, 返回 false

       Object tokenValue=session.getAttribute(TOKEN_KEY);

       if( tokenValue==null )

       {

           return false;

       }

      

       //3. 检查表单的隐藏域中是否存在指定的参数值: PARAM_TOKEN_KEY, 若不存在, 返回 false

       String paramValue=request.getParameter( PARAM_TOKEN_KEY );    

       if( paramValue==null )

       {

           return false;

       }

      

       //返回表单的隐藏域指定的参数值和Session域中属性值的比较结果

       return tokenValue.toString().equals(paramValue);

    }

 

四.清空 session 中的 TOKEN_KEY 属性

    public void resetToken(HttpServletRequest request){

      

       HttpSession session=null;

      

       //获取session的引用

       session=request.getSession();

      

       //如果session不为空,则从session中清除TOKEN_KEY 属性

       if( session!=null )

       {

           session.removeAttribute(TOKEN_KEY);

       }

             

    }

   

在附件中的工程是用这个自定义的类实现防止表单的重复提交。

附件下载地址:http://newjueqi.ys168.com/

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

山寨版struts的TokenProcessor类 的相关文章

  • 十六.月收入过万的淘宝从业者的执行力,吓呆我了

    摘要 淘宝开店现在好不好做 xff0c 很多人说现在淘宝已经不好做 xff0c 但淘宝的生意真的没有生存的空间了吗 在不久前 xff0c 和一个做淘宝行业相关的哥们聊天 xff0c 他自曝月收入过万 xff0c 被他那狠狠的执行力吓呆了 健
  • 自媒体16天后的总结

    摘要 在网上写了一些文章 xff0c 16天过去了 xff0c 总结一下自己在16天里的得失 健生干货分享 xff1a 第17篇 写了16天的文章 xff0c 有的文章我很用心的写 xff0c 但反应平淡 xff0c 有的文章 xff0c
  • 改变Windows窗口颜色,保护好眼睛

    研究表明 xff0c 绿色和蓝色对眼睛最好 xff0c 在长时间用电脑后 xff0c 经常看看蓝天 绿地就能在一定程度上缓解视疲劳 如果我们把电脑屏幕和网页的底色变为淡淡的苹果绿 xff0c 也可在一定程度上有效地缓眼睛疲劳症状了 在桌面上
  • 一个保护眼睛的小技巧

    一般情况用我都是800 600分辨率 xff0c 字体比较大 xff0c 看着舒服 如果在阅读文字资料时 xff0c 我喜欢用比较大的字体 xff0c 背景色是蓝色 xff0c 如下图 嘻嘻 xff0c 是不是看起来一点都不费神 xff0c
  • MySQL四种安装方式

    仓库安装 先在mysql官网上找到需要版本的域名然后用rpm安装下载下来 root 64 bb rpm ivh https repo mysql com mysql80 community release el9 1 noarch rpm
  • 十八. 200多万元得到的创业教训--社交软件之殇

    健生干货分享 xff1a 第18篇 摘要 xff1a 用了两年时间 xff0c 完成了两款社交app的开发 xff0c 两款app都挂掉了 xff0c 社交app成功的关键的是对用户 xff0c 产品的把握 xff0c 整合资源的能力 xf
  • 初学python

    文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 作者博客 http blog csdn net newjueqi 作者声明 欢迎转载文章 xff0c 但转载请保持文章
  • 十九. 想快速开发app,需要找外包吗?

    健生干货分享 xff1a 第19篇 摘要 xff1a 最近和两位准备开发app的创业者聊天 xff0c 他们之前没有移动互联网的相关经验 xff0c 有的是想法和资金 他们在纠结 想快速开发app xff0c 需要找外包吗 xff1f 最近
  • 一种进制转换的特殊方法

    文章标题 一种进制转换的特殊方法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 JDK 1 6 0
  • 从计算机的核心思想探讨一种进制转换的方法

    文章标题 从计算机的核心思想探讨一种进制转换的方法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境
  • 用面向对象的思想探讨游戏“魔兽争霸”(1)

    文章标题 用面向对象的思想探讨游戏 魔兽争霸 xff08 1 xff09 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net new
  • 用面向对象的思想探讨游戏“魔兽争霸”(2)-继承和多态的应用(修改版)

    文章标题 用面向对象的思想探讨游戏 魔兽争霸 2 继承和多态的应用 修改版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net ne
  • 改良用简单工厂模式构造的计算器代码—“反射”技术

    文章标题 改良用简单工厂模式构造的计算器代码 反射 技术 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程
  • 用面向对象的思想探讨游戏“魔兽争霸”(3)-模板模式的应用(修改版)

    文章标题 用面向对象的思想探讨游戏 魔兽争霸 3 模板模式的应用 修改版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net new
  • 打造山寨产品和伪造产品的利器——装饰模式

    文章标题 打造山寨产品和伪造产品的利器 装饰模式 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 J
  • 信号中断 与 慢系统调用

    1 术语 1 1 慢系统调用 xff08 Slow system call xff09 该术语适用于那些可能永远阻塞的系统调用 永远阻塞的系统调用是指调用永远无法返回 xff0c 多数网络支持函数都属于这一类 如 xff1a 若没有客户连接
  • nodejs中处理回调函数的异常

    如果是使用nodejs 43 express3这个经典的组合 xff0c 那么有一种很方面的处理回调函数异常的方法 xff1a 1 安装模块 xff1a express domain middleware 2 加入如下的代码 xff1a a
  • 简单模拟Java中创建多线程的两种方法

    文章标题 简单模拟 Java 中创建多线程的两种方法 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境
  • 虚拟桌面技术的初步探讨

    文章标题 虚拟桌面技术的初步探讨 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 编写语言 VC 43 43 6 0 操作平台 XP SP2 作者声明 感觉到这是一种
  • 一个网游盗号木马的汇编源码分析

    文章标题 xff1a 一个网游盗号木马的汇编源码分析 文章作者 newjueqi 作者邮箱 zengjiansheng1 64 126 com 作者QQ号 190678908 使用工具 IDA 操作平台 XP SP2 作者声明 今年7月份学

随机推荐

  • miranda分析报告

    文章标题 miranda分析报告 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 作者声明 欢迎转载文章 xf
  • Java线程类小结(附思维导图)

    文章标题 Java 线程类小结 xff08 附思维导图 xff09 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjue
  • Java集合类小结(思维导图版)

    文章标题 Java 集合类小结 思维导图版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 JDK
  • 简单文件分割合并器的Java实现

    文章标题 简单文件分割合并器的 Java 实现 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 JD
  • 层级菜单动态效果的实现

    文章标题 层级菜单动态效果的实现 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 Dreamweav
  • 简单实现邮件系统的界面功能

    文章标题 简单实现邮件系统的界面功能 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 Dreamwe
  • linux多线程编程书籍推荐:linux大牛之路从这几本书开始总结

    linux多线程编程是指基于Linux操作系统下的多线程编程 xff0c 包括多任务程序的设计 xff0c 并发程序设计 网络程序设计 xff0c 数据共享等 Linux系统下的多线程遵循POSIX线程接口 xff0c 称为pthread
  • 动态增加附件上传文件框的实现

    文章标题 动态增加附件上传文件框的实现 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程环境 Dreamw
  • app后端设计(12)--图片的处理

    app上线后 xff0c 不断接受用户的反馈 xff0c 于是 xff0c 反馈非常差的情况下 xff0c 都会有app的改版 一旦app的改版 xff0c 都会有比较大的UI改动 xff0c 一改动UI xff0c 那么图片的尺寸也就必须
  • XML学习笔记(附上思维导图)

    文章标题 XML 学习笔记 附上思维导图 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 作者声明 欢迎转载文
  • 搜索文本内容——Java代码的简单实现(修改版)

    文章标题 搜索文本内容 Java 代码的简单实现 修改版 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 编程
  • 用反射和内省技术实现简单SpringIOC

    文章标题 用反射和内省技术实现简单 SpringIOC 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newjueqi 作者声
  • 在JSP中用自定义标签实现集合的遍历——山寨版c:foreach

    文章标题 在 JSP 中用自定义标签实现集合的遍历 山寨版 lt c foreach gt 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 在 JSTL 中 xff0c 标签
  • 自定义标签学习笔记

    文章标题 自定义标签学习笔记 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者声明 本人水平有限 xff0c 失误之处 xff0c 敬请各位指出 首先对 JSP 中标签的各
  • 练习瑜伽一个半月的感受(附思维导图)

    文章标题 练习瑜伽一个半月的感受 xff08 附思维导图 xff09 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者博客 http blog csdn net newju
  • 一套适合理工类学科的学习法——《千万别恨数学》读后感

    文章标题 一套适合理工类学科的学习法 千万别恨数学 读后感 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 编程环境 JDK 1 6 0 01 作者声明 欢迎转载文章 xff0
  • Java Web开发中路径问题小结

    文章标题 Java Web 开发中路径问题小结 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者声明 本人水平有限 xff0c 失误之处 xff0c 敬请各位指出 Java
  • Java中this的用法

    一 this关键字 1 this的类型 xff1a 哪个对象调用就是哪个对象的引用类型 二 用法总结 1 this data 访问属性 2 this func 访问方法 3 this 调用本类中其他构造方法 三 解释用法 1 this da
  • 带你认识Google 屌炸天的AR项目——Project Tango

    这两年虚拟现实VR和增强现实AR简直火的不要不要的 xff0c 众多巨头都在发力 xff0c Google也推出了自己的AR技术解决方案 xff0c 因为目前介绍Tango的中文资料还比较少 xff0c 所以本人结合官网文档和自己的理解写了
  • 山寨版struts的TokenProcessor类

    文章标题 山寨版 struts 的 TokenProcessor 类 文章作者 曾健生 作者邮箱 zengjiansheng1 64 126 com 作者 QQ 190678908 作者声明 本人水平有限 xff0c 失误之处 xff0c