Spring Security 実践ヒント: 分散オブジェクト SharedObject

Spring Security 実践ヒント: 分散オブジェクト SharedObject

[[378938]]

1. はじめに

前回の記事では、AuthenticationManager の初期化の詳細を分析しましたが、その中のコードの一部が多くの学生の注目を集めました。

  1. アプリケーションコンテキスト コンテキスト = http.getSharedObject(ApplicationContext.class);
  2. Captcha 認証プロバイダー captcha 認証プロバイダー = context.getBean( "captcha 認証プロバイダー" , Captcha 認証プロバイダー.class);

上記は、HttpSecurity オブジェクトから Spring のアプリケーション コンテキスト オブジェクト ApplicationContext を直接取得します。これはどうやって実現するのでしょうか? SharedObject の概念とは何ですか?今日はこれを理解しましょう。

2. 共有オブジェクト

Spring Security では、SharedObject はオブジェクトでもインターフェースでもなく、特定の種類の「共有可能な」オブジェクトを表す一般的な用語です。

名前が示すように、SharedObject は共有可能なオブジェクトを意味します。その機能は、異なるスコープ構成でオブジェクトを共有する場合に、一部のオブジェクトを SharedObject に変換することです。これは、分散オブジェクトに少し似ています。理解しやすくするために、関連するアーキテクチャを以下に示します。

構成クラスの構成

SharedObject を操作できるのは、AbstractConfiguredSecurityBuilder または HttpSecurityBuilder の実装クラスのみです。 1 つは SharedObject を登録することであり、もう 1 つは SharedObject を取得することです。

共有オブジェクトの登録

SharedObject は、クラス タイプがキー、インスタンスが値として HashMap に格納されます。

AuthenticationManagerBuilder の注入

よく知られている AuthenticationManagerBuilder がここで共有されています。

別の部分は、すべての HttpSecurityBuilder オブジェクトが初期化されるときに登録されます。初期化と構成は SecurityConfigurer によって完了します。

  1. パブリックインターフェース SecurityConfigurer<O, B は SecurityBuilder<O>> を拡張します {
  2.  
  3. void init(B ビルダー) は例外をスローします。
  4.  
  5. void configure(B builder) は例外をスローします。
  6. }

上記の 2 つのメソッドは、それぞれ HttpSecurityBuilder を初期化および構成するために使用されます。たとえば、よく知られている WebSecurityConfigurerAdapter は HttpSecurity を構成するために使用されます。 init メソッドには関連するコードがあります:

  1. プライベート Map<Class<?>, Object> createSharedObjects() {
  2. Map<Class<?>, Object> sharedObjects = new HashMap<>();
  3. 共有オブジェクトを putAll(localConfigureAuthenticationBldr.getSharedObjects());
  4. sharedObjects.put(UserDetailsS​​ervice.class、userDetailsS​​ervice());
  5. sharedObjects.put(ApplicationContext.class、コンテキスト);
  6. sharedObjects.put(ContentNegotiationStrategy.class、contentNegotiationStrategy);
  7. sharedObjects.put(AuthenticationTrustResolver.class、trustResolver);
  8. sharedObjectsを返します
  9. }

これは、記事の冒頭で ApplicationContext を取得できる根本的な理由でもあります。

SharedObject の取得と使用

SharedObject としてマークされているクラスはどれですか? SecurityConfigurer には、認証と承認に関連する特定の機能を構成するために使用される多くの実装があります。たとえば、OAuth2ClientConfigurer は OAuth2 クライアントを構成するために使用され、いくつかのよく使用されるオブジェクトが SharedObject として設定されます。

  1. パブリックOAuth2ClientConfigurer<B> クライアント登録リポジトリ(クライアント登録リポジトリ クライアント登録リポジトリ) {
  2. Assert.notNull(clientRegistrationRepository, "clientRegistrationRepository は null にできません" );
  3. this.getBuilder().setSharedObject(ClientRegistrationRepository.class、clientRegistrationRepository);
  4. これを返します
  5. }

