跳至主要內容
jwt工具类

/**
 * jwt工具类
 */
public class JwtHelper {
    //token有效时间
    private static long tokenExpiration = 365 * 24 * 60 * 60 * 1000;
    //token签名加密的密钥
    private static String tokenSignKey = "123456";

    /**
     * 生成token
     * @param userId
     * @param username
     * @return
     */
    public static String createToken(Long userId, String username) {
        String token = Jwts.builder()
                //分类
                .setSubject("AUTH-USER")
                //设置token有效时长
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
                //设置主体部分(有效载荷)
                .claim("userId", userId)
                .claim("username", username)
                //签名部分
                //对密钥进行加密处理
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                //对生成的token字符串进行压缩
                .compressWith(CompressionCodecs.GZIP)
                .compact();
        return token;
    }

    /**
     * 解析请求头里的token字符串的信息获取用户userId
     * @param token
     * @return
     */
    public static Long getUserId(String token) {
        try {
            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();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 解析请求头里的token字符串的信息获取用户名userName
     * @param token
     * @return
     */
    public static String getUsername(String token) {
        try {
            if (StringUtils.isEmpty(token)) return "";

            Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
            Claims claims = claimsJws.getBody();
            return (String) claims.get("username");
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}


sixkey小于 1 分钟后端JWT实战
JWT快速入门

JWT介绍

2.1、JWT介绍

JWT是JSON Web Token的缩写,即JSON Web令牌,是一种自包含令牌。 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。

JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。

JWT最重要的作用就是对 token信息的防伪作用。

2.2、JWT令牌的组成

一个JWT由三个部分组成:JWT头、有效载荷、签名哈希 最后由这三者组合进行base64url编码得到JWT


sixkey大约 4 分钟后端JWT实战
SpringBoot集成JWT

前言

JSON Web Token(JSON Web令牌)

​ 是一个开放标准(rfc7519),它定义了一种紧凑的、自包含的方式,用于在各方之间以JSON对象安全地传输信息。此信息可以验证和信 任,因为它是数字签名的。jwt可以使用秘密〈使用HNAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。

​ 通过JSON形式作为Web应用中的令牌,用于在各方之间安全地将信息作为JSON对象传输。在数据传输过程中还可以完成数据加密、 签名等相关处理。

JWT作用:

​ 授权:一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。它的开销很小并且可以在不同的 域中使用。如:单点登录。 ​ 信息交换:在各方之间安全地传输信息。JWT可进行签名(如使用公钥/私钥对),因此可确保发件人。由于签名是使用标头和有效负载 计算的,因此还可验证内容是否被篡改。


sixkey大约 8 分钟后端SpringBootJWT实战