shiroオーセンティケーター
オーセンティケーターは、ユーザーのIDを検証するプロセスである検証を担当します。このプロセスの一般的な例は、おなじみの「ユーザー/パスワード」の組み合わせです。ほとんどのユーザーがソフトウェアシステムにログインするとき、通常、ユーザーは自分のユーザー名(パーティ)とそれをサポートするパスワード(証明書)を提供します。システムに保存されているパスワード(またはパスワード表現)がユーザーから提供されたものと一致する場合、それらは認証されたと見なされます。詳細なメカニズムについては、Shiro認証の原則を参照してください。
入り口
パブリックインターフェイスAuthenticator { AuthenticationInfo authenticate(AuthenticationToken var1)はAuthenticationExceptionをスローします。 }
認証が成功すると、AuthenticationInfo認証情報が返されます。この情報にはIDと資格情報が含まれます。認証が失敗すると、対応するAuthenticationException実装がスローされます。
認証条件
shiroでは、アプリケーションがユーザーのIDを確認できるように、ユーザーはshiroにプリンシパルと資格情報を提供する必要があります。プリンシパルと資格情報の最も一般的な組み合わせは、ユーザー名/パスワードです。
校長
ID、つまりサブジェクトのID属性は、ユーザー名、メールボックスなど、何でもかまいません。また、一意にすることもできます。プリンシパルは複数のプリンシパルを持つことができますが、プライマリプリンシパルは1つだけで、通常はユーザー名/パスワード/携帯電話番号です。
資格情報
証明/証明書、つまり、パスワード/デジタル証明書など、サブジェクトだけが知っているセキュリティ値。
認証戦略
1. FirstSuccessfulStrategy:1つのレルムが正常に検証されている限り、最初のレルムの認証情報のみが返され、他のレルムは無視されます。
2. AtLeastOneSuccessfulStrategy:1つのレルムが正常に検証される限り、正常なレルム認証のためにすべての認証情報を返すFirstSuccessfulStrategyとは異なります。
3. AllSuccessfulStrategy:すべてのレルム検証は、成功した場合にのみ成功し、すべてのレルム認証情報が返されます。1つが失敗すると、失敗します。
SecurityManagerインターフェースはAuthenticatorを継承し、認証のために複数のレルムに委任し、デフォルトでAtLeastOneSuccessfulStrategy戦略を使用するModularRealmAuthenticator実装もあります。
シンプルな認証
//shiro.ini [users] zhangsan = 123 //test.java @Test public void testHelloworld(){ // 1、SecurityManagerファクトリを取得します。ここでは、Ini構成ファイルを使用してSecurityManager ファクトリファクトリを初期化します = new IniSecurityManagerFactory( " classpath:shiro .ini "); // 2、SecurityManagerインスタンスを取得し、それをSecurityUtilsにバインドします org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); // 3、getサブジェクトとユーザー名/パスワード認証トークンの作成(つまり、ユーザーID /資格情報) サブジェクトsubject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken( "zhangsan"、 "123"); try { // 4。ログイン、つまり、認証 subject.login(token); } catch(AuthenticationException e){ // 5、認証に失敗しました } Assert.assertEquals(true、subject.isAuthenticated()); //ユーザーがログインしたことを表明します //6、subject.logout();を 終了し ます 。
1.まず、新しいIniSecurityManagerFactoryを使用してSecurityManagerファクトリを作成し、ini構成ファイルを指定します。
2.次に、SecurityManagerを取得し、SecurityUtilsにバインドします。これはグローバル設定であり、一度設定できます。
3. SecurityUtilsを介してサブジェクトを取得します。これは、現在のスレッドに自動的にバインドされます。Web環境でリクエストの最後にバインドを解除する必要がある場合は、ユーザー名/パスワードなどの認証用トークンを取得します。
4. subject.loginメソッドを呼び出してログインすると、SecurityManager.loginメソッドに自動的に委任されてログインします。
5.認証が失敗した場合は、AuthenticationExceptionまたはそのサブクラス(DisabledAccountException(無効なアカウント)、LockedAccountException(ロックされたアカウント)、UnknownAccountException(間違ったアカウント)、ExcessiveAttemptsException(ログイン失敗が多すぎる)、IncorrectCredentialsException(不正な資格情報)、ExpiredCredentialsException(有効期限が切れた資格情報)など、詳細については継承を確認してください。ページに表示されるエラーメッセージについては、「ユーザー名エラー」/「パスワードエラー」ではなく「ユーザー名/パスワードエラー」を使用することをお勧めします。ユーザーがアカウントデータベースを不正にスキャンすること。
6.最後に、subject.logoutを呼び出して終了すると、SecurityManager.logoutメソッドに自動的に委任されて終了します。
総括する
オーセンティケーターは、Shiro APIのコアID認証エントリポイントである実際のIDベリファイアであり、独自の実装をカスタマイズできます。
オーセンティケーターは、マルチレルム認証のために対応するAuthenticationStrategyに委任できます。デフォルトでは、ModularRealmAuthenticatorはマルチレルム認証のためにAuthenticationStrategyを呼び出します。
オーセンティケーターは、対応するトークンをレルムに渡し、レルムから認証情報を取得します。例外を返さない/スローしない場合は、認証が失敗したことを意味します。ここで複数のレルムを構成でき、対応する順序と戦略でアクセスされます。