JWT签发与解析
阅读原文时间:2023年07月09日阅读:1

需要的依赖:

com.alibaba fastjson 1.2.75

io.jsonwebtoken jjwt 0.9.1

工具类:

/**
* JWT 工具类
* 解决token签发 与 token认证的问题。
*/
public class JWTUtil {

/\*\*  
 \* token签发的有效期  
 \*/  
public static final int TOKEN\_EXPIRE=1000\*60\*30;  

/\*\*  
 \* token加密算法的盐  
 \*/  
public static final String TOKEN\_KEY="xxxxx";  

/\*\*  
 \* 生成一个token  
 \*/  
public static String newToken(UserVO userVO){  
    //产生token  
    String token= Jwts.builder()  
            .setSubject(userVO.getNickname())  
            //签发时间  
            .setIssuedAt(new Date())  
            //过期时间  
            .setExpiration(new Date(System.currentTimeMillis()+TOKEN\_EXPIRE))  
            //携带的数据  
            .claim("user", JSONObject.toJSONString(userVO))  
            //签名 + 盐  
            .signWith(SignatureAlgorithm.HS256,TOKEN\_KEY.getBytes())  
            .compact();  
    return token;  
}  

/\*\*  
 \* 解析token  
 \*/  
public static UserVO checkToken(String token){  
    Claims body=null;  
    try {  
        body = Jwts.parser().setSigningKey(TOKEN\_KEY.getBytes())  
                .parseClaimsJws(token).getBody();  
    }catch(Exception e){  
        //解析出现问题,返回null  
        return null;  
    }  
    Object userJSONString=body.get("user");  
    UserVO user=JSONObject.parseObject((String)userJSONString,UserVO.class);  
    return user;  
}  

// public static void main(String[] args) {
// UserVO userVO=new UserVO();
// userVO.setId(1L);
// userVO.setUsername("zhangsan");
// String token = newToken(userVO);
// userVO=checkToken(token);
// System.out.println(userVO);
// }
}