`

struts2中的token算法

阅读更多
今天有朋友问到struts2中的token算法,特意复习了下,看了下代码,其实是这样的,摘录如下:
  <s:token>是Struts2中为了防止表单重复提交的标签,这个标签的实现类是org.apache.struts2.views.jsp.ui.TokenTag,这个类是关键的父类是org.apache.struts2.views.jsp.ComponentTagSupport。
第一、
TokenTag ComponentTagSupport.doStartTag 将控件对象化
TokenTag ComponentTagSupport.doEndTag component.end 调用component(Token)
Token 继承自org.apache.struts2.components.UIBean,因此首先调用UIBean.end方法,在UIBean.end方法中最后一句调用定义为protected的方法evaluateExtraParams,这个方法是提供给UIBean的子类扩展使用的,在Token的evaluateExtraParams方法中
String token = buildToken(tokenName);
其中buildToken方法实际上调用的是 TokenHelper.setToken方法,在setToken方法中值得注意的是两点,
1 generateGUID()方法,此方法是生成Token值得算法所在
2 session.put(tokenName, token)可以看到此处将生成的值存储在session中,等待以后比对。
第二、
到此<s:token>已经完成了他的任务,之后的比对来判断是否为重复提交,Struts2是通过interceptor来完成的TokenInterceptor,调用TokenHelper.validToken方法,此方法从Parameters中取出token值来和session里比较,如果不一样return false



其中代码中的生成TOKEN算法,在TokenHelper代码中,

return (new BigInteger(165, RANDOM)).toString(36).toUpperCase();

这样去生成的
分享到:
评论

相关推荐

    Struts2 in action中文版

    6.7.2 Struts 2中常用的表达式语言特性 131 6.7.3 表达式语言的高级特性 135 6.8 小结 137 第7章 UI组件标签 139 7.1 为什么需要UI组件标签 139 7.2 标签、模板和主题 144 7.2.1 标签 146 7.2.2 模板 146 7.2.3 ...

    Struts2自定义拦截器实现防止重复提交

    总结来说,防止重复提交的自定义拦截器在Struts2中起到了关键作用,通过生成和验证令牌,能够在不依赖Struts2标签的情况下,有效地避免了用户意外或恶意的重复提交,保证了应用的稳定性和数据的一致性。

    使用struts2技术,实现登录功能(连接数据库)

    Struts2是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中被广泛应用,尤其在处理用户交互和业务逻辑方面表现出色。本教程将详细讲解如何使用Struts2技术来实现一个基本的登录功能,并与数据库进行连接...

    自定义拦截器实现防止重复提交

    在Struts2中,拦截器是基于AOP(面向切面编程)的概念,可以对Action的调用进行拦截并在调用前后执行额外的操作。自定义拦截器需要继承`org.apache.struts2.interceptor.AbstractInterceptor`类,并覆盖`intercept()...

    JAVA服务端和客户端功能实现 OAuth2.0

    2. 令牌端点(Token Endpoint):客户端使用授权码或用户凭据向此端点请求访问令牌。 3. 验证逻辑:验证用户凭证,确保请求合法。 4. 令牌生成:生成安全的访问令牌和刷新令牌,发送给客户端。 5. 用户信息端点...

    自定义拦截器实现防止重复提交-5页.pdf

    - 在Struts2的配置文件(通常为`struts.xml`)中,需要声明并配置自定义的拦截器,将其添加到拦截器栈中,以确保在每次请求处理前都会执行这个拦截器。 - 配置拦截器时,还可以定义特定的拦截规则,如哪些Action...

    java必备知识点大全.pdf

    Struts2中result中的type类型:Struts2中result可以是 dispatcher、chain、redirect、redirectAction等类型。 Struts2标签:Struts2提供自定义的标签来简化JSP页面的开发。 SSI整合:SSI即Server Side Include,...

    网吧管理系统

    2. **Servlet与JSP**:Servlet是Java Web应用中处理HTTP请求的服务器端组件,JSP(JavaServer Pages)则用于创建动态网页。在网吧管理系统中,它们常用于实现用户的登录、计费、资源分配等功能。 3. **JDBC数据库...

    shiro学习笔记0.0.0.0

    1. Web 应用:Shiro 可以很好地集成到 SpringMVC 或 Struts2 等 Web 框架中,提供Web 应用的安全管理。 2. 命令行应用:对于没有 UI 的应用,Shiro 也能提供简单的认证和授权功能。 3. 微服务:在微服务架构中,...

    jwt完整无框架web例子+登录+跨域web demo

    2. JWT登录验证: 在这个示例中,用户成功登录后,服务器会生成一个包含用户信息的JWT并返回给客户端。客户端在后续请求中携带此JWT,服务器通过解码验证JWT的完整性,从而确定用户身份,实现无状态的会话管理。 3....

    JSP避免Form重复提交的三种方案

    -- Struts 会自动根据 session 中标识生成一个隐含 input 代表令牌 --&gt; ``` 在Action中,我们可以检查令牌的有效性并重置它: ```java if (!isTokenValid(request)) { errors.add(ActionErrors.GLOBAL_ERROR, ...

    仿微信布局eclipse服务器端

    1. **服务器框架选择**:在Eclipse中,我们通常会选用Spring Boot或者Struts2等成熟的Java Web框架来构建服务器端。Spring Boot以其简洁的配置和强大的功能深受开发者喜爱,而Struts2则提供了MVC模式,便于处理HTTP...

    基于javaweb的手机销售商城(含数据库文件).zip

    9. **安全机制**:考虑到用户登录和交易安全,项目可能实现了用户认证、权限控制和加密技术,如使用HTTPS协议、SHA哈希算法或者JWT(JSON Web Token)进行身份验证。 10. **测试**:在开发过程中,单元测试和集成...

Global site tag (gtag.js) - Google Analytics