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("非法字符"); } } }