使用JWT就是对cookie和session的升级
即记录用户登录状态的任务交给了token。
@Test
public void Test1() throws InterruptedException {
JwtBuilder builder = Jwts.builder();
builder.setId("李兆");
builder.setSubject("给别人传递的消息"); //包装传输者信息
builder.setIssuer("发送者作者"); //设置发送者信息
builder.setExpiration(new Date(System.currentTimeMillis() + 1000 * 6));//设置过期时间,y一旦到了过期时间则无法使用。
builder.setIssuedAt(new Date());
// 添加自定义数据
Map<String, Object> map = new HashMap<>();
map.put("你好", "我试试吧");
// builder.setClaims(map); //封装自定义信息
// builder.addClaims(map); //使用add会返回所有数据,而使用set值返回map数据
//将密钥进行加密
byte[] encode = Base64.getEncoder().encode("admin".getBytes());
builder.signWith(SignatureAlgorithm.HS256, encode);//设置加密方法以及加密密码
String compact = builder.compact();//令牌创建完毕
// wait(6000);//设置时间间隔,致使过期
Claims body = Jwts.parser().setSigningKey(encode).parseClaimsJws(compact).getBody();
System.out.println(body);
}
网关是对于url的加密,而jwt是对于传输数据的加密
一般创建一个JwtUtil工具类,将map内容存放进去。生成一个string字符串。待使用时在解析。
public class JwtUtil {
//指定令牌密钥
private static final String TOKEN_SRECT = "xinchi";
//指定令牌的存活时间 2个小时
private static final Long EXTIME = 1000 * 60 * 60 * 2L;
//生成令牌
public static String createToken(String id,Map<String,Object> map){
JwtBuilder jwtBuilder = Jwts.builder();
return jwtBuilder.setId(id) //令牌标识id
.setIssuer("lz") //令牌的发布者
.setSubject(JSON.toJSONString(map)) //令牌基本内容
.setIssuedAt(new java.util.Date()) //发放时间
.setExpiration(new java.util.Date(System.currentTimeMillis()+EXTIME)) //过期时间
//.addClaims(map) //扩展信息
.signWith(SignatureAlgorithm.HS256, Base64.getDecoder().decode(TOKEN_SRECT))
.compact();//生成令牌
}
//解析令牌
public static Claims parseToken(String token){
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(Base64.getDecoder().decode(TOKEN_SRECT)).parseClaimsJws(token);
return claimsJws.getBody();
}
}
就像一个加密通话。
还有一种就是token只用作检验是否登录。只当作一个“门禁卡”。有了就可以后续操作了。
额外
System.out.println(request.getCookies()); //cookies值
System.out.println(request.getId()); //获取会话id
System.out.println(request.getQueryParams()); //?后接键值对
System.out.println(request.getLocalAddress()); ///127.0.0.1:8080
System.out.println(request.getPath()); ///api/logout