最新の安定バージョンについては、Spring Security 6.4.5 を使用してください! |
Kotlin の設定
Spring Security は、Spring Security Kotlin 構成の使用を示すサンプルアプリケーション [GitHub] (英語) を提供します。 |
HttpSecurity
Spring Security は、すべてのユーザーに認証を要求することをどのように認識しますか? Spring Security は、フォームベースの認証をサポートすることをどのように認識していますか? 実際には、SecurityFilterChain
と呼ばれるバックグラウンドで呼び出されている Bean があります。これは、次のデフォルトの実装で構成されています。
import org.springframework.security.config.annotation.web.invoke
@Bean
open fun filterChain(http: HttpSecurity): SecurityFilterChain {
http {
authorizeRequests {
authorize(anyRequest, authenticated)
}
formLogin { }
httpBasic { }
}
return http.build()
}
クラスに invoke 関数をインポートしていることを確認してください。場合によっては、IDE が関数を自動インポートしないため、コンパイルの問題が発生します。 |
上記のデフォルト構成:
アプリケーションへのリクエストでは、ユーザーの認証が必要であることを保証します
ユーザーがフォームベースのログインで認証できるようにします
ユーザーが HTTP 基本認証で認証できるようにします
この構成は、XML 名前空間の構成と非常に似ていることがわかります。
<http>
<intercept-url pattern="/**" access="authenticated"/>
<form-login />
<http-basic />
</http>
複数の HttpSecurity
複数の <http>
ブロックを持つことができるのと同じように、複数の HttpSecurity インスタンスを構成できます。重要なのは、複数の SecurityFilterChain
@Bean
を登録することです。例: 以下は、/api/
で始まる URL の異なる構成の例です。
import org.springframework.security.config.annotation.web.invoke
@EnableWebSecurity
class MultiHttpSecurityConfig {
@Bean (1)
public fun userDetailsService(): UserDetailsService {
val users: User.UserBuilder = User.withDefaultPasswordEncoder()
val manager = InMemoryUserDetailsManager()
manager.createUser(users.username("user").password("password").roles("USER").build())
manager.createUser(users.username("admin").password("password").roles("USER","ADMIN").build())
return manager
}
@Order(1) (2)
@Bean
open fun apiFilterChain(http: HttpSecurity): SecurityFilterChain {
http {
securityMatcher("/api/**") (3)
authorizeRequests {
authorize(anyRequest, hasRole("ADMIN"))
}
httpBasic { }
}
return http.build()
}
@Bean (4)
open fun formLoginFilterChain(http: HttpSecurity): SecurityFilterChain {
http {
authorizeRequests {
authorize(anyRequest, authenticated)
}
formLogin { }
}
return http.build()
}
}
1 | 通常の認証を構成する |
2 | @Order を含む SecurityFilterChain のインスタンスを公開して、どの SecurityFilterChain を最初に検討するかを指定します。 |
3 | http.antMatcher は、この HttpSecurity は /api/ で始まる URL にのみ適用可能であると述べています |
4 | SecurityFilterChain の別のインスタンスを公開します。URL が /api/ で始まらない場合は、この構成が使用されます。この構成は、1 の後に @Order 値があるため、apiFilterChain の後に考慮されます(@Order のデフォルトは持続しません)。 |