JWT使用

什么是JWT?

JSON Web Token,通过数字签名的方式,以ISON 对象为载体,在不同的服务终端之间安全的传输信息。

JWT有什么用?

JWT 最常见的场景就是授权认证,一旦用户登录,后续每个请求都将包含JWT,系统在每次处理用户请求的之前,都要先进行JWT安全校验,通过之后再进行处理

JWT的组成

JWT由3部分组成,用.拼接

eyJhbGcioiJIUzI1NiIsInR5cCI6IkpxVCJ9.eyJ1c2VybmFtZSI6IlRvbsIsInJvbGUioijhzGlpbiIsInN1YiI6ImFkbwluLXRIc3QiLCJleHAiojE2MjMyMjM2NzUsImpOaSI6ImQ2MTIjzjcxLWI5ZmUtNGMwNy04MZQwLTViowVizmMyNjExNyJ9.FOS9Y7rYNdc2A0idnsPrgg2XTYePuOyGz598h2gtabE

 这三部分分别是:

Header:

'typ':'JwT',
alg':'HS256'

Payload:  

"sub": 1234567890
"name":'john'
admin":true

Signature:  

var encodedstring = base64UrlEncode(header) + base64UrTEncode(payload); 

添加依赖:  

 
io.jsonwebtoken
jjwt
0.9.1

编写测试  

// 定义过期时间
    private long expire = 1000*60*60*24 ;// 毫秒
    // 定义加密的密钥
    private String secret = "nice.to.meet.you";
    @Test

    // 1. 生成token
    void createToken(){

        JwtBuilder builder = Jwts.builder();

        String Token = builder
                //header
                .setHeaderParam("typ","JWT")
                .setHeaderParam("alg", "HS256")
                //payload
                .claim("username", "tom")
                .claim("role", "admin")
                .setIssuedAt(new Date()) // 设置发布日期
                .setExpiration(new Date(System.currentTimeMillis()+expire))// 设置过期时间
                .setId(UUID.randomUUID().toString())
                //signature  加密的密钥
                .signWith(SignatureAlgorithm.HS256, secret)// SignatureAlgorithm.HS256 :选择的加密算法, 也可以选择其他的加密算法
                .compact();
        System.out.println(Token);
    }
 

 

查看输出结果  

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTY4MDUxNDM1NywiZXhwIjoxNjgwNjAwNzU3LCJqdGkiOiJiODVmY2FhMy1kZjNkLTQ3M2MtYWFjOC1iNmZhZjcyN2JmZTUifQ.IIxMqwDQ6Wd7ktntkrAFsf86bHjx9Lqu2RFie57a4qM 

对生成的结果进行解密  

@Test
    void parse(){
        String Token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTY4MDUxNDM1NywiZXhwIjoxNjgwNjAwNzU3LCJqdGkiOiJiODVmY2FhMy1kZjNkLTQ3M2MtYWFjOC1iNmZhZjcyN2JmZTUifQ.IIxMqwDQ6Wd7ktntkrAFsf86bHjx9Lqu2RFie57a4qM";
        JwtParser jwtParser = Jwts.parser();
        Jws claimsJws = jwtParser.setSigningKey(secret).parseClaimsJws(Token);
        Claims claims = claimsJws.getBody();
        System.out.println(claims.get("username"));
        System.out.println(claims.get("role"));
        System.out.println(claims.getId());
        System.out.println(claims.getExpiration());

    }

 

输出结果  

JWT使用_第1张图片 

 

你可能感兴趣的:(Java,java,数据库,开发语言)