1、JWT简介
2、JWT格式组成
header+payload +signature
头部:描述基本加解密算法
负载:包含用户基本信息,包含用户自定义基本信息
签名:把前两个部分进行加密,防止别人拿到token后进行base64解码
3、关于jwt客户端存储
可以存储在cookie,localstorage和sessionStorage
4、实战
加入依赖:
<!--JWT相关--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> </dependency>
开发生产token方法和校验token的方法
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import net.xdclass.xdvidio.domain.User; import java.util.Date; /** * @Author Pandas * @Date 2020/4/3 22:06 * @Version 1.0 * @Description jwt工具类1、产生token 2、解密token */ public class JwtUtils { public static final String SUBJECT="xdclass"; public static final long EXPIRE=1000*60*60*24*7;//过期时间,一周 //密钥 public static final String APPSECCRET="xd666"; /** * 加密生产token * @param user * @return */ public static String geneJsonWebToken(User user){ if(user==null||user.getId()==null||user.getName()==null||user.getHeadImg()==null){ return null; } String token=Jwts.builder().setSubject(SUBJECT) .claim("id",user.getId()) .claim("name",user.getName()) .claim("img",user.getHeadImg()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis()+EXPIRE)) .signWith(SignatureAlgorithm.HS256,APPSECCRET).compact(); return token ; } /** * 校验token * @param token * @return */ public static Claims checkJWT(String token){ try{ final Claims claims=Jwts.parser().setSigningKey(APPSECCRET) .parseClaimsJws(token).getBody(); return claims;}catch (Exception e){ } return null; } }
测试
import io.jsonwebtoken.Claims; import net.xdclass.xdvidio.utils.JwtUtils; import org.junit.Test; import net.xdclass.xdvidio.domain.User; /** * @Author Pandas * @Date 2020/4/3 23:03 * @Version 1.0 * @Description test */ public class CommonTest { @Test public void tetsGeneJwt(){ User user=new User(); user.setId(666); user.setName("xd"); user.setHeadImg("www.xdclass.com"); String token2= JwtUtils.geneJsonWebToken(user); System.out.println(token2); } @Test public void testCheck(){ String token="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4ZGNsYXNzIiwiaWQiOjY2NiwibmFtZSI6InhkIiwiaW1nIjoid3d3LnhkY2xhc3MuY29tIiwiaWF0IjoxNTg1OTI2Njk5LCJleHAiOjE1ODY1MzE0OTl9.QZX2Rs2zn53-07T4XzjCeGMFRI_hB3uN6dRGe9hXh3E"; Claims claims=JwtUtils.checkJWT(token); if(claims!=null){ String name=(String)claims.get("name"); Integer id=(Integer)claims.get("id"); System.out.println(name); System.out.println(id); } else { System.out.println("非法字符"); } } }