微服务下登录检验解决方案之 JWT

JWT(八股文):一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以「JSON」对象的形式安全传递信息的方法.JWT可以使用「HMAC」算法或者是「RSA」 的公钥密钥对进行签名
总结:通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息.
优点:
  • 生产的token可以包含基本信息,比如id、用户昵称、头像等信息,避免再次查库
  • 存储在客户端,不占用服务端的内存资源
缺点:
  • token是经过base64编码,所以可以解码,因此token加密前的对象不应该包含敏感信息如用户权限,密码等
JWT格式组成「头部、负载、签名」

header+payload+signature

  1. 头部:主要是描述签名算法
  2. 负载:主要描述是加密对象的信息,如用户的id等,也可以加些规范里面的东西,如iss 签发者,exp 过期时间,sub 面向的用户
  3. 签名:主要是把前面两部分进行加密,防止别人拿到token进行base解密后篡改token
关于jwt客户端存储
  • 可以存储在cookie,localstorage和sessionStorage里面
实战之封装通用方法
  1. 首先引入依赖
<!-- JWT相关 -->
<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.7.0</version>
</dependency>
  1. 生产token方法
public static String geneJsonWebToken(User user) {

	if (user == null
	    || user.getId() == null
	    || user.getName() == null
	    || user.getHeadImg() == null) {
	  return null;
	}
	String token =
	    Jwts.builder()
	        .setSubject(SUBJECT)
	        .claim("id", user.getId())
	        .claim("name", user.getName())
	        .claim("img", user.getHeadImg())
	        // 设置发行时间
	        .setIssuedAt(new Date())
	        // 设置过期时间
	        .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
	        // 设置加密算法
	        .signWith(SignatureAlgorithm.HS256, APPSECRET)
	        .compact();
	return token;
}
  1. 开发检验token方法
public static Claims checkJWT(String token) {
    try {
      final Claims claims = Jwts.parser().setSigningKey(APPSECRET).parseClaimsJws(token).getBody();
      return claims;
    } catch (Exception e) {

    }
    return null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的Terry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值