/** * Copyright (c) 2018 人人开源 All rights reserved. *

* https://www.renren.io *

* 版权所有,侵权必究! */ 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 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 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")); } }