山東省建設(shè)管理局網(wǎng)站seo優(yōu)化人員
最近在B站大學(xué)學(xué)習(xí)Java開發(fā),剛好學(xué)到登入驗(yàn)證,在使用JJWT令牌時(shí)踩了一些坑,在這里把代碼和依賴給出,希望后來者得以借鑒。
- 依賴
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.11.2</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.11.2</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.11.2</version></dependency>
- JJWT編解碼的工具類
package com.example.demo2.utils;
import com.example.demo2.pojo.Emp;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.jackson.io.JacksonSerializer;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;import java.security.Key;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class JWTUtils {private static String hashKey="springbootdemofdjwauiohuibaduiwhanuihwudw47894987awdwhi";public static String generate(Emp emp){//生成載體Map<String,Object> claims=new HashMap<>();claims.put("id",emp.getId());claims.put("username",emp.getUsername());claims.put("name",emp.getName());//生成令牌String token= Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256,hashKey).setExpiration(new Date(System.currentTimeMillis()+24*3600*1000)).serializeToJsonWith(new JacksonSerializer<>()).compact();log.info("JWT令牌生成成功,{}",token);return token;}public static Boolean parse(String token){try{Claims claims=Jwts.parser().setSigningKey(hashKey).parseClaimsJws(token).getBody();log.info("令牌解析成功,{}",claims);return true;}catch (Exception e){log.info("令牌解析錯(cuò)誤,說明用戶未登錄");return false;}}
}