- 浏览: 270974 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (183)
- oracle (4)
- informix (1)
- web开发 (6)
- java (49)
- hibernate (1)
- hadoop (1)
- spring (23)
- 非技术 (8)
- ibatis2 (5)
- Linux (6)
- tomcat (14)
- nginx (7)
- dubbo (3)
- myibatis (7)
- webservice 开发 (2)
- mysql (2)
- svn (2)
- redis (7)
- 分布式技术 (17)
- zookeeper (2)
- kafka (2)
- velocity (1)
- maven (7)
- js (1)
- freemarker (1)
- Thymeleaf (3)
- 代码审计 (1)
- ibatis3 (1)
- rabbitmq (1)
最新评论
<jjwt.version>0.6.0</jjwt.version>
<fastjson.version>1.2.16</fastjson.version>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
代码:
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = -8036219797322639507L;
private String account;
private String pwd;
private Long userId;
private Long roleId;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
package io.gjp.util;
import java.util.Date;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
import io.gjp.User;
import io.gjp.config.Constant;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Header;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
@Component
public class JwtUtil {
@Value("${spring.profiles.active}")
private String profiles;
/**
* 由字符串生成加密key
*
* @return
*/
public SecretKey generalKey() {
String stringKey = profiles + Constant.JWT_SECRET;
byte[] encodedKey = Base64.decodeBase64(stringKey);
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}
/**
* 创建jwt
*
* @param id
* @param subject
* @param ttlMillis
* @return
* @throws Exception
*/
public String createJWT(String id, String subject, long ttlMillis) throws Exception {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
SecretKey key = generalKey();
JwtBuilder builder = Jwts.builder().setId(id).setIssuedAt(now).setSubject(subject).signWith(signatureAlgorithm,
key);
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
/**
* 解密jwt
*
* @param jwt
* @return
* @throws Exception
*/
public Claims parseJWT(String jwt) throws Exception {
SecretKey key = generalKey();
Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody();
return claims;
}
/**
* 生成subject信息
*
* @param user
* @return
*/
public static String generalSubject(User user) {
JSONObject jo = new JSONObject();
jo.put("userId", user.getUserId());
jo.put("roleId", user.getRoleId());
return jo.toJSONString();
}
/**
* 创建jwt
*
* @param id
* @param subject
* @param ttlMillis
* @return
* @throws Exception
*/
public String createJWT2(String id, String subject, long ttlMillis) throws Exception {
SecretKey key = getkey2();
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
JwtBuilder builder = Jwts.builder()
.setId(id).setIssuedAt(now).setSubject(subject).signWith(signatureAlgorithm,
key);
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
/**
* 解密jwt
*
* @param jwt
* @return
* @throws Exception
*/
public Claims parseJWT2(String jwt) throws Exception {
SecretKey key = getkey2();
Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody();
return claims;
}
public SecretKey getkey2() {
String stringKey = "test" + Constant.JWT_SECRET;
byte[] encodedKey = Base64.decodeBase64(stringKey);
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}
public static void main(String[] args) {
User user = new User();
user.setUserId(993456L);
user.setRoleId(12L);
user.setAccount("account");
String subject = JwtUtil.generalSubject(user);
JwtUtil jwt = new JwtUtil();
try {
String token = jwt.createJWT2(Constant.JWT_ID, subject, Constant.JWT_TTL);
System.out.println("token:"+token);
// token="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJqd3QiLCJpYXQiOjE0OTY3MzU2MjMsInN1YiI6IntcInVzZXJJZFwiOjEyMzQ1NixcInJvbGVJZFwiOjEyfSIsImV4cCI6MTQ5NjczOTIyM30.Hoxvzo7iexB4KZspVrVIEC1rhUKiwFaPkEveT2OEudU";
System.out.println("解析token:");
Claims claims = jwt.parseJWT2(token);
String json = claims.getSubject();
System.out.println("json User:"+json);
System.out.println("id:"+claims.getId());
System.out.println("Expiration:"+claims.getExpiration());
User user2 = JSONObject.parseObject(json, User.class);
System.out.println("userId"+user2.getUserId());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
token:eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJqd3QiLCJpYXQiOjE0OTY3Mzg4MDQsInN1YiI6IntcInVzZXJJZFwiOjk5MzQ1NixcInJvbGVJZFwiOjEyfSIsImV4cCI6MTQ5Njc0MjQwNH0.SohDpY2cyIY_vW0jMOMl_WoqoOfuXO75oyc6mEFYEdE
解析token:
json User:{"userId":993456,"roleId":12}
id:jwt
Expiration:Tue Jun 06 17:46:44 CST 2017
userId993456
<fastjson.version>1.2.16</fastjson.version>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jjwt.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
代码:
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = -8036219797322639507L;
private String account;
private String pwd;
private Long userId;
private Long roleId;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
package io.gjp.util;
import java.util.Date;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
import io.gjp.User;
import io.gjp.config.Constant;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Header;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
@Component
public class JwtUtil {
@Value("${spring.profiles.active}")
private String profiles;
/**
* 由字符串生成加密key
*
* @return
*/
public SecretKey generalKey() {
String stringKey = profiles + Constant.JWT_SECRET;
byte[] encodedKey = Base64.decodeBase64(stringKey);
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}
/**
* 创建jwt
*
* @param id
* @param subject
* @param ttlMillis
* @return
* @throws Exception
*/
public String createJWT(String id, String subject, long ttlMillis) throws Exception {
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
SecretKey key = generalKey();
JwtBuilder builder = Jwts.builder().setId(id).setIssuedAt(now).setSubject(subject).signWith(signatureAlgorithm,
key);
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
/**
* 解密jwt
*
* @param jwt
* @return
* @throws Exception
*/
public Claims parseJWT(String jwt) throws Exception {
SecretKey key = generalKey();
Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody();
return claims;
}
/**
* 生成subject信息
*
* @param user
* @return
*/
public static String generalSubject(User user) {
JSONObject jo = new JSONObject();
jo.put("userId", user.getUserId());
jo.put("roleId", user.getRoleId());
return jo.toJSONString();
}
/**
* 创建jwt
*
* @param id
* @param subject
* @param ttlMillis
* @return
* @throws Exception
*/
public String createJWT2(String id, String subject, long ttlMillis) throws Exception {
SecretKey key = getkey2();
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
JwtBuilder builder = Jwts.builder()
.setId(id).setIssuedAt(now).setSubject(subject).signWith(signatureAlgorithm,
key);
if (ttlMillis >= 0) {
long expMillis = nowMillis + ttlMillis;
Date exp = new Date(expMillis);
builder.setExpiration(exp);
}
return builder.compact();
}
/**
* 解密jwt
*
* @param jwt
* @return
* @throws Exception
*/
public Claims parseJWT2(String jwt) throws Exception {
SecretKey key = getkey2();
Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody();
return claims;
}
public SecretKey getkey2() {
String stringKey = "test" + Constant.JWT_SECRET;
byte[] encodedKey = Base64.decodeBase64(stringKey);
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
return key;
}
public static void main(String[] args) {
User user = new User();
user.setUserId(993456L);
user.setRoleId(12L);
user.setAccount("account");
String subject = JwtUtil.generalSubject(user);
JwtUtil jwt = new JwtUtil();
try {
String token = jwt.createJWT2(Constant.JWT_ID, subject, Constant.JWT_TTL);
System.out.println("token:"+token);
// token="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJqd3QiLCJpYXQiOjE0OTY3MzU2MjMsInN1YiI6IntcInVzZXJJZFwiOjEyMzQ1NixcInJvbGVJZFwiOjEyfSIsImV4cCI6MTQ5NjczOTIyM30.Hoxvzo7iexB4KZspVrVIEC1rhUKiwFaPkEveT2OEudU";
System.out.println("解析token:");
Claims claims = jwt.parseJWT2(token);
String json = claims.getSubject();
System.out.println("json User:"+json);
System.out.println("id:"+claims.getId());
System.out.println("Expiration:"+claims.getExpiration());
User user2 = JSONObject.parseObject(json, User.class);
System.out.println("userId"+user2.getUserId());
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
token:eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiJqd3QiLCJpYXQiOjE0OTY3Mzg4MDQsInN1YiI6IntcInVzZXJJZFwiOjk5MzQ1NixcInJvbGVJZFwiOjEyfSIsImV4cCI6MTQ5Njc0MjQwNH0.SohDpY2cyIY_vW0jMOMl_WoqoOfuXO75oyc6mEFYEdE
解析token:
json User:{"userId":993456,"roleId":12}
id:jwt
Expiration:Tue Jun 06 17:46:44 CST 2017
userId993456
发表评论
-
aop实现通用缓存,并且防止缓存击穿
2019-09-16 15:10 829实现代码在附件中 1.自定义注解文件 package sgn ... -
统计多线程下程序运行总时间
2019-05-15 16:55 1120package com.gpcsoft.hct.epp.egp ... -
通过模板的方式解决缓存被击穿的问题
2019-04-15 11:35 4131. package gjp.tools; import c ... -
Rsa 加解密算法
2019-03-18 10:27 376package gjp.tools; /** * @Aut ... -
httpClient 使用http协议上传文件
2018-10-09 15:58 3107<dependency> <grou ... -
httpClient 使用HTTPS 协议上传文件
2018-09-30 14:50 2445<dependency> <group ... -
防止 XML外部实体注入
2018-09-18 17:03 7378方式一 DocumentBuilderFactory dbf ... -
httpClient 的https 调用
2018-06-20 21:07 827package com.gpcsoft.xjmodule.ut ... -
猎狗方式调用接口
2017-09-27 08:36 651package boce.hit.dog; import j ... -
netty 实现长连接
2017-08-24 09:52 13131.server 端信息 package com.boce.n ... -
netty 开发入门
2017-08-22 14:30 6741.准备jar <properties> & ... -
nio 编程实例
2017-08-16 14:15 6031.编写服务端 package com.boce.nio.s ... -
实现Java高并发隔离 模拟
2017-05-08 10:34 517package org; import java.util. ... -
java 命令
2017-04-20 16:42 420java 命令: java -Djava.ext.dirs ... -
nio 通讯
2017-04-01 15:41 527nio 服务端: package nio.study.se ... -
HashMap 便利时不按照输入顺序输出
2017-03-27 17:11 1959使用:hashmap传输数据时,便利map中的数据时,发现 ... -
使用Lock,对不同商品加锁
2017-03-13 10:52 1251package com.boce.gbkutf; ... -
json 转泛型的集合类
2017-03-07 16:21 1218package com.boce.test; ... -
httpclient4.5 使用post方式提交请求
2017-03-03 11:00 2026private RequestConfig req ... -
GBK与UTF-8 字符串互转
2017-02-24 11:17 2219package com.cloud.tools; i ...
相关推荐
在C#中实现JWT Token的生成和验证,主要涉及到以下几个关键知识点: 1. **JWT结构**:每个JWT由三个部分组成,用`.`分隔,分别是Header(头部)、Payload(载荷)和Signature(签名)。头部通常包含令牌类型(`typ`...
这个"JWT Token生成及验证(源码)"的压缩包文件可能包含了一个示例项目,用于演示如何生成和验证JWT令牌。让我们深入探讨JWT的工作原理以及相关的关键知识点。 1. JWT结构: JWT令牌由三部分组成,用点(.)分隔:...
本实战验证将探讨如何在Java环境中使用JWT生成和验证Token。 1. **JWT 结构** JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部和载荷是JSON对象,经过Base64编码,而签名则用于验证...
例如,在Web应用中,用户登录成功后,服务器端会生成一个包含用户信息和过期时间的JWT Token,并将其返回给客户端。客户端随后可以在请求中携带这个Token,以证明用户的身份。 此外,通过在Payload中使用私有声明,...
在上面的示例代码中,我们定义了一个JwtTokenUtil类,其中包含了生成token和校验token的方法。 生成token的过程主要包括以下步骤: 1. 创建一个Map对象,用于存储token的header信息。 2. 使用JWT库的create方法...
JWT 生成 Token 及验证 JWT(JSON Web Token)是一种用于双方之间传递安全信息的简洁、URL 安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的、自包含的方法用于通信双方之间以 Json ...
Java中使用JWT生成Token进行接口鉴权实现方法 Java中使用JWT生成Token进行接口鉴权实现方法是当前最流行的鉴权方式之一。通过本文,读者可以了解到使用JWT生成Token进行接口鉴权的详细实现方法。 什么是JWT? JWT...
SpringSecurity-JWT-VERSION2(AccessToken和RefreshToken) version1太复杂,无法优化。accessToken refreshToken流安全登录处理流程详细说明转到博客文章JWT异常处理安全异常处理(AuthenticationEntryPoint,...
var jwtToken = handler.ReadJwtToken(encodedJwt); ``` 2. 配置Token验证参数: ```csharp var validationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true,...
1. **获取Token**:动态库提供了生成JWT Token的方法。生成Token时,通常需要设置一个密钥(secret key)和一些载荷(payload),载荷可以包含用户的ID、角色等信息。通过将这些数据加密,服务器能够创建一个安全的...
Java Web Token(JWT)是一种轻量级的身份验证和授权机制,广泛应用于移动应用与服务器之间的交互。JWT允许在用户身份验证后将权限信息安全地编码为一个字符串,并在客户端和服务端之间传递,无需存储session信息在...
7. 示例代码:创建一个自定义JWT处理器,继承自`JwtSecurityTokenHandler`,并重写`CanReadToken`和`ValidateToken`方法,以支持刷新令牌的验证和生成。在Startup.cs中配置认证中间件,并设置相关的JWT选项,如...
在实现中,我们使用了JWT来生成Token,并使用Redis来存储Token和refToken。在登录方法中,我们使用JwtUtil.sign()方法来生成Token,并将其存储到Redis中。在拦截器中,我们使用JwtUtil.verify()方法来验证Token的...
使用django-rest-framework-jwt在django中创建和认证token,用于在移动端来认证和用户,本文通过自己编写模型来实现根据用户来生成token,在请求头中添加Authentication来进行认证,保持登录状态。可以直接使用,...
JSON Web Token (JWT) 是一种安全的身份验证和信息传输机制,尤其在前后端分离的应用架构中广泛应用。JWT 用于在不同系统之间安全地传递信息,尤其是用户认证信息,且无需在每次请求时与服务器交互。它由三部分组成...
- 使用`JwtSecurityTokenHandler`类,结合`ClaimsPrincipal`对象和密钥,可以生成JWT Token。Claims代表用户的属性,如用户ID、角色等。 - 生成的Token应安全地发送给客户端,通常在登录成功后返回。 4. **验证...