1. [追加の依存
1 <依存性> 2 <のgroupId> org.springframework.boot </ groupIdを> 3 <たartifactId>ばねブートスタータウェブ</たartifactId> 4 </依存> 5 <依存性> 6 <のgroupId> MySQLの</のgroupId> 7 <たartifactId> MySQLのコネクタからJava </たartifactId> 8 </依存> 9 <依存性> 10 <のgroupId> org.springframework.boot </ groupIdを> 11 <たartifactId>ばねブートスタータ試験</たartifactId> 12 <スコープ>テスト</スコープ> 13 </依存> 14 <依存性> 15 <のgroupId> org.apache.shiro </ groupIdを> 16 <たartifactId>シロスプリング</たartifactId> 17 <バージョン> 1.4.0 </バージョン> 18 </依存> 19
2.史郎認証と承認プロセス
2.1共通API:
// 対応する役割がある場合 subject.hasRole(「ルート」) // サブジェクト名取得 subject.getPrincipalを() // 対応する文字、ノーリターン値判定の内部に直接にSecurityManagerがあるかどうかを確認 subject.checkRole(「管理者は、 " ) // チェックに対応する役割がある場合 subject.hasRole(" ADMIN」) // ログ subject.logoutは();
2.2史郎認証プロセス:
テストコード:
1 パッケージnet.xdclass.xdclassshiro; 2 。3 インポートorg.apache.shiro.SecurityUtils; 4 インポートorg.apache.shiro.authc.UsernamePasswordToken; 5 インポートorg.apache.shiro.mgt.DefaultSecurityManager; 6 インポートorg.apache.shiro .realm.SimpleAccountRealm; 7。 インポートorg.apache.shiro.subject.Subject; 8。 インポートorg.junit.Before; 9。 インポートorg.junit.Test; 10 11 / ** 12である *四郎認証処理: 13 * 1は、セキュリティマネージャを構成環境 14 * 2.コールSubject.loginは()認証を実行します 15 *認証3.SecurityManager 16 *行う認証4.Authenticator 17 *レルムがベリファイ 18である * / 19 パブリック クラスQuicksStratTest { 20は 21である / ** 22れる * accountRealm同等の効果データベース 23がある * / 24 プライベート SimpleAccountRealm accountRealm = 新しい新しいSimpleAccountRealm(); 25 26は、 プライベート DefaultSecurityManager defaultSecurityManager = 新しい新しいDefaultSecurityManager(); 27 28 @Before 29 公共 ボイドのinit(){ 30 //データ・ソース初期化 31である accountRealm.addAccount( "LCH"、 "123" ;) 32 accountRealm.addAccount( "ジャック"、 "345" ) 33は、 // ビルド環境 34は 、defaultSecurityManager.setRealm(accountRealm) 35 36 } [37 38であります @テスト 39 公共 ボイドtestAuthentication(){ 40 // 現在のコンテキストに設定 41である SecurityUtils.setSecurityManager(defaultSecurityManager); 42である // 現在の主題を設定する(アプリケーションがユーザを適用) 43である 件名件名= SecurityUtils.getSubject(); 44であります // シミュレートされたユーザ入力 45 UsernamePasswordToken usernamePasswordToken = 新しい新 UsernamePasswordToken( "LCH"、 "123" ); 46である //は、実際のSecurityManager = this.securityManager.login件名件名(このトークン)ログインメソッドを呼び出す 47 subject.login( usernamePasswordToken); 48 のSystem.out.println( "認証結果(許可された場合):" + subject.isAuthenticated()); // trueにプリント 49 50 51である } 52です }
ユーザ認証情報のオーセンティケータと呼ばれるこのログイン方法上記usernamePasswordToken
2.3史郎の承認プロセス:
テストコード:
1 パッケージnet.xdclass.xdclassshiro; 2 。3 インポートorg.apache.shiro.SecurityUtils; 4 インポートorg.apache.shiro.authc.UsernamePasswordToken; 5 インポートorg.apache.shiro.mgt.DefaultSecurityManager; 6 インポートorg.apache.shiro .realm.SimpleAccountRealm; 7 インポートorg.apache.shiro.subject.Subject; 8 インポートorg.junit.Before; 9 インポートorg.junit.Test; 10 11 / ** 12である *四郎認証プロセスとAPIを使用する: 13である * 1。地殻環境のSecurityManager 14 * 2.Subject承認を実行 15 * 3.SecurityManager認証および許可 16 * 4.Authenticator許可実行 17 レルム検証* 5許可を 18れる * / 19 パブリック クラスQuicksStratTest2 { 20は、 21である / ** 22れる * accountRealm同等の効果データベース 23がある * / 24 プライベート accountRealm = SimpleAccountRealm 新しい新しいSimpleAccountRealm(); 25 26である プライベート DefaultSecurityManager defaultSecurityManager = 新しい新; DefaultSecurityManager() 27 28 @Before 29 公共 ボイドのinit(){ 30 //は、データ・ソースの初期化、ロール接合にユーザ 31は accountRealm.addAccount( "LCH"、 "123"、 "ルート"、 "管理" ); 32 accountRealm.addAccount( "ジャック"、 "345"、 "ユーザー" ) ; 33 // ビルド環境 34である defaultSecurityManager.setRealm(accountRealm); 35 } 36 37 [ @Test 38は 公共 ボイドtestAuthentication(){ 39 //は現在のコンテキストに設定 40 SecurityUtils.setSecurityManager(defaultSecurityManager)を、 41れる // 現在の被写体(アプリケーション・アプリケーションを設定しますユーザ) 42は =件名件名SecurityUtils.getSubject(); 43である // シミュレーションユーザ入力 44は UsernamePasswordToken usernamePasswordToken = 新しい新 UsernamePasswordToken( "LCH"、 "123" ); 45 //が実際にログイン方法のSecurityManager件名対象= this.securityManager.login(このトークンを呼び出し); 46は subject.login(usernamePasswordToken); 47 48 のSystem.out.println( "認証結果(許可した場合):" + subject.isAuthenticated()); // 結果:trueに 49 // 最終呼び出しは組織です。方法apache.shiro.authz.ModularRealmAuthorizer.hasRole 50 のSystem.out.println( "に対応する文字がある場合:" + subject.hasRole( "ルート" ))。// 結果:trueに 51 // ログインアカウント取得 52 のSystem.out.println( "getPrincipalを():" + subject.getPrincipal()); // getPrincipal():LCH 53 subject.logout(); 54 のSystem.out.println後(「ログアウト認証結果:「+ subject.isAuthenticated()); // ログアウト認証結果:falseに 55 56は 57である } 58 }
subject.hasRole()メソッドは、実際に呼び出され hasRoleも権限チェックのSecurityManagerのメソッドを:
hasRoleもSecurityManagerのメソッドは、チェックするためにhasRoleも道の承認者が呼び出されます
これは3つのカテゴリーを達成しています:
使用SimpleAccountRealmテストコードは、その承認ロジックを発見した実装のAuthorizingRealmは次の通りであることを、我々は最初のクラスに入るので、ここでは、AuthorizingRealmから継承されます。