フレームマルチフレームの研究ノート

1つのJWT学習

 

Mavenの依存関係のシンプルなバージョンは、プログラムは、JWTのツール、ID、名前、イベントを発生させる有効期限を設定し、維持する方法にない場所は、取得したトークンログインを保存するための方法が証明されていない、他のインターフェースの検証トークン

 

 

  <依存> 
            <groupIdを> com.auth0 </ groupIdを> 
            <たartifactId>のjava-JWT </たartifactId> 
            <バージョン> 3.20 </バージョン> 
        </依存> 
        <依存性> 
            <のgroupId> io.jsonwebtoken </のgroupId> 
            <たartifactId> jjwt </たartifactId> 
            <バージョン> 0.70 </バージョン> 
        </依存関係>


 
     * / 
    パブリック 静的文字列createJWT(文字列ID、文字列対象、長いttlMillis){ 
        のsignatureAlgorithmのsignatureAlgorithm = SignatureAlgorithm.HS256。
        長い nowMillis = にSystem.currentTimeMillis(); 
        日付今 = 新しい日付(nowMillis)。
        秘密鍵のSecretKey = generalKey()。
        JwtBuilderビルダー = Jwts.builder()
                .setId(ID)
                .setSubject(被写体)    // 主题 
                .setIssuer(" ユーザ"// 発行者 
                .setIssuedAt(今)       // 発行時間 
                .signWith(のsignatureAlgorithm、秘密鍵); // 署名アルゴリズムと鍵
        IF(ttlMillis> = 0 ){
             ロング expMillis + = nowMillis ttlMillis; 
            日付EXPDATE = 新しい新しい日付(expMillis ); 
            builder.setExpiration(EXPDATE); //が満了し
        }
         戻りbuilder.compactを(); 
    } 
    / * * 
     * JWTを検証
     * @param jwtStr 
     * @return 
     * / 
    パブリック 静的CheckResult validateJWT(文字列jwtStr){ 
        CheckResult checkResult = 新しいCheckResult()。
        請求項主張 = ヌル試す{ 
            特許請求の範囲を = parseJWT(jwtStr)。
            checkResult.setSuccess(真の); 
            checkResult.setClaims(特許請求の範囲)
        } キャッチ(ExpiredJwtException電子){ 
            checkResult.setErrCode(SystemConstant.JWT_ERRCODE_EXPIRE)。
            checkResult.setSuccess(); 
        } キャッチ(でSignatureException電子){
            checkResult.setErrCode(SystemConstant.JWT_ERRCODE_FAIL)。
            checkResult.setSuccess(); 
        } キャッチ(例外e){ 
            checkResult.setErrCode(SystemConstant.JWT_ERRCODE_FAIL)。
            checkResult.setSuccess(); 
        } 
        戻りcheckResult。
    } 
    パブリック 静的のSecretKey generalKey(){
         バイト [] encodedKey = Base64.decode(SystemConstant.JWT_SECERT)。
        SecretKeyキー = 新しい SecretKeySpec(encodedKey、0、encodedKey.length、AES" );
         戻りキー; 
    } 
    
    / * * 
     * 
     *解析JWT字符串
     * @param JWT 
     * @return 
     * @throws例外
     * / 
    パブリック 静的請求parseJWT(文字列JWT)は例外{スロー
        のSecretKey秘密鍵 = generalKey();
         戻りJwtsを。パーサ()
            .setSigningKey(秘密鍵)
            .parseClaimsJws(JWT)
            .getBody(); 
    } 
} 



パブリック クラスLoginController { 
    @Autowired 
    userRepository userRepository。
    
    @ApiOperation(値 = " ユーザログイン" 
    @RequestMapping(値 = " ログイン"、メソッド= RequestMethod.POST)
     公共ReturnVoログイン(ユーザ名の文字列、文字列のパスワード、HttpServletResponseのの
            応答){ 
        ユーザーユーザー =   userRepository.findByUsername(ユーザー名);
         IF(!ユーザー= ヌル){
             IF (user.getPassword()のequals(パスワード)。){
                 // トークンがクライアントに返される- >クライアントの要求がタイムクッキーパラメータ来る- >クライアントにクッキーを保存する 
                文字列JWTをJwtUtils.createJWT =(" 1 "、ユーザ名、SystemConstant.JWT_TTL)。
                返すReturnVo.ok(JWT)を、
            } {
                 戻る)(ReturnVo.errorします。
            } 
        } {
             戻りReturnVo.errorを(); 
        } 
    } 
    @ApiOperation(値 = " 获取用户信息" 
    @RequestMapping(値 = " 説明"、メソッド= RequestMethod.POST)
     公衆ReturnVo記述(文字列名){ 
        ユーザーユーザー =  userRepository.findByUsername(ユーザー名);
        返すReturnVo.ok(user.getDescription()); 
    } 
}

 


トークン得る別の方法
トークン= JWT.create()withAudience(user.getUserId ()+ミリ秒).sign(Algorithm.HMAC256(user.getPassword()));

道のRedisのでトークンを保存します

 

おすすめ

転載: www.cnblogs.com/genestart/p/11306688.html