(C)スプリングセキュリティ - コア構成解釈

要約:オリジナルソース  https://www.cnkirito.moe/spring-security-3/  「徐」は予約済みの要約を転載することを歓迎、ありがとうございました!



春のセキュリティ春のセキュリティの設定を使用して、前の記事「春のセキュリティ(2)-Guides」には、分析を行うための構成に、この記事に私たちのアプリケーションを保護する方法を知っていることです。

3コア構成解釈

3.1特長

これは、入門ガイド設定項目春のセキュリティです。

@Configuration 
@EnableWebSecurity 
パブリック クラス WebSecurityConfigが拡張WebSecurityConfigurerAdapter { 

  @Overrideは、
  保護された のconfigure(HttpSecurity HTTP)スロー例外{ 
      HTTP 
          .authorizeRequests()
              .antMatchersを( "/"、 "/ホーム" ).permitAll()
              .anyRequest()。認証されました( )
              .AND()
          .formLogin()
              .loginPage( "/ログイン" 
              .permitAll()
              .AND()
          .logout()
              .permitAll(); 
  } 

  @Autowired
  公共 のボイド configureGlobal(AuthenticationManagerBuilder払い)がスロー例外{ 
      AUTH 
          .inMemoryAuthentication()
              .withUser( "管理者")パスワード( "admin"を)の役割( "USER"。); 
  } 
}

 

また、「/」、「/ホーム」(ホーム)、「/ログイン」(ログイン)、「/ログアウト」(償却)、他のパスが認証される必要があります。上記の設定javaconfigした後、我々のアプリケーションは、次のような機能を持っています。

  • 不正なユーザが任意の保護されたリソースにアクセスしようとするとログインページに「/ログイン」パスを指定し、「/ログイン」にジャンプします。
  • ページをログアウトするデフォルトの「/ログアウト」を指定します
  • USERの役割を持つ管理者/ユーザー名やパスワードなどの管理を使用してユーザ認証装置におけるコンフィギュレーションメモリ、

3.2 @EnableWebSecurity

当社独自の定義の設定クラスWebSecurityConfigもWebSecurityConfigurerAdapterを継承し、@EnableWebSecurityコメントを追加しました。あなたはそれが実際に組み合わせたコメントで、より大きな役割だ人は、間違いなく、設定で決定的な役割を果たして@EnableWebSecurity不思議に思われるかもしれません。

@import({。WebSecurityConfiguration クラス// <2> 
      SpringWebMvcImportSelector。クラス })// <1> 
@EnableGlobalAuthentication // <3> 
@Configuration
 パブリック @のインタフェースEnableWebSecurity {
    ブールデバッグ()デフォルト はfalse 
}

 

<1>  SpringWebMvcImportSelectorアクションが、現在の環境がSpringMVCを含むかどうかを決定することである非ばねのばねセキュリティ環境として使用することができ、このアノテーションを使用するので、区別繰り返しのDispatcherServletを避けるために配置されています。@import注釈が含ま@EnableWebSecurity注釈活性化されたコンフィギュレーション・クラス:@import springboot外部導入するためのコメントを提供するように配置され、それはのように理解することができます。

<2>  WebSecurityConfiguration名前が示すように、次のセクションでは、セキュアなWebを構成するために、詳細ます使用されています。

<3>  @EnableGlobalAuthentication注釈付きソースを次のように

@import(AuthenticationConfiguration。クラス
@Configuration 
パブリック @のインタフェースEnableGlobalAuthentication { 
}

 

言い換えれば:@EnableWebSecurity完了した作業がWebSecurityConfiguration、AuthenticationConfigurationこれら2つのコア・コンフィギュレーション・クラスをロードされ、それがセキュリティ情報のセキュリティを設定するために業務のばね分離を有する、認証情報は、2つの部分で構成されています。@importで同じ点は、それが実際にAuthenticationConfigurationような構成クラスが認証関連コアクラスを構成するために使用される活性化することに留意されたいです。

WebSecurityConfiguration

この構成クラスでは、非常に重要な豆が登録されています。

@Configuration
 パブリック クラスWebSecurityConfiguration { 

    // DEFAULT_FILTER_NAME = "springSecurityFilterChain" 
    @Bean(名= AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)
     公衆フィルターspringSecurityFilterChain()がスロー例外{ 
        ... 
    } 

 }

 

<! - 春のセキュリティ- > 
   < フィルタ> 
       < フィルタ名> springSecurityFilterChain </ フィルタ名> 
       < フィルタクラス> org.springframework.web.filter.DelegatingFilterProxy </ フィルタリングクラス> 
   </ フィルター> 

   < フィルター-mapping > 
       < フィルタ名> springSecurityFilterChain </ フィルタ名> 
       < のurl-pattern > / * </ のurl-pattern > 
   </ のfilter-mapping >

 

そして、統合springboot後、設定され、このようなXMLは、Javaで置換されています。WebSecurityConfigurationは声明springSecurityFilterChain役割に完成し、そして最終的にリクエストを傍受する責任このプロキシクラスは、(セキュリティフィルタリングを達成するために、スプリング、このクラスはDelegatingFilterProxy春のセキュリティパッケージではなく、Webパッケージにすることをプロキシモデルを確認しDelegatingFilterProxyしますデカップリング)。springboot前に使用していない、ほとんどの人が「springSecurityFilterChainは」という用語は不慣れではありませんする必要があり、彼は全体の認定入り口のフィルタスプリングセキュリティの中核です。、あなたは一度XML構成でweb.xmlに以下の設定を行い、春のセキュリティを有効にします:

AuthenticationConfiguration

@Configuration 
@import(ObjectPostProcessorConfiguration クラスパブリック クラスAuthenticationConfiguration { 

      @Bean 
    公共AuthenticationManagerBuilder authenticationManagerBuilder(
            ObjectPostProcessor <OBJECT> objectPostProcessor){
         戻り 新しいAuthenticationManagerBuilder(objectPostProcessor)を、
    } 

      公共 AuthenticationManager getAuthenticationManager()スロー例外{ 
        ... 
    } 

}

 

3.3 WebSecurityConfigurerAdapterメインタスクAuthenticationConfiguration、それはグローバル認証マネージャAuthenticationManagerを生成する責任があります。「春のセキュリティ(a)の-Architecture概要」を忘れないでください、私たちはAuthenticationManagerは、Identity Managerの中核である、春のセキュリティの認証システムを導入します。

アダプタのモデルが広く春に使用され、給付の構成のアダプタを使用することは、我々が選択的に他の非関連する構成を覆うことなく、設定の一部を変更したい設定することができるということです。WebSecurityConfigurerAdapter私たちは、あなたが書き換えるために、修正したいコンテンツを選択することができ、そしてそれは3つのconfigureオーバーロードされたメソッドを提供しています、それが私たちの主な関心事です。

WebSecurityConfigurerAdapter中的のconfigureWebSecurityConfigurerAdapter中的のconfigure

あなたはそれがAuthenticationManagerBuilder、WebSecurity社、HttpSecurityパーソナライズされた構成で、それぞれのパラメータを知ることができます。

HttpSecurity一般的な構成

@Configuration 
@EnableWebSecurity 
パブリック クラス CustomWebSecurityConfigは拡張WebSecurityConfigurerAdapter { 

    @Overrideは、
    保護された のconfigure(HttpSecurity HTTP)スロー例外{ 
        HTTP 
            .authorizeRequests()
                (.antMatchers、 "/リソース/ **"、 "/サインアップ"を"/約" ).permitAll ()
                .antMatchers( "/admin/**").hasRole("ADMIN" 
                .antMatchers( "/db/**").access("hasRole('ADMIN ')とhasRoleも(' DBA ')" 
                .anyRequest()。認証された() 
                .AND()
            .formLogin()
                .usernameParameter( "ユーザ名" 
                .passwordParameter( "パスワード" 
                .failureForwardUrl( "/ログイン?エラー" 
                .loginPage( "/ログイン" 
                .permitAll()
                .AND()
            .logout()
                .logoutUrl ( "/ログアウト" 
                .logoutSuccessUrl( "/インデックス" 
                .permitAll()
                .AND()
            .httpBasic()
                .DISABLE();
    } 
}

 

authorizeRequests(傍受する)構成パスは、役割、認証情報に対応するパスにアクセスするための権限を示しています。上記と(それぞれ、構成の根として一般的な構成のJava設定構成HttpSecurity、前記HTTPである)(終了タグのXML構成に相当)モジュールの構成に相当し、及び()HttpSecurity自体を返し、したがって、連続して設定することができます。その構成を意味することも、変数自体を通じて推測するのは非常に簡単です、

  • 関連する構成フォーム認証に対応formLogin()
  • ログアウトの構成に対応するログアウト()
  • httpBasic()を使用すると、基本的なログインを設定することができます

彼らは例外なく、これらの構成項目は、コンフィギュラクラスを返され、すべてのHTTP設定がHttpSecurity mainメソッドを調べることで学ぶことができ、セキュリティの設定に関連するHTTPリクエストを表します。

http://kirito.iocoder.cn/QQ%E5%9B%BE%E7%89%8720170924223252.pnghttp://kirito.iocoder.cn/QQ%E5%9B%BE%E7%89%8720170924223252.png

あなたは完全に、しかし、springboot春のセキュリティと使用するのに十分な自動設定をhttpプロトコルの構成のすべてを把握するためにはある程度の知識を持っている必要があります。それぞれが構成器(egFormLoginConfigurer、CsrfConfigurer)はHttpConfigurer設定項目の改良です。

WebSecurityBuilder

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web
            .ignoring()
            .antMatchers("/resources/**");
    }
}

 

AuthenticationManagerBuilder以笔者的经验,这个配置中并不会出现太多的配置信息。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
            .withUser("admin").password("admin").roles("USER");
    }
}

 

细心的朋友会发现,在前面的文章中我们配置内存中的用户时,似乎不是这么配置的,而是:想要在WebSecurityConfigurerAdapter中进行认证相关的配置,可以使用configure(AuthenticationManagerBuilder auth)暴露一个AuthenticationManager的建造器:AuthenticationManagerBuilder 。如上所示,我们便完成了内存中用户的配置。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("admin").password("admin").roles("USER");
    }
}

 

アプリケーションでのみWebSecurityConfigurerAdapterがある場合、それらの間のギャップは無視することができ、メソッド名は、両者の違いから見ることができます。@AutowiredはAuthenticationManagerBuilderがグローバルアイデンティティで注入された使用、スコープは、複数のWebSecurityConfigurerAdapterにまたがることができます安全制御方法に影響と  protected configure()匿名内部クラスと同様に、その範囲限定内部WebSecurityConfigurerAdapter。この違いについては、参照は、私が提起した発行することができる春のセキュリティ#のissues4571を公式文書は、複数のWebSecurityConfigurerAdapterシーンやデモの構成は、このシリーズの今後の記事で解釈されます示して

おすすめ

転載: www.cnblogs.com/lywJ/p/10984965.html