当前位置:网站首页>JWT operation tool class sharing
JWT operation tool class sharing
2022-06-26 20:11:00 【A rookie is a great God】
Share your personal operation JWT
Tool class of . be based on jjwt
library , This is a Java The most popular in the circle JWT
Operation Library .
TIPS
jjwt
GitHub:GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and Android- This tool class comes from personal open source certification 、 Authorization framework Light Security
Plus dependence
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.10.7</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.10.7</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.10.7</version> <scope>runtime</scope> </dependency>
Tool class :
@Slf4j @RequiredArgsConstructor @SuppressWarnings("WeakerAccess") @Component public class JwtOperator { /** * Secret key * - Default aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt */ @Value("${secret:aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt}") private String secret; /** * The period of validity , Unit second * - Default 2 Zhou */ @Value("${expire-time-in-second:1209600}") private Long expirationTimeInSecond; /** * from token In order to get claim * * @param token token * @return claim */ public Claims getClaimsFromToken(String token) { try { return Jwts.parser() .setSigningKey(this.secret.getBytes()) .parseClaimsJws(token) .getBody(); } catch (ExpiredJwtException | UnsupportedJwtException | MalformedJwtException | IllegalArgumentException e) { log.error("token Parse error ", e); throw new IllegalArgumentException("Token invalided."); } } /** * obtain token The expiration time of * * @param token token * @return Expiration time */ public Date getExpirationDateFromToken(String token) { return getClaimsFromToken(token) .getExpiration(); } /** * Judge token Is it overdue * * @param token token * @return Expired return true, Not expired return false */ private Boolean isTokenExpired(String token) { Date expiration = getExpirationDateFromToken(token); return expiration.before(new Date()); } /** * Calculation token The expiration time of * * @return Expiration time */ private Date getExpirationTime() { return new Date(System.currentTimeMillis() + this.expirationTimeInSecond * 1000); } /** * Generate... For the specified user token * * @param claims User information * @return token */ public String generateToken(Map<String, Object> claims) { Date createdTime = new Date(); Date expirationTime = this.getExpirationTime(); byte[] keyBytes = secret.getBytes(); SecretKey key = Keys.hmacShaKeyFor(keyBytes); return Jwts.builder() .setClaims(claims) .setIssuedAt(createdTime) .setExpiration(expirationTime) // You can also use your favorite algorithm // The supported algorithms are detailed in :https://github.com/jwtk/jjwt#features .signWith(key, SignatureAlgorithm.HS256) .compact(); } /** * Judge token Is it illegal * * @param token token * @return Not expired return true, Otherwise return to false */ public Boolean validateToken(String token) { return !isTokenExpired(token); } public static void main(String[] args) { // 1. initialization JwtOperator jwtOperator = new JwtOperator(); jwtOperator.expirationTimeInSecond = 1209600L; jwtOperator.secret = "aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt"; // 2. Set user information HashMap<String, Object> objectObjectHashMap = Maps.newHashMap(); objectObjectHashMap.put("id", "1"); // test 1: Generate token String token = jwtOperator.generateToken(objectObjectHashMap); // Something similar to this string will be generated : eyJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEiLCJpYXQiOjE1NjU1ODk4MTcsImV4cCI6MTU2Njc5OTQxN30.27_QgdtTg4SUgxidW6ALHFsZPgMtjCQ4ZYTRmZroKCQ System.out.println(token); // Change me to the one generated above token!!! String someToken = "eyJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEiLCJpYXQiOjE1NjU1ODk4MTcsImV4cCI6MTU2Njc5OTQxN30.27_QgdtTg4SUgxidW6ALHFsZPgMtjCQ4ZYTRmZroKCQ"; // test 2: If you can token Legal and not expired , return true Boolean validateToken = jwtOperator.validateToken(someToken); System.out.println(validateToken); // test 3: Get user information Claims claims = jwtOperator.getClaimsFromToken(someToken); System.out.println(claims); // Change me to the one you generated token The first paragraph of ( With . As boundary ) String encodedHeader = "eyJhbGciOiJIUzI1NiJ9"; // test 4: Decrypt Header byte[] header = Base64.decodeBase64(encodedHeader.getBytes()); System.out.println(new String(header)); // Change me to the one you generated token The second paragraph of ( With . As boundary ) String encodedPayload = "eyJpZCI6IjEiLCJpYXQiOjE1NjU1ODk1NDEsImV4cCI6MTU2Njc5OTE0MX0"; // test 5: Decrypt Payload byte[] payload = Base64.decodeBase64(encodedPayload.getBytes()); System.out.println(new String(payload)); // test 6: This is a falsified token, Therefore, an exception will be reported , explain JWT Is safe jwtOperator.validateToken("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6IjEiLCJpYXQiOjE1NjU1ODk3MzIsImV4cCI6MTU2Njc5OTMzMn0.nDv25ex7XuTlmXgNzGX46LqMZItVFyNHQpmL9UQf-aUx"); } }
Write configuration
jwt: secret: Secret key # The period of validity , Unit second , Default 2 Zhou expire-time-in-second: 1209600
Use :
@Autowired private JwtOperator jwtOperator; // ...
边栏推荐
猜你喜欢
好物推薦:移動端開發安全工具
Guomingyu: Apple's AR / MR head mounted display is the most complicated product in its history and will be released in January 2023
[recommended collection] these 8 common missing value filling skills must be mastered
mongoDB的三种基础备份方法
Preliminary analysis of serial port printing and stack for arm bare board debugging
Feitian +cipu body brings more imagination to the metauniverse
Arduino UNO + DS1302利用31字节静态RAM存储数据并串口打印
The successfully resolved idea cannot use the log normally after referencing Lombok's @slf4j
On the escape of inequality value
MySQL recharge
随机推荐
Tiktok practice ~ search page ~ scan QR code
mysql存储过程
Boot的单元测试
C语言 文件光标 fseek
IK word breaker
Why don't I recommend going to sap training institution for training?
ImageView, glide load long picture (glide load picture)
动态规划111
证券开户安全吗,有没有什么危险呢
【最详细】最新最全Redis面试大全(70道)
BOM and DOM operations
Sword finger offer II 091 Paint the house
Development of NFT for digital collection platform
The king of Internet of things protocol: mqtt
C language file cursor fseek
JSONUtils工具类(基于alibaba fastjson)
When does the mobile phone video roll off?
Arduino uno + DS1302 uses 31 byte static RAM to store data and print through serial port
Tiktok practice ~ sharing module ~ copy short video link
Basic and necessary common plug-ins of vscade