在涉及到关键业务操作的web页面,应为当前web页面生成一次性随机令牌,作为主会话标识的补充。在执行关键业务前,应确保用户提交的一次性随机令牌与服务器端保存的一次性随机令牌匹配,以避免跨站请求伪造(CSRF)等攻击。
1、在公共JS中定义一个function 用来生成token ,然后将生成的token赋值给JSP里的隐藏域<input id="tokenValue" type="hidden"/>
前端jsp:
<html> <body style="background-color:#f8f8f8"> <div class="content"> <!-- 页面存储的token值 --> <input id="tokenValue" type="hidden"/> </div> </body> <script type="text/javascript"> $(document).ready(function(){ //生成token makeToken(); }); var dom='{"login_type":"01","oldpwd":"'+oldpwd+'",newpwd:"'+newpwd+'",name:"'+name+'",id_nbr:"'+id_nbr+'",token:"'+token+'"}'; $.ajax({ url : baseUrl+"/user/changePassword", data:"dom="+dom, cache : false, async : true, type : "POST", dataType : 'json', success : function (xmlRes){ var item = xmlRes.return_info; if(item.retcode!="0"){ // 重新生成token makeToken(); var er_msg = item.message; return alert(er_msg); } } }); </script> </html>
公共js:
//生成token function makeToken(){ var dom = '{"login_type":"01"}'; $.ajax({ url : baseUrl+"/common/makeToken", data:"dom="+dom, cache : false, async : true, type : "POST", dataType : 'json', success : function (jsonRes){ $("#tokenValue").val(jsonRes.token); } }); }
2、在后台Action 中定义一个方法用来产生token,并将token保存到session中,返回token值到前台jsp
后台CommonAction:
/** * 生成token * * @return */ public String makeToken() { TokenProcessor tokenProcessor = TokenProcessor.getInstance(); String token = tokenProcessor.generateToken(); // 将生成的token值放到session中 session.put(TokenProcessor.TOKEN_INFO, token); responseData.put("token", token); return SUCCESS; }
token处理类:
package com.waukeen.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; /** * 令牌处理类 * * @author * */ public class TokenProcessor { private TokenProcessor() { } /** * 存储在session中token的key */ public static final String TOKEN_INFO = "token_info"; private static final TokenProcessor instance = new TokenProcessor(); public static TokenProcessor getInstance() { return instance; } /** * 生成token * * @return */ public String generateToken() { try { String token = System.currentTimeMillis() + new Random().nextInt(99999999) + ""; MessageDigest md = MessageDigest.getInstance("MD5"); md.update(token.getBytes()); return toHex(md.digest()); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } private String toHex(byte buffer[]) { StringBuffer sb = new StringBuffer(buffer.length * 2); for (int i = 0; i < buffer.length; i++) { sb.append(Character.forDigit((buffer[i] & 240) >> 4, 16)); sb.append(Character.forDigit(buffer[i] & 15, 16)); } return sb.toString(); } }
3、前台jsp提交请求到后台,将token值传到后台,与session中的token值比对,如果一致,继续处理,如果不一致,提示“非法的请求!”
UserAction:
/** * 需要验证token的业务请求(如:修改密码) */ public String changePassword(){ // 取得前端页面传过来的token值 String token = requestData.containsKey("token") ? (String) requestData.get("token") : ""; String tokenInfo = (String) session.get(TokenProcessor.TOKEN_INFO); session.remove(TokenProcessor.TOKEN_INFO); // 将前端的token值与session中的token值比对,如果一致,继续处理,如果不一致,提示“非法的请求!” if (!token.equals(tokenInfo)) { returnInfo.setRetcode("1"); returnInfo.setMessage("非法的请求!"); return SUCCESS; } }
相关推荐
在你提供的压缩包文件"token"中,可能包含了一个简单的Struts2令牌实例,你可以通过查看源代码学习如何在实际项目中集成和使用令牌机制。学习和理解这个实例,将有助于你更好地理解和应用Struts2的令牌功能。
本技术介绍将深入探讨如何使用C#实现令牌验证机制,并结合Nginx集群与SSL证书来增强WebAPI的安全性。 首先,让我们理解什么是令牌验证。令牌验证是一种身份验证方法,它通过在客户端和服务器之间交换一个唯一的、不...
Java令牌Token登录与退出的实现是指一种基于令牌的登录机制,通过使用Java语言实现令牌的生成、验证和管理,以实现用户的登录和退出。这种机制的优点是无状态登录,服务器不再存储登录状态,客户端只需要携带令牌就...
3. 生成令牌:在Action中,如`execute()`方法之前,使用`ActionContext.getContext().getSession().put("token", UUID.randomUUID().toString());`生成并存储令牌。 4. 显示令牌:在JSP页面的表单中,通过`...
本文将深入探讨如何在Spring Boot应用中利用令牌Token来实现用户登录功能。 首先,理解Token的基本概念。Token是一种安全机制,用于在客户端和服务端之间传递认证信息。它是一个字符串,包含了用户的标识信息,比如...
ThinkPHP出于安全的考虑增加了表单令牌Token,由于通过Ajax异步更新数据仅仅部分页面刷新数据,就导致了令牌Token不能得到更新,紧接着的第二次新建或更新数据(提交表单时)失败——不能通过令牌的验证。...
本文主要讲解 App 令牌的一个 Token 实现,解决了使用 session 来判断登陆验证的不足,通过定义一个 Token 类来存储 token,包括字符串和时间戳,并实现了 Token 的管理类来维护 Token。 Token 类的实现 在 Token....
本文将深入探讨如何在Java环境中创建和使用`Token`,以及其背后的算法原理。 首先,我们需要理解什么是`Token`。`Token`是一个字符串,它代表了用户的身份或授权信息。与传统的Cookie相比,`Token`不存储在客户端,...
7. **令牌撤销**:如果`refresh_token`被盗或者用户注销,服务器应能撤销该令牌,防止非法使用。一旦撤销,任何持有该令牌的客户端将无法再获取新的`access_token`。 8. **安全性考虑**:为了保护`refresh_token`,...
`<interceptor-ref name="token">`表示使用了令牌拦截器,`<param name="strict">true</param>`表示开启严格模式,即当令牌失效时,会抛出异常,而不是简单地返回输入页面。 此外,`TokenAwareActionSupport`类是...
本文将深入探讨ASP.NET WebAPI2如何实现基于Token的令牌身份验证。 首先,我们需要理解Token的身份验证原理。这种机制下,用户登录后,服务器会生成一个唯一的Token,这个Token包含了一些关于用户的信息,经过加密...
承载令牌是OAuth 2.0中定义的一种特定类型的Token,任何人都可以使用Bearer Token来访问资源,因此必须确保在传输过程中不被泄露。Bearer Token通常以Base64编码形式出现在Authorization头字段中,遵循特定的语法...
测试微信公众号Token(令牌)jsp版,官网只有php,需要dom4j.jar支持
Token是一种令牌,通常由服务器生成,包含一些特定信息,如用户ID或过期时间。它用于验证客户端请求的有效性,防止非法操作。与Session不同,Token不存储在服务器端,而是由客户端保存并在每次请求时携带,降低了...
本文档主要讨论了使用《STS Simulator Ver 3.6》软件对电能仪表的STS(Secure Token System)系统进行TOKEN令牌测试的过程。STS系统在预付费电能表中应用广泛,其核心功能是确保充值过程的安全性,通过生成、验证...
总结来说,Token令牌支付技术通过在支付过程中使用唯一标识符(Token)代替真实的账户号码,显著降低了数据泄露的风险,提高了支付系统的安全性。同时,它也对参与支付流程的各个角色提出了新的要求,包括技术更新、...
**令牌桶算法**(Token Bucket Algorithm)是一种流量控制算法,在网络通信领域被广泛应用于实现服务质量(QoS)策略中的流量监管和整形功能。其核心思想是通过一个虚拟的“令牌桶”来监控和管理数据包的发送速度,以...
.NET Core 3.1 JWT(JSON Web Token)刷新令牌是一个重要的身份验证机制,它涉及到Web应用的安全性。JWT是一种轻量级的身份验证和授权机制,它允许服务端为客户端(通常是一个Web应用或API)颁发一个令牌,这个令牌...
PHP令牌Token改进版主要涉及了在PHP中生成和处理令牌的技术细节,以及如何解决在GET请求中传递令牌时出现的特殊字符问题。 首先,原版令牌存在一个问题,即加密过程会生成不可显示的字符和乱码。为了解决这一问题,...
文章链接中的"Token生成规则以及工具"可能涉及如何使用特定编程语言(如Java或Python)实现Token的生成和验证,以及如何配置和使用相关的库或框架。例如,对于JWT,可能使用了如`jjwt`(Java JWT)这样的库来创建和...