序文
この章では、ソースコード解析の四郎のログイン認証とログイン認証方針を説明します
方法
史郎のログイン認証ソースの解析
認証トークンのログインの方法1.件名
2. Subjectクラスは、実際に彼はSecurityManagerクラスのDelegatingSubjectを実装することで、検証を完了するために委託されるだけのインターフェーストークンです
3.セキュリティマネージャは、インターフェースの「心」として、実際のログイン方法がauthenticateメソッドDefaultSecurityManagerを呼び出すことによって検証される上に、クラスを達成するのを助けるために多くの仕事があります
4. authenticateメソッドは、親クラスAuthenticatingSecurityManagerによって行われます
それはどこにバリの友人であるオーセンティケータの属性を持っています:
5.認証doAuthenticate方法は、検証を完了するために、デフォルトの実装であるModularRealmAuthenticator
単一領域を直接比較した場合、トークンデータ及び領域に、取得するために使用される6 doAuthenticateレルム方法は、(検証)を比較します。複数のレルムはAuthenticationStrategy(検証ポリシー)によって検証される必要があります場合。
二、史郎のログイン認証戦略
1.概要
3つの検証ポリシーの合計シロにおいて、マルチレルム条件を検証するために使用されます。
AllSuccessfulStrategy | すべてが満たされている場合 |
AtLeastOneSuccessfulStrategy | の少なくとも一つのケースに会います |
FirstSuccessfulStrategy | 少なくとも一つを満たす場合には、その後の検証レルムを停止するには |
デフォルトの認証ポリシーがある AtLeastOneSuccessfulStrategy
2.コーディングを確認します
1)我々は2つの領域(IniRealm、JDBCレルム)を設定しました
プロファイルには、次のように変更します。
[main]
dataSource = com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass = oracle.jdbc.driver.OracleDriver
dataSource.jdbcUrl = jdbc:oracle:thin:@localhost:1521:orcl
dataSource.user = scott
dataSource.password = tiger
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
iniRealm = cn.edu.ccut.test.MyRealm
# $相当于spring的依赖注入
jdbcRealm.dataSource = $dataSource
authenticationStrategy = org.apache.shiro.authc.pam.AllSuccessfulStrategy
securityManager.authenticator.authenticationStrategy = $authenticationStrategy
securityManager.realms = $jdbcRealm,$iniRealm
MYREALMは、次のように私のカスタムコードがあるIniRealmです。
package cn.edu.ccut.test;
import org.apache.shiro.realm.text.IniRealm;
/**
* @Auther:jwang
* @Date:2019/5/10
* @Description:cn.edu.ccut.test
* @Version 1.0
**/
public class MyRealm extends IniRealm {
public MyRealm(){
this.setResourcePath("classpath:user.ini");
}
}
彼は、ユーザー名とパスワードを設定するために使用user.ini、user.iniを使用しました。
我々は変化がないことを学んだ前にJDBCレルムれました:
当社の戦略がある。この時間 AllSuccessfulStrategy、つまり、すべての条件が満たされなければならない分野、我々は1234年入り、zhangsanによって検証、
SAのSAと検証が失敗しました:
2)ここでは、戦略を変更 FirstSuccessfulStrategy
このとき、入力リージと5678も言っていない、成功したかどうかを確認することができますFirstSuccessfulStrategyが成功する最初のレルム成功です!これは特に重要です!
3)最後に、我々は、デフォルトのポリシーを試してみましたAtLeastOneSuccessfulStrategy
我々はまだリージと5678ログインを使用します。
サsaログインと使用: