/ * 使用JWT生成TOKEN、およびAPPトークンの生成と解析ログ * / パブリック クラスJwtTokenUtil { / ** *トークンシークレットキー * / パブリック 静的な 最終文字列SECRET = "1234567890" ; プライベート 静的な 最終文字列のキー= "user_codeを" ; / ** * JWTは、トークンを生成する。 * JWTを構成する:ヘッダ、ペイロード、署名 * @param 成功したログインユーザ後はuserNoない、パラメータが空で渡されないされない * / @Validated パブリック 静的文字列createToken(@NotBlank userNo文字列)スロー{例外 iatDate DATE =新しい日付(); // 時間の有効期限が切れる nowTime =カレンダーCalendar.getInstance()を。 nowTime.add(Calendar.DATE、 10 )。 日expiresDate = nowTime.getTime(); // ヘッダ地図 マップの<string、オブジェクト>マップ= 新しい HashMapの<> (); map.put( "ALG"、 "HS256" )。 map.put( "標準"、 "JWT" ); // トークン構築 // PARAMバックアップ{:サービス、AUD APP ISS} 文字列トークン= JWT.create()withHeader(マップ)。// ヘッダ .withClaim( "ISS"、 "サービス")// ペイロード .withClaim( "AUD"、 "APP" ) .withClaim(キー、userNo) .withIssuedAt(iatDateは)// 時間サイン (expiresDate).withExpiresAtを// 時間を期限切れ .sign(Algorithm.HMAC256(SECRET))。// 署名 リターン・トークン。 } / ** *解密トークン * @param トークン * @return * @throwsの例外 * / プライベート 静的マップの<string、請求項> verifyToken(文字列トークン){ DecodedJWT JWT = NULL ; 試み{ JWTVerifier検証 = JWT.require(Algorithm.HMAC256(SECRET))ビルド();. JWT = verifier.verify(トークン); } キャッチ( E例外){ // e.printStackTrace(); // トークンの検証が失敗し、不正な認証トークンがスローされた例外 スロー 新しい新 BusinessException( "トークン検証失敗" ); } 戻りjwt.getClaims(); } / ** *トークンuser_no取得 *@param トークン * @return user_No * / パブリック 静的文字列getAppUID(文字列トークン){ マップの<string、請求項>クレーム= verifyToken(トークン)。 請求項user_id_claim = claims.get(キー)。 もし(ヌル == user_id_claim || StringUtils.isBlank(user_id_claim.asString())){ // トークン校验失败、抛出トークン验证非法异常 スロー 新しい BusinessException( "异常トークン" ); } を返す)(user_id_claim.asString。 } }