JWT/JJWT JSON WEB TOKEN

JJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

git源码:https://github.com/jwtk/jjwt

JWT包含三个部分,分别是头部、载荷与签名。其中头部包含的是加密的一些信息,签名是根据前面两部分生成的。最主要的就是咱们存放信息的载荷部分了。

maven:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.7.0</version>
</dependency>

案例:

package com.github.jwt.test;

import java.security.Key;


import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.MalformedJwtException;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.SignatureException;
import io.jsonwebtoken.impl.crypto.MacProvider;

public class JwtTest {

    public static void main(String[] args) {
        Key key = MacProvider.generateKey();//这里是加密解密的key。

        String compactJws = Jwts.builder()//返回的字符串便是我们的jwt串了
          .setSubject("Joe")//设置主题
          .signWith(SignatureAlgorithm.HS512, key)//设置算法(必须)
          .compact();//这个是全部设置完成后拼成jwt串的方法
        
        System.out.println(compactJws);
        
        // 获取jwt串里的subject参数,获取body以后可以获取到你存入的信息
        //System.out.println(Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws).getBody().getSubject()); 
        /****
         * 其中parseClaimsJws验证jwt字符串失败可能会抛出异常,这时咱们应该捕获这个异常
         */
        try {

            Jws<Claims> parseClaimsJws = Jwts.parser().setSigningKey(key).parseClaimsJws(compactJws);//compactJws为jwt字符串
            Claims body = parseClaimsJws.getBody();//得到body后我们可以从body中获取我们需要的信息
            //比如 获取主题,当然,这是我们在生成jwt字符串的时候就已经存进来的
            String subject = body.getSubject();

            System.out.println(subject);
            //OK, we can trust this JWT

        } catch (SignatureException | MalformedJwtException e) {
                    // TODO: handle exception
                    // don't trust the JWT!
                    // jwt 解析错误
                } catch (ExpiredJwtException e) {                  
                    // jwt 已经过期,在设置jwt的时候如果设置了过期时间,这里会自动判断jwt是否已经过期,如果过期则会抛出这个异常,我们可以抓住这个异常并作相关处理。
                }

    }

}

 JWT的Java使用 (JJWT)

Json web token 详解

posted on 2018-06-14 11:42  让代码飞  阅读(440)  评论(0)    收藏  举报

导航

一款免费在线思维导图工具推荐:https://www.processon.com/i/593e9a29e4b0898669edaf7f?full_name=python