Spring Boot使用JWT進行token驗證
JWT(JAVA WEB TOKEN) 就是用來生成token的。具體什麼原理優點作用百度一大把,這裡就不貼了
如何使用
1. 引入依賴
<!-- JWT APP Token生成解決方案-->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>3.3.0</version>
</dependency>
2. 建立工具類
package com.eliteai.et8080;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.util.StringUtils;
import java.util.*;
/**
* APP登入Token的生成和解析
*
*/
public class JwtToken {
/** token祕鑰,請勿洩露,請勿隨便修改 */
public static final String SECRET = "poy7go/IVV7+rly0uJY9Vw==";
/** token 過期時間: 60小時 */
public static final int CALENDARFIELD = Calendar.HOUR;
public static final int CALENDARINTERVAL = 60;
/**
* JWT生成Token.<br/>
*
* JWT構成: header, payload, signature
*
* @param userId
* 登入成功後使用者userId, 引數userId不可傳空
*/
public static String createToken(Long userId) throws Exception {
Date iatDate = new Date();
// expire time
Calendar nowTime = Calendar.getInstance();
nowTime.add(CALENDARFIELD, CALENDARINTERVAL);
Date expiresDate = nowTime.getTime();
// header Map
Map<String, Object> map = new HashMap<>();
map.put("alg", "HS256");
map.put("typ", "JWT");
/**
* build token
* param backups {iss:Service, aud:APP}
*
* withHeader : header
* withClaim : payload
* withIssuedAt : sign time
* withExpiresAt : expire time
* sign :signature
*/
return JWT.create().withHeader(map)
.withClaim("iss", "Service")
.withClaim("aud", "APP")
.withClaim("user_id", null == userId ? null : userId.toString())
.withIssuedAt(iatDate)
.withExpiresAt(expiresDate)
.sign(Algorithm.HMAC256(SECRET));
}
/**
* 解密Token
*
* @param token
* @return
* @throws Exception
*/
public static Map<String, Claim> verifyToken(String token) {
DecodedJWT jwt = null;
Map<String, Claim> claims = null;
try {
JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
jwt = verifier.verify(token);
claims = jwt.getClaims();
Optional.ofNullable(claims).orElseThrow(IllegalArgumentException::new);
} catch (Exception e) {
// e.printStackTrace();
// token 校驗失敗, 丟擲Token驗證非法異常
System.out.println("IllegalArgumentException : token 校驗失敗");
}
return claims;
}
/**
* 根據Token獲取user_id
*
* @param token
* @return user_id
*/
public static Long getAppUID(String token) {
Map<String, Claim> claims = verifyToken(token);
Claim userIdClaim = claims.get("user_id");
if (null == userIdClaim || StringUtils.isEmpty(userIdClaim.asString())) {
// token 校驗失敗, 丟擲Token驗證非法異常
}
return Long.valueOf(userIdClaim.asString());
}
public static void main(String[] args){
try {
String token = createToken(1L);
System.out.println("token ======== " + token);
//Long appUID = getAppUID(token);
//System.out.println("appUID ======== " + appUID);
Map<String, Claim> claimMap = verifyToken(token);
System.out.println("claimMap ======== " + claimMap);
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. 如何使用
請執行下main方法看看就知道怎麼使用了
謝謝觀賞!
相關文章
- Spring Boot中使用token:jwtSpring BootJWT
- Spring Boot + Security + JWT 實現Token驗證+多Provider——登入系統Spring BootJWTIDE
- 使用 JWT 身份驗證保護你的 Spring Boot 應用JWTSpring Boot
- SpringBoot 整合 JWT 實現 token 驗證,token 登出Spring BootJWT
- vue4 + laravel8使用JWT登入及token驗證VueLaravelJWT
- 使用personal access token進行Github認證Github
- Spring AI(使用Ollama大模型進行AI驗證)SpringAI大模型
- .net core中使用jwt進行認證JWT
- 實現基於JWT的Token登入驗證功能JWT
- 【Azure Developer】如何驗證 Azure AD的JWT Token (JSON Web 令牌)?DeveloperJWTJSONWeb
- Spring Boot虛擬執行緒與Webflux在JWT驗證和MySQL查詢上的效能比較Spring Boot執行緒WebUXJWTMySql
- 使用 Spring Boot 和 @SpringBootTest 進行測試Spring Boot
- 使用 Spring Boot 進行單元測試Spring Boot
- Spring Boot 整合 Sa-Token 實現登入認證Spring Boot
- koa2,koa-jwt中token驗證實戰詳解JWT
- Spring Boot中使用gRPC與Protobuf驗證教程原始碼Spring BootRPC原始碼
- Spring Boot 使用 JSR303 實現引數驗證Spring BootJS
- spring-boot 使用hibernate validation對引數進行優雅的校驗Springboot
- 使用 Kotlin + Spring Boot 進行後端開發KotlinSpring Boot後端
- spring boot 使用redis進行釋出訂閱Spring BootRedis
- Laravel jwt 驗證LaravelJWT
- 基於 JWT + Refresh Token 的使用者認證實踐JWT
- JWT TokenJWT
- springboot+jwt做api的token認證Spring BootJWTAPI
- JWT驗證使用者資訊功能JWT
- Composer 使用 JWT 生成 TOKEN 例項JWT
- jwt驗證的思考JWT
- Asp.Net Core 3.1 學習4、Web Api 中基於JWT的token驗證及Swagger使用ASP.NETWebAPIJWTSwagger
- keycloak~使用jwks驗證token的合法性
- golang 中使用 JWT 實現登入驗證GolangJWT
- 使用Spring Boot + Redis 進行實時流處理 - vinsguruSpring BootRedis
- Hyperf 框架使用 JWT 進行使用者認證框架JWT
- ActionCable 中怎樣使用 devise 進行驗證dev
- 使用 OAuth 2.0 進行 Kafka 身份驗證 - strimziOAuthKafka
- 使用Moya庫,進行https證書校驗HTTP
- JWT 快速為使用者生成 tokenJWT
- 使用 GoFrame 框架 JWT 方式驗證使用者資訊GoFrame框架JWT
- spring-boot-admin對spring-boot專案進行監控Springboot