1、什么是JWT
- jwt可以生成一個加密的token,作為用戶登錄的令牌,當用戶登陸成功之后,發放給客戶端。請求需要登錄的資源或者接口的時候,將token攜帶,后端驗證token是否合法。
- jwt有三部分組成:
- A:Header,{"type":"JWT","alg":"HS256"}固定
- B:playload,存放信息,比如,用戶id,過期時間等,可以被解密,不能存放敏感信息
- C:簽證,A和B加上秘鑰 加密而成,只要密鑰不丟失,可以認為是安全的。
- jwt驗證,主要就是驗證C部分是否合法
2、生成JWT令牌
- 引入依賴
<!-- JWT依賴--> <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>
2、構建jwt生成器
public static String createToken(String username, long tokenExpirationInSeconds) {// 設置JWT的過期時間Date now = new Date();Date expiryDate = new Date(now.getTime() + tokenExpirationInSeconds * 1000);// 創建JWT的Builderreturn Jwts.builder()// 不推薦在生產環境中使用無狀態的JWT,這里僅為示例.signWith(SignatureAlgorithm.HS512, "secret".getBytes()).setSubject(username) // 設置JWT的主題,這里存放用戶名.setIssuedAt(now).setExpiration(expiryDate).compact();}
3、從jwt解析出username
public static String parseJWTAndGetUsername(String secretKey, String token) {// 創建JwtParser對象并傳入密鑰JwtParser parser = Jwts.parser().setSigningKey(secretKey.getBytes());// 解析JWT并獲取Claims對象Claims claims = parser.parseClaimsJws(token).getBody();// 從Claims對象中獲取用戶名return claims.getSubject();}