Restful API 状态管理:JWT

Restful API

Restful讲究一个无状态的特性(stateless),这就不能把一些例如登陆后的认证信息写进cookie的传统方式,目前探索的是采用token的方式来进行权限的识别。

JWT

JWT 是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;
jwt Token 是一串base64之后的代码 具体分为三部分:

Header      //jwt 加密算法
Payload     // JWT 主要的信息存储部分,其中包含了许多种的声明(claims) Claims 的实体一般包含用户和一些元数据
Signature   // 用来验证发送者的 JWT 的同时也能确保在期间不被篡改

java 使用jwt

好多开源的jwt组件,这里我选择jjwt jjwt开源github地址

/**
     * 创建jwt
     * 
     * @param id
     * @param subject
     * @param ttlMillis
     * @return
     * @throws Exception
     */
    public String createJWT(String subject) throws Exception
    {
        Date now = new Date(System.currentTimeMillis());
        JwtBuilder builder = Jwts.builder().setHeaderParam("typ", "JWT").setIssuedAt(now).setSubject(subject)
                .signWith(SignatureAlgorithm.HS512, jwtPropertie.getKey());
        if (jwtPropertie.getExpire() >= 0)
        {
            long expMillis = now.getTime() + jwtPropertie.getExpire();
            Date exp = new Date(expMillis);
            builder.setExpiration(exp);
        }
        return builder.compact();
    }

    /**
     * 解密jwt_token
     * 
     * @param jwt_token
     * @return
     * @throws Exception
     */
    public Claims parseJWT(String jwt_token) throws Exception
    {
        Claims claims = Jwts.parser().setSigningKey(jwtPropertie.getKey()).parseClaimsJws(jwt_token).getBody();
        return claims;
    }

猜你喜欢

转载自blog.csdn.net/zl_1079167478/article/details/79609957