`

jwt 生成token 和解析token

    博客分类:
  • java
阅读更多
<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

分享到:
评论

相关推荐

    JWT Token生成及验证

    在C#中实现JWT Token的生成和验证,主要涉及到以下几个关键知识点: 1. **JWT结构**:每个JWT由三个部分组成,用`.`分隔,分别是Header(头部)、Payload(载荷)和Signature(签名)。头部通常包含令牌类型(`typ`...

    JWT Token生成及验证(源码)

    这个"JWT Token生成及验证(源码)"的压缩包文件可能包含了一个示例项目,用于演示如何生成和验证JWT令牌。让我们深入探讨JWT的工作原理以及相关的关键知识点。 1. JWT结构: JWT令牌由三部分组成,用点(.)分隔:...

    JWT 生成Token实战验证

    本实战验证将探讨如何在Java环境中使用JWT生成和验证Token。 1. **JWT 结构** JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部和载荷是JSON对象,经过Base64编码,而签名则用于验证...

    JWT 生成Token及验证

    例如,在Web应用中,用户登录成功后,服务器端会生成一个包含用户信息和过期时间的JWT Token,并将其返回给客户端。客户端随后可以在请求中携带这个Token,以证明用户的身份。 此外,通过在Payload中使用私有声明,...

    SpringBoot集成JWT生成token及校验方法过程解析

    在上面的示例代码中,我们定义了一个JwtTokenUtil类,其中包含了生成token和校验token的方法。 生成token的过程主要包括以下步骤: 1. 创建一个Map对象,用于存储token的header信息。 2. 使用JWT库的create方法...

    JWT 生成Token及验证.PDF

    JWT 生成 Token 及验证 JWT(JSON Web Token)是一种用于双方之间传递安全信息的简洁、URL 安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的、自包含的方法用于通信双方之间以 Json ...

    Java中使用JWT生成Token进行接口鉴权实现方法

    Java中使用JWT生成Token进行接口鉴权实现方法 Java中使用JWT生成Token进行接口鉴权实现方法是当前最流行的鉴权方式之一。通过本文,读者可以了解到使用JWT生成Token进行接口鉴权的详细实现方法。 什么是JWT? JWT...

    springSecurity-jwt:JWT access_token和refresh_token

    SpringSecurity-JWT-VERSION2(AccessToken和RefreshToken) version1太复杂,无法优化。accessToken refreshToken流安全登录处理流程详细说明转到博客文章JWT异常处理安全异常处理(AuthenticationEntryPoint,...

    c#生成token验证4

    var jwtToken = handler.ReadJwtToken(encodedJwt); ``` 2. 配置Token验证参数: ```csharp var validationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true,...

    JWT格式的Token动态库封装,包括获取token,验证token,获取token中保存的内容

    1. **获取Token**:动态库提供了生成JWT Token的方法。生成Token时,通常需要设置一个密钥(secret key)和一些载荷(payload),载荷可以包含用户的ID、角色等信息。通过将这些数据加密,服务器能够创建一个安全的...

    jwt_token_test.zip

    Java Web Token(JWT)是一种轻量级的身份验证和授权机制,广泛应用于移动应用与服务器之间的交互。JWT允许在用户身份验证后将权限信息安全地编码为一个字符串,并在客户端和服务端之间传递,无需存储session信息在...

    .net core 3.1 jwt刷新token

    7. 示例代码:创建一个自定义JWT处理器,继承自`JwtSecurityTokenHandler`,并重写`CanReadToken`和`ValidateToken`方法,以支持刷新令牌的验证和生成。在Startup.cs中配置认证中间件,并设置相关的JWT选项,如...

    基于springboot+jwt实现刷新token过程解析

    在实现中,我们使用了JWT来生成Token,并使用Redis来存储Token和refToken。在登录方法中,我们使用JwtUtil.sign()方法来生成Token,并将其存储到Redis中。在拦截器中,我们使用JwtUtil.verify()方法来验证Token的...

    drf_jwt_token_demo.zip

    使用django-rest-framework-jwt在django中创建和认证token,用于在移动端来认证和用户,本文通过自己编写模型来实现根据用户来生成token,在请求头中添加Authentication来进行认证,保持登录状态。可以直接使用,...

    JWT Token实现方法及步骤详解

    JSON Web Token (JWT) 是一种安全的身份验证和信息传输机制,尤其在前后端分离的应用架构中广泛应用。JWT 用于在不同系统之间安全地传递信息,尤其是用户认证信息,且无需在每次请求时与服务器交互。它由三部分组成...

    ASP.NET Core 3.1 JWT token实现与应用

    - 使用`JwtSecurityTokenHandler`类,结合`ClaimsPrincipal`对象和密钥,可以生成JWT Token。Claims代表用户的属性,如用户ID、角色等。 - 生成的Token应安全地发送给客户端,通常在登录成功后返回。 4. **验证...

Global site tag (gtag.js) - Google Analytics