|
|
|
/**
|
|
|
|
* Copyright (c) 2018 人人开源 All rights reserved.
|
|
|
|
* <p>
|
|
|
|
* https://www.renren.io
|
|
|
|
* <p>
|
|
|
|
* 版权所有,侵权必究!
|
|
|
|
*/
|
|
|
|
|
|
|
|
package com.epmet.jwt;
|
|
|
|
|
|
|
|
import io.jsonwebtoken.Claims;
|
|
|
|
import io.jsonwebtoken.Jwts;
|
|
|
|
import io.jsonwebtoken.SignatureAlgorithm;
|
|
|
|
import org.joda.time.DateTime;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import java.util.Date;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Jwt工具类
|
|
|
|
*
|
|
|
|
* @author Mark sunlightcs@gmail.com
|
|
|
|
* @since 1.0.0
|
|
|
|
*/
|
|
|
|
@Component
|
|
|
|
public class JwtTokenUtils {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(JwtTokenUtils.class);
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
private JwtTokenProperties jwtProperties;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 生成jwt token 弃用
|
|
|
|
*/
|
|
|
|
@Deprecated
|
|
|
|
public String generateToken(String userId) {
|
|
|
|
return Jwts.builder()
|
|
|
|
.setHeaderParam("typ", "JWT")
|
|
|
|
.setSubject(userId)
|
|
|
|
.setIssuedAt(new Date())
|
|
|
|
.setExpiration(DateTime.now().plusSeconds(jwtProperties.getExpire()).toDate())
|
|
|
|
.signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret())
|
|
|
|
.compact();
|
|
|
|
}
|
|
|
|
|
|
|
|
public Claims getClaimByToken(String token) {
|
|
|
|
try {
|
|
|
|
return Jwts.parser()
|
|
|
|
.setSigningKey(jwtProperties.getSecret())
|
|
|
|
.parseClaimsJws(token)
|
|
|
|
.getBody();
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.debug("validate is token error, token = " + token, e);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Claims getClaimByToken(String token, String secret) {
|
|
|
|
try {
|
|
|
|
return Jwts.parser()
|
|
|
|
.setSigningKey(secret)
|
|
|
|
.parseClaimsJws(token)
|
|
|
|
.getBody();
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.debug("validate is token error, token = " + token, e);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @return java.util.Date
|
|
|
|
* @param token
|
|
|
|
* @Author yinzuomei
|
|
|
|
* @Description 获取token的有效期截止时间
|
|
|
|
* @Date 2020/3/18 22:17
|
|
|
|
**/
|
|
|
|
public Date getExpiration(String token){
|
|
|
|
try {
|
|
|
|
return Jwts.parser()
|
|
|
|
.setSigningKey(jwtProperties.getSecret())
|
|
|
|
.parseClaimsJws(token)
|
|
|
|
.getBody().getExpiration();
|
|
|
|
} catch (Exception e) {
|
|
|
|
logger.debug("validate is token error, token = " + token, e);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param map
|
|
|
|
* @return java.lang.String
|
|
|
|
* @Author yinzuomei
|
|
|
|
* @Description 根据app+client+userId生成token
|
|
|
|
* @Date 2020/3/18 22:29
|
|
|
|
**/
|
|
|
|
public String createToken(Map<String, Object> map) {
|
|
|
|
return Jwts.builder()
|
|
|
|
.setHeaderParam("typ", "JWT")
|
|
|
|
.setClaims(map)
|
|
|
|
.setIssuedAt(new Date())
|
|
|
|
.setExpiration(DateTime.now().plusSeconds(jwtProperties.getExpire()).toDate())
|
|
|
|
.signWith(SignatureAlgorithm.HS512, jwtProperties.getSecret())
|
|
|
|
.compact();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* token是否过期
|
|
|
|
*
|
|
|
|
* @return true:过期
|
|
|
|
*/
|
|
|
|
public boolean isTokenExpired(Date expiration) {
|
|
|
|
return expiration == null || expiration.before(new Date());
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
Map<String, Object> map=new HashMap<>();
|
|
|
|
map.put("app","gov");
|
|
|
|
map.put("client","wxmp");
|
|
|
|
map.put("userId","100526ABC");
|
|
|
|
String tokenStr=Jwts.builder()
|
|
|
|
.setHeaderParam("typ", "JWT")
|
|
|
|
.setClaims(map)
|
|
|
|
.setIssuedAt(new Date())
|
|
|
|
.setExpiration(DateTime.now().plusSeconds(604800).toDate())
|
|
|
|
.signWith(SignatureAlgorithm.HS512, "7016867071f0ebf1c46f123eaaf4b9d6[elink.epmet]")
|
|
|
|
.compact();
|
|
|
|
System.out.println(tokenStr);
|
|
|
|
Claims claims= Jwts.parser()
|
|
|
|
.setSigningKey("7016867071f0ebf1c46f123eaaf4b9d6[elink.epmet]")
|
|
|
|
.parseClaimsJws(tokenStr)
|
|
|
|
.getBody();
|
|
|
|
System.out.println("app="+ claims.get("app"));
|
|
|
|
System.out.println("client="+ claims.get("client"));
|
|
|
|
System.out.println("userId="+ claims.get("userId"));
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|