Spring Security用のJava Configの紹介

1概要

この記事は、ユーザーがXMLを使用せずにSpring Securityを簡単に設定できるようにするSpring Security用のJava設定の概要です。

Javaの設定はhttp://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/new-in-3.1.html[Spring 3.1]でSpringフレームワークに追加され、Springに拡張されました。 Spring 3.2 内のセキュリティで、注釈付きのクラス@ @ Configuration__で定義されています。

2 Mavenのセットアップ

MavenプロジェクトでSpring Securityを使用するには、最初にプロジェクト pom.xml spring-security-core 依存関係が必要です。

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>4.1.3.RELEASE</version>
</dependency>

最新版は常にhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22spring-security-core%22[here]にあります。

3 Java設定によるWebセキュリティ

Spring SecurityのJava設定の基本的な例から始めましょう。

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

あなたが気づいたかもしれないように、設定は基本的なメモリ内認証設定を設定します。

[[HTTP=]]

4 HTTPセキュリティ

SpringでHTTPセキュリティを有効にするには、 configure(HttpSecurity http) メソッドでデフォルトの設定を提供するために WebSecurityConfigurerAdapter を拡張する必要があります。

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .anyRequest().authenticated()
      .and().httpBasic();
}

上記のデフォルト設定では、アプリケーションへのすべての要求がフォームベースのログインまたはHTTP基本認証で認証されます。

また、これは次のXML構成とまったく同じです。

<http>
    <intercept-url pattern="/** ** " access="authenticated"/>
    <form-login/>
    <http-basic/>
</http>

5フォームログイン

興味深いことに、Spring Securityは有効になっている機能と送信されたログインを処理するURLに標準値を使用して、自動的にログインページを生成します。

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .anyRequest().authenticated()
      .and().formLogin()
      .loginPage("/login").permitAll();
}

ここで自動生成されたログインページはすぐに立ち上がって実行するのに便利です。

6. 役割による許可

ロールを使用して各URLに簡単な認証を設定しましょう。

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .antMatchers("/", "/home").access("hasRole('USER')")
      .antMatchers("/admin/** ** ").hasRole("ADMIN")
      .and()
     //some more method calls
      .formLogin();
}

access. を介して、type-safe API( hasRole )と式ベースのAPIの両方がどのように使用されているかに注目してください。

7. ログアウト

Spring Securityの他の多くの側面と同様に、ログアウトはフレームワークによって提供されるいくつかの素晴らしいデフォルトを持ちます。

デフォルトでは、ログアウト要求はセッションを無効にし、認証キャッシュをクリアし、 SecurityContextHolder をクリアし、ログインページにリダイレクトします。

  • これは簡単なログアウト設定です:**

protected void configure(HttpSecurity http) throws Exception {
    http.logout();
}

ただし、利用可能なハンドラをもっと制御したい場合は、より完全な実装が次のようになります。

protected void configure(HttpSecurity http) throws Exception {
    http.logout().logoutUrl("/my/logout")
      .logoutSuccessUrl("/my/index")
      .logoutSuccessHandler(logoutSuccessHandler)
      .invalidateHttpSession(true)
      .addLogoutHandler(logoutHandler)
      .deleteCookies(cookieNamesToClear)
      .and()
     //some other method calls
}

8認証

Spring Securityで認証を許可する別の方法を見てみましょう。

8.1. メモリ内認証

簡単なインメモリ構成から始めましょう。

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

8.2. JDBC認証

これをJDBCに移行するために必要なことは、アプリケーション内でデータソースを定義することです。そしてそれを直接使用します。

@Autowired
private DataSource dataSource;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth)
  throws Exception {
    auth.jdbcAuthentication().dataSource(dataSource)
      .withDefaultSchema()
      .withUser("user").password("password").roles("USER")
      .and()
      .withUser("admin").password("password").roles("USER", "ADMIN");
}

9結論

この簡単なチュートリアルでは、Spring Security用のJava Configurationの基礎を説明し、最も単純な設定シナリオを示すコードサンプルに焦点を当てました。