簡単な紹介
- セキュリティマネージャ:セキュリティマネージャ、史郎のコアコンポーネント。シロセキュリティマネージャインスタンスによって内部コンポーネントを管理し、その安全管理を介してさまざまなサービスを提供します。
- 認証:認証、認定AuthenticationTokenは有効です。
- 承認者:承認者、役割と権限を扱います。
- SessionManagerの:セッションマネージャ、管理セッション。
- 件名:現在の操作体は、現在のユーザーを表します。
- SubjectContext:件名コンテキスト・データ・オブジェクト。
- AuthenticationToken:認証トークン情報(ユーザー名、パスワードなど)。
- ThreadContext:スレッドコンテキストオブジェクトは、オブジェクトが現在のスレッドに結合する責任があります。
史郎の学習と使用の過程では、我々はすべてのSecurityManagerインタフェースは四郎の中で最も中央インタフェースである知っています。私たちは、この界面に沿って分析しました。
次のコードは、SecurityManagerのインタフェースを定義されています。
public interface SecurityManager extends Authenticator, Authorizer, SessionManager { /** * 登录 */ Subject login(Subject subject, AuthenticationToken authenticationToken) throws AuthenticationException; /** * 登出 */ void logout(Subject subject); /** * 创建Subject */ Subject createSubject(SubjectContext context); }
これは、SecurityManagerの中に3つのメソッドを定義して、すなわち、ログインログアウトや件名を作成します。通常、私たちはこのように使用するために時間を使います。まず、ログインメソッドを呼び出すことにより、着信トークンを認証するためのログイン認証情報をSubjectオブジェクトを作成し、そして。
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123"); subject.login(token);
SecurityUtils分析
史郎での使用に便利なツールクラスSecurityUtilsを提供し、SecurityUtilsコア機能は、セキュリティマネージャと件名を得ることです。両方のインターフェイスは、開発時の使用のためにしろ周辺インターフェースが設けられています。
それは、アプリケーション内のSecurityManagerオブジェクトは、単一の存在であると言うことです、SecurityUtilsで定義された静的にSecurityManagerを使用してください。
private static SecurityManager securityManager;
1.取得のSecurityManager
最初はThreadContextから取得し、ない場合は、SecurityUtilsプロパティからのSecurityManagerを取得しました。これは、オブジェクトのSecurityManagerのインスタンスを存在する、または例外をスローする必要があります。
public static SecurityManager getSecurityManager() throws UnavailableSecurityManagerException { SecurityManager securityManager = ThreadContext.getSecurityManager(); if (securityManager == null) { securityManager = SecurityUtils.securityManager; } if (securityManager == null) { String msg = "No SecurityManager accessible to the calling code, either bound to the " + ThreadContext.class.getName() + " or as a vm static singleton. This is an invalid application " + "configuration."; throw new UnavailableSecurityManagerException(msg); } return securityManager; }
2.取得件名
、存在して新しい件名を作成し、その後はThreadContextにあなたが得ることができるので、次の時間が保存されていない場合はまず、はThreadContextから取得しました。
public static Subject getSubject() { Subject subject = ThreadContext.getSubject(); if (subject == null) { subject = (new Subject.Builder()).buildSubject(); ThreadContext.bind(subject); } return subject; }
buildSubject()メソッドは、テーマを作成するためにSubject.Builderクラスによって提供される上記のコードで重要です。あなたが作成するとSubjectオブジェクトもSubjectContext、その件名を作成し、それが一から一ですSubjectContextされます。次のコードは、Subject.Builderクラスのコンストラクタです。
public Builder(SecurityManager securityManager) { if (securityManager == null) { throw new NullPointerException("SecurityManager method argument cannot be null."); } this.securityManager = securityManager; // 创建了SubjectContext实例对象 this.subjectContext = newSubjectContextInstance(); if (this.subjectContext == null) { throw new IllegalStateException("Subject instance returned from 'newSubjectContextInstance' " + "cannot be null."); } this.subjectContext.setSecurityManager(securityManager); }
buildSubject()メソッドは、実際のSecurityManagerインタフェースcreateSubject(SubjectContext subjectContext)法と呼ばれています。
public Subject buildSubject() { return this.securityManager.createSubject(this.subjectContext); }
概要
この章のショーのSecurityManagerインタフェースcreateSubject(SubjectContext subjectContext)メソッド詳細な分析SecurityUtils.getSubject()の。また、私たちは、件名の分析に2つの方法の詳細な分析を行います。
また、当社は、SecurityManagerのセキュリティ管理を実現するためのさまざまなサービスを提供するようにSecurityManagerが、認証、オーソ、SessionManagerの3つのインターフェースを継承したでしょう。次の記事で分析したがオーセンティケータ、オーソ、SessionManagerのは、私たちは基本的に習得のSecurityManagerます。