JSON Web Token 基于JSON对象为载体,安全的传输信息,用于完成授权认证。

JWT分为三部分

  • Header

    1
    2
    3
    4
    {
    'typ': 'JWT',
    'alg': 'HS256'
    }
  • Payload(载荷,有效信息)

  • Signature(签名)

此处展示一个模板
导入jtw

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--jwt依赖 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>3.0.0-M4</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>3.0.0-M4</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.zfxt.sjv.util;

import io.jsonwebtoken.*;

import java.util.Date;

/**
* @author:zfx-t
* @version:1.0
*/
public class JwtUtil {
//设置超时时间
private static long time = 1000 * 60 * 24;
//设置密钥
private static String signature = "zfx-t";

public static String encrypt(){
JwtBuilder jwtBuilder = Jwts.builder();
String token = jwtBuilder
//header
.setHeaderParam("typ","JWT")
.setHeaderParam("alg","HS256")
//payload
.claim("username","admin")
.claim("password","admin")
.setExpiration(new Date(System.currentTimeMillis()+time))
//signature
.signWith(SignatureAlgorithm.HS256,signature)
.compact();
return token;
}
public void decrypt(){
String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwic3ViIjoiSldULXRlc3QiLCJleHAiOjE2ODE4NzU3ODYsImp0aSI6IjkyNDY3N2EwLTBmNDEtNGEwMi04NWY1LTVmMGMxYTY5Nzg2MyJ9.BsHrHcWcHCoWtJVdAuybeAEG1FSUpx1aUDApnEQfAkA";
JwtParser jwtParser = Jwts.parser();
Jws<Claims> claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);
Claims claims = claimsJws.getBody();
System.out.println(claims.get("username"));
//获取id
System.out.println(claims.getId());
//获取主题
System.out.println(claims.getSubject());
//获取超时日期
System.out.println(claims.getExpiration());

}
}