シロ原理入門

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を呼び出します。

オーセンティケーターは、対応するトークンをレルムに渡し、レルムから認証情報を取得します。例外を返さない/スローしない場合は、認証が失敗したことを意味します。ここで複数のレルムを構成でき、対応する順序と戦略でアクセスされます。

おすすめ

転載: blog.csdn.net/zy103118/article/details/109320376
おすすめ