봄 부팅 통합 알고리즘 JWT

봄 부팅 통합 알고리즘 JWT

JWT 알고리즘은 일반적으로 로그인 권한 부여 및 정보 교환에 사용됩니다. 여기에 프로젝트 상황과 함께 간단한 데모, 특정 사용을 할 수 있습니다.

A, .JWT 구조

바이 인기 검색어 JWT를 header.payload.signature세 부분의 캐릭터 라인은, 그래서 여기가 짧은에 충분하다, 너무 많은 게시물이 하나의 온라인 프리젠 테이션이 있습니다.

1.1 헤더

header사용함으로써 서명 알고리즘토큰 조성물의 유형.

1.2 페이로드

payload그는 당신의 requestBody에서 유사한 데이터에 퉁명스럽게 말했다.

1.3 서명

생성하려는 경우 signature, 당신은 HMAC 필요한 키 암호화 알고리즘 비밀 JWT 사용자 지정 구성 항목을 사용해야합니다.

둘째, 사용

2.1 가이드 패키지

        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>java-jwt</artifactId>
            <version>3.4.0</version>
        </dependency>

2.2 토큰 도구

토큰 구문 분석. 프로젝트에 직접라는 도구로 포장 된, 검증 토큰, 토큰을 만드는 작업이 포함됩니다.

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.exceptions.TokenExpiredException;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 测试JWT加密算法,并且解密
 */
public class JWTUtil {
    private static final Logger logger = LoggerFactory.getLogger(JWTUtil.class);
    /**
     * 密钥
     */
    private static final String SECRET = "my_secret_sdgdsgfdgkfgjrigfhpbg156456";

    /**
     * 过期时间
     **/
    private static final long EXPIRATION = 1800L;//单位为秒

    /**
     * 生成用户token,设置token超时时间
     */
    public static String createToken(String userId, String userName) {
        //过期时间
        Date expireDate = new Date(System.currentTimeMillis() + EXPIRATION * 1000);
        Map<String, Object> map = new HashMap<>();
        map.put("alg", "HS256");
        map.put("typ", "JWT");
        String token = JWT.create()
                .withHeader(map)// 添加头部
                //可以将基本信息放到claims中,更具需要,可设置多个
                .withClaim("id", userId)//userId
                .withClaim("userName", userName)//userName
                .withExpiresAt(expireDate) //超时设置,设置过期的日期
                .withIssuedAt(new Date()) //签发时间
                .sign(Algorithm.HMAC256(SECRET)); //SECRET加密
        return token;
    }

    /**
     * 校验token并解析token
     */
    public static Map<String, Claim> verifyToken(String token) {
        DecodedJWT jwt = null;
        try {
            JWTVerifier verifier = JWT.require(Algorithm.HMAC256(SECRET)).build();
            jwt = verifier.verify(token);//到这里能够解析出来,说明token是正确的。
        }catch (JWTDecodeException e) {
            // token错误
            logger.error(e.getMessage());
        }catch (TokenExpiredException e) {
            // token过期
            logger.error(e.getMessage());
        }catch (Exception e) {
            logger.error(e.getMessage());
            logger.error("解码失败");
            //解码异常则抛出异常
            return null;
        }
        return jwt.getClaims();
    }

    //测试,并解密token中的内容
    public static void main(String[] args) {
        String token = createToken("11", "我的姓名");
        Map<String, Claim> map = verifyToken(token);
        Set<Map.Entry<String, Claim>> entrySet = map.entrySet();
        for (Map.Entry<String, Claim> entry : entrySet) {
            System.out.println(entry.getKey() + "=="+entry.getValue().asString());
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

게시 38 개 원래 기사 · 원의 찬양 3 · 조회수 1101

추천

출처blog.csdn.net/S_L__/article/details/104632597