【token笔 记】

LoginResponseDTO responseDTO = new LoginResponseDTO();
// 先从redis中取token
Object redisUserToken = redisTemplate.opsForHash().get(CommonConstant.TOKEN, mbrInfoDTO.getMbrId());
//如果redis中没有此token  就创建个新token
if (null == redisUserToken || "".equals(redisUserToken) || null == JwtUtils.decodeToken(String.valueOf(redisUserToken))) {
    Map<String, Object> Claims = new HashMap<>();
    mbrInfoDTO.setCpPwd("");
    //把查出来的数据装进 token中
    Claims.put("user", mbrInfoDTO);
    redisUserToken = JwtUtils.createToken(Claims, CommonConstant.TOKEN_PREFIX);
//把创建的token 装到redis
    redisTemplate.opsForHash().put(CommonConstant.TOKEN, mbrInfoDTO.getMbrId(), redisUserToken);
}
//最后返回 token
responseDTO.setToken(redisUserToken.toString());

/**   枚举

public static final String TOKEN = "token";

// token的过期时间

public static final int TOKEN_PREFIX = 1000 * 60 * 60 * 24 * 7;
public static final String KIDARI_ISSUER = "kidari_issuer";
public static final String USER_ID = "user_id";

//  token的生成工具类

public static String createToken(Map<String, Object> claims, long prefixTime) {

    // 生成了一个 JWT 令牌(未签名)
      String token = Jwts.builder()
            .setId(CommonConstant.USER_ID)
            .setIssuer(CommonConstant.KIDARI_ISSUER)
            .setIssuedAt(new Date())
            .setExpiration(new Date(System.currentTimeMillis() + prefixTime))
            .addClaims(claims)
            .signWith(getSecretKey())
            .compact();

    return token;
}

public static Claims decodeToken(String token) {
    try {
        // 令牌解码
        return Jwts.parserBuilder().setSigningKey(getSecretKey()).build().parseClaimsJws(token).getBody();
    } catch (ExpiredJwtException e) {
        log.info(token + "Token已过期");
    } catch (Exception e) {
        log.error(e.getMessage());
    }
    return null;
}
/**
 * 从配置文件中获取加密key,并构造SecretKey对象返回
 *
 * @return SecretKey
 */
public static SecretKey getSecretKey() {
    // 生成Jwt的时间
    return Keys.hmacShaKeyFor(Decoders.BASE64.decode(CommonConstant.SECRET_KEY));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值