ShiroJwt
v2.0
フロントエンドアドレス: https://github.com/wang926454/VueStudy/tree/master/VueStudy08-JWT
ご質問がある場合は、コードをスキャンしてQQグループに参加してコミュニケーションしてください: 779168604
- まず、ユーザー名とパスワードをuser/loginにポストしてログインします。成功すると、暗号化されたAccessTokenが返されます。失敗すると、401 エラーが直接返されます (アカウントまたはパスワードが間違っています)。
- 今後の訪問のためにこのAccessTokenを持参してください。
- 認証プロセスは主に、 Shiroのエントリ フィルターJWTFilter ( BasicHttpAuthenticationFilter ) を書き換えて、リクエストヘッダーにAuthorizationフィールドが含まれているかどうかを判断します。
- 「はい」の場合は、 ShiroのTokenログイン認証と認可を実行します (許可を必要とするユーザー アクセスのすべてのリクエストでは、ヘッダーにAuthorizationフィールドを追加してAccessToken を保存する必要があります)。そうでない場合は、訪問者として直接アクセスを使用します (許可制御がある場合)。 、訪問者のアクセスは傍受されます)
ほとんどの場合、この問題はMD5 + ソルトの形式で解決されます (Baidu からの詳細)。アカウントは一意であるため、同じ構造は表示されません。AES -128 + Base64を使用します。秘密のパスワードの問題
元々はJedisUtil をBeanとして直接インジェクションしていましたが、使用するたびに
@Autowired直接インジェクションできるようになっていましたが、 ShiroのCustomCache を書き換えたところJedisUtilがインジェクションできなくなったため、 JedisPoolへの静的インジェクションに変更しました。 JedisUtil ツール クラスは、引き続き静的メソッドを直接呼び出します。@Autowiredインジェクションは必要ありません。
- ログイン認証に合格すると、 AccessToken情報が返されます (現在のタイムスタンプとアカウント番号がAccessTokenに保存されます)。
- 同時に、アカウントをキー、値を現在のタイムスタンプ (ログイン時間) としてRedisに RefreshToken を設定します。
- これで、認証中にAccessTokenの有効期限が切れてはならず、対応するRefreshToken がRedisに存在する必要があり、認証が通過する前にRefreshToken のタイムスタンプが AccessToken 情報のタイムスタンプと一致している必要があります。これにより、 JWT の制御性を実現できます。
- 再度ログインして新しいAccessToken を取得した場合、古いAccessToken は認証できません。Redis に保存されているRefreshToken タイムスタンプ情報は、生成された最新の AccessToken 情報に含まれるタイムスタンプとのみ一致するため、各ユーザーは最新のAccessTokenのみを使用できます。認証
- RedisのRefreshToken は、ユーザーがオンラインであるかどうかを判断するために使用することもできます。Redis RefreshTokenが削除されると、このRefreshTokenに対応するAccessToken は認証を通過できなくなります。これは、ユーザーのログインを制御し、ユーザーを排除することと同じです。 。
- AccessToken 自体の有効期限は 5 分(構成ファイルで構成可能)、 RefreshToken の有効期限は 30 分 (構成ファイルで構成可能) です。
- ログイン後 5 分が経過すると、現在のAccessToken の有効期限が切れます。JWT にアクセスするためにAccessToken を再度使用すると、トークンの有効期限が切れたことを示すTokenExpiredException例外がスローされます。
- AccessToken を更新するかどうかの決定を開始します。Redisは、現在のユーザーの RefreshToken が存在するかどうか、およびこの RefreshToken によって保持されるタイムスタンプが期限切れの AccessToken によって保持されるタイムスタンプと一致するかどうかを照会します。
- 存在し、一貫性がある場合は、AccessToken を更新し、有効期限を 5 分に設定し (構成ファイルで構成可能)、タイムスタンプを最新のタイムスタンプに設定し、RefreshToken のタイムスタンプも最新のタイムスタンプに設定して、有効期限を更新します。有効期限を再び 30 分に設定します (構成ファイルで構成可能)。
- 最後に、更新されたAccessToken が応答のヘッダーの Authorization フィールドに格納されて返されます (フロントエンドはそれを取得して置き換え、次回のアクセスに新しいAccessTokenを使用します)。
まず、srcmainresourcesgeneratorgeneratorConfig.xml ファイルを構成し (デフォルト構成は、元のパッケージの下位レベルにあるリバース パッケージの下にあります)、pom.xml レベル ディレクトリのコマンド ライン ウィンドウで実行します ( (つまり、プロジェクトのルート ディレクトリの下にあります) (mvn が設定されていることが前提です) (IDEA は、Maven ウィンドウでダブルクリックすることで直接実行できます)
mvn mybatis-generator:generate先设置Content - Type为application / json 然后填写请求参数帐号密码信息
进行请求访问,请求访问成功
点击查看Header信息的Authorization属性即是Token字段访问需要权限的请求将Token字段放在Header信息的Authorization属性访问即可 Token的自动刷新也是在Token失效时返回新的Token在Header信息的Authorization属性