今天有朋友问到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();
这样去生成的
分享到:
相关推荐
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是一个强大的MVC(模型-视图-控制器)框架,它在Java Web开发中被广泛应用,尤其在处理用户交互和业务逻辑方面表现出色。本教程将详细讲解如何使用Struts2技术来实现一个基本的登录功能,并与数据库进行连接...
在Struts2中,拦截器是基于AOP(面向切面编程)的概念,可以对Action的调用进行拦截并在调用前后执行额外的操作。自定义拦截器需要继承`org.apache.struts2.interceptor.AbstractInterceptor`类,并覆盖`intercept()...
2. 令牌端点(Token Endpoint):客户端使用授权码或用户凭据向此端点请求访问令牌。 3. 验证逻辑:验证用户凭证,确保请求合法。 4. 令牌生成:生成安全的访问令牌和刷新令牌,发送给客户端。 5. 用户信息端点...
- 在Struts2的配置文件(通常为`struts.xml`)中,需要声明并配置自定义的拦截器,将其添加到拦截器栈中,以确保在每次请求处理前都会执行这个拦截器。 - 配置拦截器时,还可以定义特定的拦截规则,如哪些Action...
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数据库...
1. Web 应用:Shiro 可以很好地集成到 SpringMVC 或 Struts2 等 Web 框架中,提供Web 应用的安全管理。 2. 命令行应用:对于没有 UI 的应用,Shiro 也能提供简单的认证和授权功能。 3. 微服务:在微服务架构中,...
2. JWT登录验证: 在这个示例中,用户成功登录后,服务器会生成一个包含用户信息的JWT并返回给客户端。客户端在后续请求中携带此JWT,服务器通过解码验证JWT的完整性,从而确定用户身份,实现无状态的会话管理。 3....
-- Struts 会自动根据 session 中标识生成一个隐含 input 代表令牌 --> ``` 在Action中,我们可以检查令牌的有效性并重置它: ```java if (!isTokenValid(request)) { errors.add(ActionErrors.GLOBAL_ERROR, ...
1. **服务器框架选择**:在Eclipse中,我们通常会选用Spring Boot或者Struts2等成熟的Java Web框架来构建服务器端。Spring Boot以其简洁的配置和强大的功能深受开发者喜爱,而Struts2则提供了MVC模式,便于处理HTTP...
9. **安全机制**:考虑到用户登录和交易安全,项目可能实现了用户认证、权限控制和加密技术,如使用HTTPS协议、SHA哈希算法或者JWT(JSON Web Token)进行身份验证。 10. **测试**:在开发过程中,单元测试和集成...