HttpSecurity 構成の他の場所で ClientRegistrationRepository を使用する必要がある場合は、取得メソッドを記述しなくても、記事の冒頭と同様に getSharedObject を介して直接取得できます。

3. 結論

SharedObject は、Spring Security が提供する非常に便利な機能です。オブジェクトを別の場所で再利用する必要がある場合は、SharedObject として登録するか、または冒頭で示したように Spring IoC に直接挿入して取得することもできます。この機能により、構成が簡素化され、コードの読みやすさが向上し、Spring Security の DSL 機能の基盤が築かれます。

この記事はWeChatの公開アカウント「Coder Xiaopangge」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Coder Xiaopangge の公式アカウントまでご連絡ください。

<<:  超詳細な分散スケジューリングフレームワーク Elastic-job の実践的な説明

>>:  インフラストラクチャを自動化する方法

推薦する

ウェブマスターネットワークニュース:DianpingがO2Oショッピングに挑戦、しかしTaobaoブランドは総じて失敗

1. DianpingがO2Oショッピングの市場を調査飲食と生活サービスを主に提供するDianpin...

マルチクラウド VS スカイコンピューティング、企業はクラウドコンピューティング戦略をどのように選択すべきでしょうか?

クラウド コンピューティングをどのように使用するかは、企業のアプリケーション戦略アーキテクチャと計画...

おもしろさも大きなビジネス:ジョークを販売する国内ウェブサイトの徹底レビュー

Chrome に対応していない Web サイトを想像できますか? コンテンツのほとんどをボットによっ...

人民日報がマイクロソフトと提携し、マイクロソフト XiaoIce と Bing 検索を搭載した英語クライアント バージョン 2.0 をリリース

人民日報は6月11日、国家モバイルニューメディア集約プラットフォーム「人民アカウント」の正式ローンチ...

ウェブサイト編集者がSEOをどのように活用しているかについて簡単に説明します

最近、エマーはLexun Mobile Expert Forumの編集部の同僚に簡単なSEOスキルの...

alphavps-$2/512m メモリ/100g ハードディスク/1T トラフィック/ノースカロライナ/初月無料

alphavps.net に安価な VPS があることがわかったので、みんなに試してもらうために共有...

Discuz! A5 共同推薦: Blue Ideal ログインリマインダー

6 月 15 日 Web マスター ネットワーク ニュース: Discuz! X2.5 の正式リリー...

新浪微博の王高飛CEO:新浪微博の究極の目標は、すべてのメディアを置き換えることだ

  以下はスピーチの記録です。司会者 Wen Chu: 皆さんこんにちは!王高飛:皆さんこんにちは!...

銀聯 VS アリペイ: 10年間の敵対関係が共和制へ移行

Titanium Media Note: 過去2年間、AlipayやYu'ebaoなどのイン...

テンセントクラウド:新規顧客と既存顧客は同じ更新価格、月額102元、8Gメモリ/4コア/100g SSD/10M帯域幅、上海/北京/成都/南京/広州

Tencent Cloudは最近、高構成で低価格のクラウドサーバーを数台発売しました。主にゲーム「幻...

化粧品業界におけるインターネットマーケティング戦略の分析

新たな経済発展の状況は、新たなマーケティングルールをもたらしました。21年はまさにインターネットマー...

農業ウェブサイトでのPPCクリック数の増加の裏にある真実

業界ウェブサイトが、複数のカテゴリを扱うポータルから、特定の製品セグメントにのみ焦点を当てたポータル...

下手な初心者SEO

SEO に関しては、私は初心者であり、私の SEO に関する理解は、外部リンクの投稿、フレンドリー ...

草の根ウェブマスターは、検索エンジンアルゴリズムの頻繁な変更にどのように対処できるでしょうか?

インターネットに注目している友人は、最近、Google のランキング アルゴリズムの考え方が変わり、...