为指定内容生成一个jjwt:java json web token
(测试,其实是jwtUtil的内容)
package com.tensequare.jwt;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
public class CreateJwt {
public static void main(String[] args) {
JwtBuilder jwtBuilder = Jwts.builder()
.setId("666")
.setSubject("小马")
.setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, "itcast")
.setExpiration(new Date(new Date().getTime()+60000))
.claim("role", "admin");
System.out.println(jwtBuilder.compact());
}
}
setId:用户id
setSubject(用户名)
setIssuedAt(登录时间)
signWith(加密方式,盐值);
setExpiration(new Date(new Date().getTime()+60000));
自定义加密的属性(如填加用户角色)
claims是个Map,里面封装了很多的自定义的属性和get,
Jwts.builder().claim(“role”,“admin”).
当解析成功后返回的默认对象就是Claims
解析
package com.tensequare.jwt;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import java.text.SimpleDateFormat;
public class ParseJwtTest {
public static void main(String[] args) {
Claims claims = Jwts.parser()
.setSigningKey("itcast")
.parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2NjYiLCJzdWIiOiLlsI_pqawiLCJpYXQiOjE1Mzc5MzA2MjYsImV4cCI6MTUzNzkzMDY4Niwicm9sZSI6ImFkbWluIn0.IiffIMe0KdMFGfQNJVwOPqUiFHvOBSG_9Hp6pz_iHXs")
.getBody();
System.out.println("用户id:"+claims.getId());
System.out.println("用户名:"+claims.getSubject());
System.out.println("登录时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getIssuedAt()));
System.out.println("过期时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(claims.getExpiration()));
System.out.println("用户角色:"+claims.get("role"));
}
}
将jwt相关文件放到common包下,其他服务依赖common包,然后其他在服务的属性中设置过期时间和盐值,各个服务的token过期时间和盐值可以不同,其中盐值必须提供
jwtUtil是官方下载的
3)其他服务的resources下添加