JWT签发与解析
需要的依赖:
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency>
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency>
工具类:
/**
* 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);
// }
}