基本使用
JSON Web token简称JWT, 使用 JWTS 的应用程序不再需要保存有关其用户的 cookie 或其他session数据。此特性便于可伸缩性, 同时保证应用程序的安全
格式:
- JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为:A.B.C
- A由JWT头部信息header加密得到
- B由JWT用到的身份验证信息json数据加密得到
- C由A和B加密得到,是校验部分
依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
package com.example;
import io.jsonwebtoken.*;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class ApplicationTests {
@Test
void testCreateToken() {
//生成token
//1. 数据准备
Map map = new HashMap();
map.put("id","1");
map.put("mobile","18081037301");
//2. 使用JWT的工具类生成token
long now = System.currentTimeMillis();
String token = Jwts.builder()
.signWith(SignatureAlgorithm.HS512, "itcast") //指定加密算法
.setClaims(map) //写入数据
.setExpiration(new Date(now + 50000)) //失效时间
.compact();
System.out.println(token);
}
@Test
public void testParseToken(){
//解析token
String token = "eyJhbGciOiJIUzUxMiJ9.eyJ"+
"tb2JpbGUiOiIxODA4MTAzNzMwMSIsImlkIjoiMSIsI"+
" mV4cCI6MTY1NTMwMTg3MX0.FEuh2Oit2nET0v4hhmV-q"+
"aYE9rxpRCk3Sskw4az66zHHjd_KCORqLPfTqFPTli7rG_9"+
"CBIHsKXOZ0I3_UEDEKg";
try {
Claims claims = Jwts.parser()
.setSigningKey("itcast")
.parseClaimsJws(token)
.getBody();
Object id = claims.get("id");
Object mobile = claims.get("mobile");
System.out.println(id+"--"+mobile);
}catch (ExpiredJwtException e){
System.out.println("token已过期");
}catch (SignatureException e){
System.out.println("token不合法");
}
}
}