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