微服务登录解决方案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