JWT的学习
1.什么是JWT
Json web token 也是通过json的格式作为web应用中的令牌,在各方之前通过Json的格式安全的进行传输
2.JWT可以干什么
jwt相当于前后期没有分离的session,认证的功能,session认证就是客户端登录成功然后保存uesrname,uid到session当中,下一次登录的时候就会有一个cookie,直接找到对应的session进行登录,但是这个保存在服务器端,而且下次登录的话还得是这个服务器,对服务器加载很大,并且cookie容易拦截

3.JWT结构
令牌组成
1.header
2.paylode
3.siguature
4.JWT的第一个程序
package com.haihai;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Calendar;
import java.util.HashMap;
5.封装JWT
package com.haihai.utils;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
public class JwtUtils {
    private static final String SING = "!token";
    /**
     * 生成token
     * @param map1
     * @return
     */
    public static String getToken(Map<String,Object> map1)
    {
        HashMap<String, Object> map = new HashMap<>();
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DATE,7);                 //七天过期
        JWTCreator.Builder builder = JWT.create();          //header
        map1.forEach((k,v) -> {                             //payload
            builder.withClaim(k, (Boolean) v);
        });
        String token = builder
                .withExpiresAt(instance.getTime())            //过期时间
                .sign(Algorithm.HMAC256(SING));           //加密算法签名
        System.out.println(token);
        return token;
    }
    /**
     *验证token
     */
    public static void verify(String token)
    {
        DecodedJWT build = JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
    }
    /**
     * 获取信息方法
     */
    public static DecodedJWT getTokenInfo(String token)
    {
        return JWT.require(Algorithm.HMAC256(SING)).build().verify(token);
    }
}
                    
                