봄 부팅 JWT를 통합

1. 무엇 JWT가?

JWT 간략화하는 방법을 정의하는 개방형 표준이며, JSON 금고 등의 오브젝트에있어서의 사이에 정보를 전송하는 통신 자 급식 모두. JWT는 HMAC 알고리즘이 서명 할 RSA 공개 키 또는 키입니다 사용할 수 있습니다.

단순히 사용자가 정보를 얻을 수 있도록하는 것이, 다음 복호화 알고리즘 역 해독 할 수 토큰 특정 표준 토큰을 생성하여, 넣어.

장점 :

1) 생산 토큰은, 같은 ID, 사용자 별명, 아바타 및 기타 정보 등의 기본 정보를 포함 피하기 위해 다시 라이브러리를 확인하실 수 있습니다

2) 클라이언트에 저장, 서버는 메모리 리소스를 차지하지 않습니다

단점 :

토큰 base64 인코딩되면 암호화 전에 토큰 오브젝트 등 사용자 권한, 비밀번호와 같은 민감한 정보를 포함하지 않아야하므로, 디코딩 될 수있는

2, JWT 형식 : 헤더, 하중, 서명

헤더 + 페이로드 + 서명

머리 : 주로 서명 알고리즘을 설명합니다

로드 : 암호화 된 객체 정보 등 사용자 ID로, 당신은 또한 ISS 발행, 만기 시간 썼는데, 서브 중심의 사용자로 사양, 내부의 물건을 추가 할 수 있습니다 설명

서명 : 주요 부분은 암호를 해독 할 토큰 조작 토큰 기반을 얻기 위해 다른 사람을 방지하기 위해 처음 두 개의 암호화입니다

3, 클라이언트 JWT에 저장

당신은 쿠키, 로컬 스토리지의 내부와 sessionStorage에 저장 될 수있다

4, 도입 및 개발에 의존 도구에 관한 JWT

1) 종속 도입

<! - JWT 관련 ->
<의존성>
    <의 groupId> io.jsonwebtoken </의 groupId>
    <artifactId를> jjwt </ artifactId를>
    <버전> 0.7.0 </ 버전>
</ 의존성>

토큰 방법 2) 개발 및 생산

시험 방법 3) 개발 토큰

패키지 com.haitaiinc.clinicpathservice.utils을;

수입 com.haitaiinc.clinicpathservice.entity.UserInfo;
수입 io.jsonwebtoken.Claims;
수입 io.jsonwebtoken.Jwts;
수입 io.jsonwebtoken.SignatureAlgorithm;
수입 org.springframework.util.StringUtils;

수입 java.util.Date;

공공  클래스 JwtUtils {
     공공  정적  최종 문자열 제목 = "관리자" ;

    / **
     * 만료 시간 (밀리 초), 주
     * / 
    공용  정적  최종   EXPIRE = 1000 * 60 * 60 * 24 * 7 ;

    / **
     * 秘钥
     * / 
    공공  정적  최종 문자열 APPSECRET = "haitaiinc" ;

    / **
     * JWT 생성
     *
     * @param 사용자 정보
     * @return 
     * / 
    공공  정적 문자열 geneJsonWebToken (사용자 정보 사용자 정보) {

        경우 (사용자 정보 ==  || StringUtils.isEmpty (userInfo.getUserId ()) || StringUtils.isEmpty (userInfo.getUserName ())) {
             반환  ;
        }
        문자열 토큰 = Jwts.builder (). setSubject (제목)
                .claim ( "ID" , userInfo.getUserId ())
                .claim ( "이름" , userInfo.getUserName ())
                .setIssuedAt ( 새로운 날짜 ())
                .setExpiration ( 새로운 날짜 (에 System.currentTimeMillis () + ) EXPIRE)
                .signWith (SignatureAlgorithm.HS256, APPSECRET) .compact ();

        돌아 토큰;
    }


    / **
     * 확인 토큰
     *
     * @param 토큰
     * @return 
     * / 
    공용  정적 항 checkJWT (문자열 토큰) {

        시도 {
             최종 항 청구 = Jwts.parser을 (). setSigningKey (APPSECRET 참조).
                    parseClaimsJws (토큰) .getBody ();
            반환 주장을;

        } 캐치 (예외 전자) {
        }
        반환  널 (null)을 ;
    }
}

4) 시험

패키지 com.haitaiinc.clinicpathservice을;

수입 com.haitaiinc.clinicpathservice.entity.UserInfo;
수입 com.haitaiinc.clinicpathservice.utils.JwtUtils;
수입 io.jsonwebtoken.Claims;
수입 org.junit.jupiter.api.Test;

공공  클래스 CommonTest {

    @테스트
    공공  무효 testGeneJwt () {
        사용자 정보는 사용자 = 새로운 사용자 정보 ();
        user.setUserId ( "관리자" );
        user.setUserName ( "관리자" );

        문자열 토큰 = JwtUtils.geneJsonWebToken (사용자);
        에서 System.out.println (토큰);

    }


    @테스트
    공공  무효 testCheck () {
        토큰 문자열 = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImlkIjoiYWRtaW4iLCJuYW1lIjoi566h55CG5ZGYIiwiaWF0IjoxNTc3NTU3MDU1LCJleHAiOjE1NzgxNjE4NTV9.VrrKtCTnxVN76JhpyIusCGq9Wj89wLor0OqIJ6s0zXo" ;
        제 청구 = JwtUtils.checkJWT (토큰);
        경우 (청구항! = null의 ) {
            문자열 ID = (문자열) claims.get ( "ID" );
            문자열 이름 = (문자열) claims.get ( "이름" );
            에서 System.out.println (ID);
            에서 System.out.println (이름);
        } 다른 {
            에서 System.out.println ( "非法토큰" );
        }
    }
}

추천

출처www.cnblogs.com/jwen1994/p/12113888.html