Jwt生成,解析token,封裝工具類

Json web token

  1. 導入jjwt依賴
<dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>
  1. 生成token,使用工具類Jwts的builder()方法,完成用戶驗證後返回token給客戶端
public class CreateJwt {
    public static void main(String[] args) {
        JwtBuilder jwtBuilder = Jwts.builder().setId("88").setSubject("小白")
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, "liang")
                //添加非私密的其它內容
                .claim("companyId","123456")
                .claim("companyName","騰訊");
        String token = jwtBuilder.compact();
        System.out.println(token);


    }
}
  1. 用戶發送請求是攜帶token,解析token
public class ParseJwt {
    public static void main(String[] args) {
        String token="eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI4OCIsInN1YiI6IuWwj-eZvSIsImlhdCI6MTU5MTE4ODgyNiwiY29tcGFueUlkIjoiMTIzNDU2IiwiY29tcGFueU5hbWUiOiLohb7orq8ifQ.jwJbTI_qCW365JgTtxeGz_jFXyFtQ4be-OCp5ezR4n8";
        Claims claims = Jwts.parser().setSigningKey("liang").parseClaimsJws(token).getBody();
        System.out.println(claims.getId());
        System.out.println(claims.getSubject());
        System.out.println(claims.getIssuedAt());
        //解析自定義的claim中的內容
        String companyId = (String) claims.get("companyId");
        String companyName = (String) claims.get("companyName");
        System.out.println(companyId);
        System.out.println(companyName);
    }
}
  1. 將生成和解析封裝成工具類
package com.springboot.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Map;

@Getter
@Setter
@ConfigurationProperties("jwt.config")
@Component
public class JwtUtils {
    //簽名私鑰
    private String key;
    //簽名有效時間
    private long ttl;

    public String createJwtToken(String id, String name, Map<String,Object> map){
        //設置失效時間
        //獲取當前時間
        long now=System.currentTimeMillis();
        //當前時間+有效時間=過時時間
        long exp=now+ttl;
        //建立JwtBuilder

        JwtBuilder jwtBuilder = Jwts.builder().setId(id).setSubject(name)
                .setIssuedAt(new Date())
                .signWith(SignatureAlgorithm.HS256, key);

        //根據map設置clamis
        jwtBuilder.setClaims(map);
        //設置失效時間
        jwtBuilder.setExpiration(new Date(exp));
        String token = jwtBuilder.compact();
        return token;
    }

    public Claims parseToken(String token){
        Claims claims = Jwts.parser().setSigningKey("liang").parseClaimsJws(token).getBody();
        return claims;
    }



}
相關文章
相關標籤/搜索