JWT結合springboot來實現token的分發與校驗

因工做中須要用到登錄,此時就要用到token的分發與校驗,採用jwt來進行token的生成與校驗,下面把使用方法記下:前端

大體方案:java

利用jwt生成token,併發放給前端;後端

下一次前端請求後端url時帶上token,後端利用jwt相同的密鑰對token進行校驗,若是校驗成功,容許前端訪問後端api,返回200;api

若是校驗失敗,返回給前端401;併發

 

依賴:微服務

compile('com.auth0:java-jwt:3.4.0')

生成token:ui

public static String genToken(Map<String, String> claims, Date expireDatePoint){

        try {
            //使用HMAC256進行加密
            Algorithm algorithm = Algorithm.HMAC256(SECRET);  //密鑰

            //建立jwt
            JWTCreator.Builder builder = JWT.create()
                .withClaim("loginName", username)
                    withExpiresAt(expireDatePoint); //過時時間點

            //傳入參數
            claims.forEach((key,value)-> {
                builder.withClaim(key, value);
            });

            //簽名加密
            return builder.sign(algorithm);
        } catch (IllegalArgumentException | UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
    }

校驗token加密

public static Map<String,String> verifyToken(String token) throws RuntimeException{
        Algorithm algorithm = null;
        try {
            //使用HMAC256進行加密
            algorithm = Algorithm.HMAC256(SECRET);
        } catch (IllegalArgumentException | UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }

        //解密
        JWTVerifier verifier = JWT.require(algorithm).withIssuer(ISSUER).build();
        DecodedJWT jwt =  verifier.verify(token);
        Map<String, Claim> map = jwt.getClaims();
        Map<String, String> resultMap = new HashMap<>();
        map.forEach((k,v) -> resultMap.put(k, v.asString()));
        return resultMap;
    }

校驗token,能夠用在微服務當中的api gateway服務,利用全局過濾器globalFilter,對全部api進行攔截,校驗token的合法性,選擇是否對其進行放行。url

相關文章
相關標籤/搜索