微服務登錄解決方案JWT(json wen token)


1、JWT簡介

2、JWT格式組成

header+payload +signature

頭部:描述基本加解密算法

負載:包含用戶基本信息,包含用戶自定義基本信息

簽名:把前兩個部分進行加密,防止別人拿到token后進行base64解碼

3、關於jwt客戶端存儲

可以存儲在cookie,localstorage和sessionStorage

4、實戰

加入依賴:

        <!--JWT相關-->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.7.0</version>
        </dependency>

開發生產token方法和校驗token的方法

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import net.xdclass.xdvidio.domain.User;

import java.util.Date;

/**
 * @Author Pandas
 * @Date 2020/4/3 22:06
 * @Version 1.0
 * @Description jwt工具類1、產生token 2、解密token
 */
public class JwtUtils {

    public static final String SUBJECT="xdclass";
    public static final long EXPIRE=1000*60*60*24*7;//過期時間,一周
    //密鑰
    public static final String APPSECCRET="xd666";

    /**
     * 加密生產token
     * @param user
     * @return
     */
    public static String geneJsonWebToken(User user){
        if(user==null||user.getId()==null||user.getName()==null||user.getHeadImg()==null){
            return null;
        }

        String token=Jwts.builder().setSubject(SUBJECT)
                .claim("id",user.getId())
                .claim("name",user.getName())
                .claim("img",user.getHeadImg())
                .setIssuedAt(new Date())
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRE))
                .signWith(SignatureAlgorithm.HS256,APPSECCRET).compact();

        return token ;
    }

    /**
     * 校驗token
     * @param token
     * @return
     */
    public static Claims checkJWT(String token){
        try{        final Claims claims=Jwts.parser().setSigningKey(APPSECCRET)
                .parseClaimsJws(token).getBody();
            return claims;}catch (Exception e){

        }
        return null;

    }

}

測試

import io.jsonwebtoken.Claims;
import net.xdclass.xdvidio.utils.JwtUtils;
import org.junit.Test;
import net.xdclass.xdvidio.domain.User;

/**
 * @Author Pandas
 * @Date 2020/4/3 23:03
 * @Version 1.0
 * @Description test
 */

public class CommonTest {
    @Test
    public void tetsGeneJwt(){
        User user=new User();
        user.setId(666);
        user.setName("xd");
        user.setHeadImg("www.xdclass.com");
        String token2= JwtUtils.geneJsonWebToken(user);
        System.out.println(token2);

    }
    @Test
    public void testCheck(){
        String token="eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ4ZGNsYXNzIiwiaWQiOjY2NiwibmFtZSI6InhkIiwiaW1nIjoid3d3LnhkY2xhc3MuY29tIiwiaWF0IjoxNTg1OTI2Njk5LCJleHAiOjE1ODY1MzE0OTl9.QZX2Rs2zn53-07T4XzjCeGMFRI_hB3uN6dRGe9hXh3E";
        Claims claims=JwtUtils.checkJWT(token);
        if(claims!=null){
            String name=(String)claims.get("name");
            Integer id=(Integer)claims.get("id");
            System.out.println(name);
            System.out.println(id);
        }
        else {
            System.out.println("非法字符");
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM