●客户端使用用户名和密码请求登陆。
●服务端收到请求,去验证用户名和密码。
●验证成功后,服务端会签发一个Token, 再把这个Token发送给客户端。
●客户端收到Token以后可以把它存储在Cookie本地。
●客户端每次向服务端请求资源时需要携带Cookie中该Token.
●服务端收到请求盾,验证客户端携带的Token, 如果验证成功则返回数据。
jjwt使用
所需依赖
<!-- jwt的依赖 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
测试用例
装配
//自定义负载加过期时间
@Test
void testExpAndClaimToken(){
//当前时间 1 分钟后过期
long exp = System.currentTimeMillis() + 1000 * 60;
JwtBuilder builder = Jwts.builder()
.setId("123")
.setSubject("小明")
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256,SALT)
.setExpiration(new Date(exp))
.claim("name","亚索");//自定义内容
String token = builder.compact();
System.out.println(token);
}
解析
@Test
void parseToken(){
String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIxMTEiLCJzdWIiOiLlsI_mmI4iLCJpYXQiOjE2OTg0NTc1MDJ9.jr4J3XlIZ_AnwhOH8GVxdDSIrzKkWRMlQ6_Maxk2mfI";
Claims claims = Jwts.parser().setSigningKey(SALT)//设置解析的token
.parseClaimsJws(token)//需要解析的token
.getBody();//获取负载部分
//获取负载内容
String id = claims.getId();
String subject = claims.getSubject();
Date issuedAt = claims.getIssuedAt();
String name = (String) claims.get("name");
System.out.printf( "id=%s,subject=%s,issuedAt=%s,name=%s\n",id,subject,issuedAt,name);
}