JWT
1、简介

2、结构

头部


载荷




签证

应用



<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
Token 生成

解析token

package com.wang.utils;
import io.jsonwebtoken.Jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class JWTUtils {
// 定义一个密钥
private static final String SECRET = "af*(*KK";
/**
* 编写生成token的方法
* @param account
* @return
*/
public static String generateToken(String account) {
Map<String, Object> claims = new HashMap<>();
claims.put("acct", account);
JwtBuilder builder = Jwts.builder();
// 签发算法,设置密钥
builder.signWith(SignatureAlgorithm.HS256, SECRET);
// body数据,要唯一,自行设置
builder.addClaims(claims);
// 设置签发时间 - 当前系统时间
builder.setIssuedAt(new Date());
// 设置过期时间
builder.setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24));
String token = builder.compact();
return token;
}
public static Map<String,Object> parseToken(String token){
Jwt jwt = Jwts.parser().setSigningKey(SECRET).parse(token);
Map<String,Object> claims = (Map<String, Object>) jwt.getBody();
return claims;
}
public static void main(String[] args) {
String s = generateToken("123");
System.out.println(s);
System.out.println("====================");
System.out.println(parseToken(s));
}
}
解决跨域

登录接口



解析token


结合Redis 解决token删除

如果redis中有数据,就赋值

如果没有数据就报错
退出登录要在后台清除redis中的信息


总结
解决了单点登录和session共享问题:使用jwt+redis















![[AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试](https://img-blog.csdnimg.cn/direct/cf7515a471fb4dabb035da6bb88e0278.png)



