Jwt生成token

Jwt介绍

  • JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。
  • JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。
  • JWT最重要的作用就是对 token信息的防伪作用。

JWT的原理

  • 一个JWT由三个部分组成:公共部分、私有部分、签名部分。最后由这三者组合进行base64编码得到JWT。
  1. 公共部分:主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。Key=ATGUIGU
  2. 私有部分:用户自定义的内容,根据实际需要真正要封装的信息。userInfo{用户的Id,用户的昵称nickName}
  3. 签名部分:SaltiP: 当前服务器的Ip地址!{linux 中配置代理服务器的ip};主要用户对JWT生成字符串的时候,进行加密{盐值}

最终组成 key+salt+userInfo token!

base64编码,并不是加密,只是把明文信息变成了不可见的字符串。但是其实只要用一些工具就可以把base64编码解成明文,所以不要在JWT中放入涉及私密的信息。

public class JwtHelper {
    // 过期时间
    private static long tokenExpiration = 24 * 60 * 60 * 1000; 
    // 签名秘钥
    private static String tokenSignKey = "123456"; 

    // 根据参数生成token
    public static String createToken(Long userId, String userName) {
        String token = Jwts.builder()
            	// .header() // 头信息
            	// 公有部分
                .setSubject("YYGH-USER") // 设置主题 
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration)) // 设置过期时间 当前时间+过期时间
                // 私有部分
                .claim("userId", userId) // 主题信息 
                .claim("userName", userName)
                // 签名部分
                .signWith(SignatureAlgorithm.HS512, tokenSignKey) // 设置签名
                .compressWith(CompressionCodecs.GZIP)
                .compact(); // 拼接字符串
        return token;
    }

    // 根据token字符串得到用户id
    public static Long getUserId(String token) {
        if (StringUtils.isEmpty(token)) return null;
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        Integer userId = (Integer) claims.get("userId");
        return userId.longValue();
    }

    // 根据token得到用户名称
    public static String getUserName(String token) {
        if (StringUtils.isEmpty(token)) return "";
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String) claims.get("userName");
    }

    public static void main(String[] args) {
        String token = JwtHelper.createToken(1L, "55");
        System.out.println(token);
        System.out.println(JwtHelper.getUserId(token));
        System.out.println(JwtHelper.getUserName(token));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明仔爱编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值