クラス HttpSecurity
java.lang.ObjectSE
org.springframework.security.config.annotation.AbstractSecurityBuilder<DefaultSecurityFilterChain>
org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder<DefaultSecurityFilterChain, HttpSecurity>
org.springframework.security.config.annotation.web.builders.HttpSecurity
- 実装済みのインターフェース一覧:
SecurityBuilder<DefaultSecurityFilterChain>, HttpSecurityBuilder<HttpSecurity>
public final class HttpSecurity
extends AbstractConfiguredSecurityBuilder<DefaultSecurityFilterChain, HttpSecurity>
implements SecurityBuilder<DefaultSecurityFilterChain>, HttpSecurityBuilder<HttpSecurity>
HttpSecurity は、名前空間構成における Spring Security の XML <http> 要素に似ています。特定の http リクエストに対して Web ベースのセキュリティを構成できます。デフォルトでは、すべてのリクエストに適用されますが、authorizeHttpRequests(Customizer) または他の同様の方法を使用して制限できます。使用例
最も基本的なフォームベースの構成を以下に示します。この構成では、リクエストされる URL には、ロール "ROLE_USER" を持つユーザーが必要であることが必要です。また、ユーザー名 "user"、パスワード "password"、ロール "ROLE_USER" を持つユーザーを使用して、メモリ内認証スキームを定義します。追加の例については、HttpSecurity の個々のメソッドの Java Doc を参照してください。
@Configuration
@EnableWebSecurity
public class FormLoginSecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) {
http
.authorizeHttpRequests((authorize) -> authorize
.requestMatchers("/**").hasRole("USER")
)
.formLogin(withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
- 導入:
- 3.2
- 関連事項:
ネストされたクラスの概要
ネストされたクラスコンストラクター概要
コンストラクターコンストラクター説明HttpSecurity(ObjectPostProcessor<ObjectSE> objectPostProcessor, AuthenticationManagerBuilder authenticationBuilder, MapSE<ClassSE<?>, ObjectSE> sharedObjects) 新しいインスタンスを作成します方法の概要
修飾子と型メソッド説明addFilter(jakarta.servlet.Filter filter) セキュリティフレームワーク内で提供されるフィルターのいずれかのインスタンスであるか、拡張する必要があるFilterを追加します。addFilterAfter(jakarta.servlet.Filter filter, ClassSE<? extends jakarta.servlet.Filter> afterFilter) 既知のFilterクラスの 1 つの後にFilterを追加できます。addFilterAt(jakarta.servlet.Filter filter, ClassSE<? extends jakarta.servlet.Filter> atFilter) 指定したフィルタークラスの場所にフィルターを追加します。addFilterBefore(jakarta.servlet.Filter filter, ClassSE<? extends jakarta.servlet.Filter> beforeFilter) 既知のFilterクラスの 1 つの前にFilterを追加できます。anonymous(Customizer<AnonymousConfigurer<HttpSecurity>> anonymousCustomizer) 匿名ユーザーの表示方法を構成できます。authenticationManager(AuthenticationManager authenticationManager) デフォルトのAuthenticationManagerを構成します。authenticationProvider(AuthenticationProvider authenticationProvider) AuthenticationProviderを追加して使用できるようにしますauthorizeHttpRequests(Customizer<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry> authorizeHttpRequestsCustomizer) RequestMatcher実装を使用してHttpServletRequestに基づいてアクセスを制限できます(つまりprotected void各SecurityConfigurer.configure(SecurityBuilder)メソッドを呼び出す前に呼び出されます。cors(Customizer<CorsConfigurer<HttpSecurity>> corsCustomizer) 使用するCorsFilterを追加します。csrf(Customizer<CsrfConfigurer<HttpSecurity>> csrfCustomizer) CSRF 保護を有効にします。exceptionHandling(Customizer<ExceptionHandlingConfigurer<HttpSecurity>> exceptionHandlingCustomizer) 例外処理を構成できます。formLogin(Customizer<FormLoginConfigurer<HttpSecurity>> formLoginCustomizer) フォームベースの認証をサポートすることを指定します。headers(Customizer<HeadersConfigurer<HttpSecurity>> headersCustomizer) セキュリティヘッダーをレスポンスに追加します。httpBasic(Customizer<HttpBasicConfigurer<HttpSecurity>> httpBasicCustomizer) HTTP 基本認証を構成します。jee(Customizer<JeeConfigurer<HttpSecurity>> jeeCustomizer) コンテナーベースの事前認証を設定します。logout(Customizer<LogoutConfigurer<HttpSecurity>> logoutCustomizer) ログアウトのサポートを提供します。oauth2AuthorizationServer(Customizer<OAuth2AuthorizationServerConfigurer> oauth2AuthorizationServerCustomizer) OAuth 2.1 認証サーバーのサポートを構成します。oauth2Client(Customizer<OAuth2ClientConfigurer<HttpSecurity>> oauth2ClientCustomizer) OAuth 2.0 クライアントのサポートを構成します。oauth2Login(Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer) OAuth 2.0 または OpenID Connect 1.0 プロバイダーを使用して認証サポートを構成します。oauth2ResourceServer(Customizer<OAuth2ResourceServerConfigurer<HttpSecurity>> oauth2ResourceServerCustomizer) OAuth 2.0 リソースサーバーのサポートを構成します。oidcLogout(Customizer<OidcLogoutConfigurer<HttpSecurity>> oidcLogoutCustomizer) oneTimeTokenLogin(Customizer<OneTimeTokenLoginConfigurer<HttpSecurity>> oneTimeTokenLoginConfigurerCustomizer) ワンタイムトークンログインサポートを構成します。passwordManagement(Customizer<PasswordManagementConfigurer<HttpSecurity>> passwordManagementCustomizer) パスワード管理のサポートを追加します。protected DefaultSecurityFilterChainサブクラスはこのメソッドを実装して、返されるオブジェクトを構築する必要があります。portMapper(Customizer<PortMapperConfigurer<HttpSecurity>> portMapperCustomizer) AbstractConfiguredSecurityBuilder.getSharedObject(Class)から利用可能なPortMapperを構成できます。redirectToHttps(Customizer<HttpsRedirectConfigurer<HttpSecurity>> httpsRedirectConfigurerCustomizer) チャネルセキュリティを設定します。rememberMe(Customizer<RememberMeConfigurer<HttpSecurity>> rememberMeCustomizer) Remember Me 認証の構成を許可します。requestCache(Customizer<RequestCacheConfigurer<HttpSecurity>> requestCacheCustomizer) リクエストキャッシュの構成を許可します。requiresChannel(Customizer<ChannelSecurityConfigurer<HttpSecurity>.ChannelRequestMatcherRegistry> requiresChannelCustomizer) 使用すべきではありません。saml2Login(Customizer<Saml2LoginConfigurer<HttpSecurity>> saml2LoginCustomizer) SAML 2.0 サービスプロバイダーを使用して認証サポートを設定します。saml2Logout(Customizer<Saml2LogoutConfigurer<HttpSecurity>> saml2LogoutCustomizer) SAML 2.0 証明書利用者のログアウトサポートを設定します。saml2Metadata(Customizer<Saml2MetadataConfigurer<HttpSecurity>> saml2MetadataConfigurer) <md:EntityDescriptor>ペイロードで証明書利用者の構成を示す SAML 2.0 メタデータエンドポイントを構成します。securityContext(Customizer<SecurityContextConfigurer<HttpSecurity>> securityContextCustomizer) securityMatcher(StringSE... patterns) 提供されたpatternsセットに一致する場合にのみHttpSecurityが呼び出されるように構成できます。securityMatcher(RequestMatcher requestMatcher) 提供されたRequestMatcherに一致する場合にのみHttpSecurityが呼び出されるように構成できます。securityMatchers(Customizer<HttpSecurity.RequestMatcherConfigurer> requestMatcherCustomizer) このHttpSecurityが呼び出されるHttpServletRequestインスタンスを指定できます。servletApi(Customizer<ServletApiConfigurer<HttpSecurity>> servletApiCustomizer) HttpServletRequestメソッドをSecurityContextで見つかった値と統合します。sessionManagement(Customizer<SessionManagementConfigurer<HttpSecurity>> sessionManagementCustomizer) セッション管理の構成を許可します。<C> voidsetSharedObject(ClassSE<C> sharedType, C object) 複数のSecurityConfigurerによって共有されるオブジェクトを設定します。userDetailsService(UserDetailsService userDetailsService) UserDetailsServiceを追加して使用できるようにしますwebAuthn(Customizer<WebAuthnConfigurer<HttpSecurity>> webAuthn) webAuthn/ パスキーベースの認証を指定します。x509(Customizer<X509Configurer<HttpSecurity>> x509Customizer) X509 ベースの事前認証を設定します。クラス AbstractConfiguredSecurityBuilder から継承されたメソッド
apply, beforeInit, doBuild, getConfigurer, getConfigurers, getOrBuild, getSharedObject, getSharedObjects, objectPostProcessor, postProcess, removeConfigurer, removeConfigurers, with, withクラス AbstractSecurityBuilder から継承されたメソッド
build, getObjectクラス ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース HttpSecurityBuilder から継承されたメソッド
getConfigurer, getSharedObject, removeConfigurerインターフェース SecurityBuilder から継承されたメソッド
build
コンストラクターの詳細
HttpSecurity
public HttpSecurity(ObjectPostProcessor<ObjectSE> objectPostProcessor, AuthenticationManagerBuilder authenticationBuilder, MapSE<ClassSE<?>, ObjectSE> sharedObjects) 新しいインスタンスを作成します- パラメーター:
objectPostProcessor- 使用するObjectPostProcessorauthenticationBuilder- 追加の更新に使用するAuthenticationManagerBuildersharedObjects-HttpSecurityを初期化するための共有オブジェクト- 関連事項:
方法の詳細
headers
セキュリティヘッダーをレスポンスに追加します。EnableWebSecurityを使用する場合、これはデフォルトで有効になります。構成例
EnableWebSecurityによって提供されるデフォルトを受け入れるか、headers(Customizer)で追加のメソッドを呼び出さずにheaders(Customizer)のみを呼び出すことは、以下と同等です。@Configuration @EnableWebSecurity public class CsrfSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .headers((headers) -> headers .contentTypeOptions(withDefaults()) .xssProtection(withDefaults()) .cacheControl(withDefaults()) .httpStrictTransportSecurity(withDefaults()) .frameOptions(withDefaults() ); return http.build(); } }次を使用してヘッダーを無効にできます。@Configuration @EnableWebSecurity public class CsrfSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .headers((headers) -> headers.disable()); return http.build(); } }最初にHeadersConfigurer.defaultsDisabled()を呼び出し、次にheaders(Customizer)の結果に対して適切なメソッドを呼び出すことにより、いくつかのヘッダーのみを有効にできます。例: 以下は、HeadersConfigurer.cacheControl(Customizer)およびHeadersConfigurer.frameOptions(Customizer)のみを有効にします。@Configuration @EnableWebSecurity public class CsrfSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .headers((headers) -> headers .defaultsDisabled() .cacheControl(withDefaults()) .frameOptions(withDefaults()) ); return http.build(); } }また、デフォルトのままにして、ヘッダーのサブセットを明示的に無効にすることもできます。例: 以下は、HeadersConfigurer.frameOptions(Customizer)を除くすべてのデフォルトヘッダーを有効にします。@Configuration @EnableWebSecurity public class CsrfSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .headers((headers) -> headers .frameOptions((frameOptions) -> frameOptions.disable()) ); return http.build(); } }- パラメーター:
headersCustomizer-Customizerを使用して、HeadersConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
cors
使用するCorsFilterを追加します。corsFilter という名前の Bean が指定されている場合は、そのCorsFilterが使用されます。そうでない場合、corsConfigurationSource が定義されている場合は、そのCorsConfigurationが使用されます。CORS を有効にするには、以下を使用します。@Configuration @EnableWebSecurity public class CorsSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .cors(withDefaults()); return http.build(); } }- パラメーター:
corsCustomizer-Customizerを使用して、CorsConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
sessionManagement
public HttpSecurity sessionManagement(Customizer<SessionManagementConfigurer<HttpSecurity>> sessionManagementCustomizer) セッション管理の構成を許可します。構成例
次の構成は、ユーザーの 1 つのインスタンスのみが一度に認証されるように強制する方法を示しています。ユーザーがログアウトせずにユーザー名 "user" で認証し、"user" で認証を試みると、最初のセッションが強制的に終了し、"/login?expired" URL に送信されます。@Configuration @EnableWebSecurity public class SessionManagementSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .anyRequest().hasRole("USER") ) .formLogin((formLogin) -> formLogin .permitAll() ) .sessionManagement((sessionManagement) -> sessionManagement .sessionConcurrency((sessionConcurrency) -> sessionConcurrency .maximumSessions(1) .expiredUrl("/login?expired") ) ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }SessionManagementConfigurer.maximumSessions(int)を使用する場合、期限切れのセッションが確実にクリーンアップされるように、アプリケーションのHttpSessionEventPublisherを構成することを忘れないでください。web.xml では、次を使用してこれを構成できます。<listener> <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> </listener>または、AbstractSecurityWebApplicationInitializer.enableHttpSessionEventPublisher()は true を返す可能性があります。- パラメーター:
sessionManagementCustomizer-Customizerを使用して、SessionManagementConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
portMapper
AbstractConfiguredSecurityBuilder.getSharedObject(Class)から利用可能なPortMapperを設定できます。提供されている他のSecurityConfigurerオブジェクトは、HTTP から HTTPS へ、または HTTPS から HTTP へリダイレクトする際に、この設定されたPortMapperをデフォルトのPortMapperとして使用します(たとえば、requiresChannel(Customizer)と組み合わせて使用する場合)。デフォルトでは、Spring Security は HTTP ポート 8080 を HTTPS ポート 8443 に、HTTP ポート 80 を HTTPS ポート 443 にマッピングするPortMapperImplを使用します。構成例
次の設定により、Spring Security 内のポート 9090 の HTTP からのリダイレクトが HTTPS ポート 9443 にリダイレクトされ、HTTP ポート 80 が HTTPS ポート 443 にリダイレクトされます。@Configuration @EnableWebSecurity public class PortMapperSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .requiresChannel((requiresChannel) -> requiresChannel .anyRequest().requiresSecure() ) .portMapper((portMapper) -> portMapper .http(9090).mapsTo(9443) .http(80).mapsTo(443) ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
portMapperCustomizer-Customizerを使用して、PortMapperConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
jee
コンテナーベースの事前認証を構成します。この場合、認証はサーブレットコンテナーによって管理されます。構成例
次の構成では、HttpServletRequestにあるプリンシパルを使用し、ユーザーがロール "ROLE_USER" または "ROLE_ADMIN" にある場合、結果のAuthenticationにそれを追加します。@Configuration @EnableWebSecurity public class JeeSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .jee((jee) -> jee .mappableRoles("USER", "ADMIN") ); return http.build(); } }コンテナーで事前認証を使用したい開発者は、web.xml がセキュリティ制約を構成していることを確認する必要があります。例: web.xml(サーブレット仕様でサポートされる同等の Java ベースの構成はありません)は次のようになります。<login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/login</form-login-page> <form-error-page>/login?error</form-error-page> </form-login-config> </login-config> <security-role> <role-name>ROLE_USER</role-name> </security-role> <security-constraint> <web-resource-collection> <web-resource-name>Public</web-resource-name> <description>Matches unconstrained pages</description> <url-pattern>/login</url-pattern> <url-pattern>/logout</url-pattern> <url-pattern>/resources/*</url-pattern> </web-resource-collection> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Secured Areas</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>ROLE_USER</role-name> </auth-constraint> </security-constraint>最後に、適切なロールを持つユーザーを含めるようにコンテナーを構成する必要があります。この構成はサーブレットコンテナーに固有なので、サーブレットコンテナーのドキュメントを参照してください。- パラメーター:
jeeCustomizer-Customizerを使用して、JeeConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
x509
X509 ベースの事前認証を設定します。構成例
次の構成では、X509 証明書からユーザー名を抽出しようとします。これが機能するためには、サーブレットコンテナーがクライアント証明書をリクエストするように構成されている必要があることに注意してください。@Configuration @EnableWebSecurity public class X509SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .x509(withDefaults()); return http.build(); } }- パラメーター:
x509Customizer-Customizerを使用して、X509Configurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
rememberMe
Remember Me 認証の構成を許可します。構成例
次の構成は、トークンベースの認証を記憶できるようにする方法を示しています。"remember-me" という名前の HTTP パラメーターが存在するかどうかを認証すると、HttpSessionの有効期限が切れた後でもユーザーは記憶されます。@Configuration @EnableWebSecurity public class RememberMeSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()) .rememberMe(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
rememberMeCustomizer-Customizerを使用して、RememberMeConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
authorizeHttpRequests
public HttpSecurity authorizeHttpRequests(Customizer<AuthorizeHttpRequestsConfigurer<HttpSecurity>.AuthorizationManagerRequestMatcherRegistry> authorizeHttpRequestsCustomizer) RequestMatcher実装を使用して(つまり URL パターン経由で)HttpServletRequestに基づいてアクセスを制限できます。構成例
最も基本的な例は、ロール "ROLE_USER" を要求するようにすべての URL を構成することです。以下の構成では、すべての URL に対する認証が必要であり、ユーザー "admin" と "user" の両方にアクセス権を付与します。@Configuration @EnableWebSecurity public class AuthorizeUrlsSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); UserDetails admin = User.withDefaultPasswordEncoder() .username("admin") .password("password") .roles("ADMIN", "USER") .build(); return new InMemoryUserDetailsManager(user, admin); } }複数の URL を設定することもできます。以下の構成では、すべての URL に対する認証が必要であり、/admin/ で始まる URL へのアクセスを "admin" ユーザーのみに許可します。いずれかのユーザーがアクセスできる他のすべての URL。@Configuration @EnableWebSecurity public class AuthorizeUrlsSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); UserDetails admin = User.withDefaultPasswordEncoder() .username("admin") .password("password") .roles("ADMIN", "USER") .build(); return new InMemoryUserDetailsManager(user, admin); } }マッチャーは順番に考慮されることに注意してください。最初のマッチャーがすべてのリクエストに一致し、2 番目のマッピングに到達することはないため、以下は無効です。@Configuration @EnableWebSecurity public class AuthorizeUrlsSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize .requestMatchers("/**").hasRole("USER") .requestMatchers("/admin/**").hasRole("ADMIN") ); return http.build(); } }- パラメーター:
authorizeHttpRequestsCustomizer-Customizerを使用して、AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistryにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
requestCache
public HttpSecurity requestCache(Customizer<RequestCacheConfigurer<HttpSecurity>> requestCacheCustomizer) リクエストキャッシュの設定を許可します。例: 保護されたページ(認証前に /protected) がリクエストされる場合があります。アプリケーションはユーザーをログインページにリダイレクトします。認証後、Spring Security はユーザーを最初にリクエストされた保護されたページ(/protected))にリダイレクトします。これはEnableWebSecurityを使用するときに自動的に適用されます。カスタム構成の例
次の例は、リクエストのキャッシュを無効にする方法を示しています。@Configuration @EnableWebSecurity public class RequestCacheDisabledSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .requestCache((requestCache) -> requestCache.disable() ); return http.build(); } }- パラメーター:
requestCacheCustomizer-Customizerを使用して、RequestCacheConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
exceptionHandling
public HttpSecurity exceptionHandling(Customizer<ExceptionHandlingConfigurer<HttpSecurity>> exceptionHandlingCustomizer) 例外処理を設定できます。これはEnableWebSecurityを使用するときに自動的に適用されます。カスタム構成の例
次のカスタマイズにより、アクセスが拒否されたユーザーが "/errors/access-denied" ページに確実に転送されます。@Configuration @EnableWebSecurity public class ExceptionHandlingSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) // sample exception handling customization .exceptionHandling((exceptionHandling) -> exceptionHandling .accessDeniedPage("/errors/access-denied") ); return http.build(); } }- パラメーター:
exceptionHandlingCustomizer-Customizerを使用して、ExceptionHandlingConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
securityContext
public HttpSecurity securityContext(Customizer<SecurityContextConfigurer<HttpSecurity>> securityContextCustomizer) HttpServletRequest間のSecurityContextHolder上のSecurityContextの管理をセットアップします。これは、EnableWebSecurityを使用するときに自動的に適用されます。次のカスタマイズは、共有SecurityContextRepositoryを指定します@Configuration @EnableWebSecurity public class SecurityContextSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .securityContext((securityContext) -> securityContext .securityContextRepository(SCR) ); return http.build(); } }- パラメーター:
securityContextCustomizer-Customizerを使用して、SecurityContextConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
servletApi
HttpServletRequestメソッドをSecurityContextにある値と統合します。これは、EnableWebSecurityを使用するときに自動的に適用されます。それを無効にすることができます:@Configuration @EnableWebSecurity public class ServletApiSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .servletApi((servletApi) -> servletApi.disable() ); return http.build(); } }- パラメーター:
servletApiCustomizer-Customizerを使用して、ServletApiConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
csrf
CSRF 保護を有効にします。EnableWebSecurityを使用する場合、これはデフォルトで有効になります。次を使用して無効にできます。@Configuration @EnableWebSecurity public class CsrfSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .csrf((csrf) -> csrf.disable()); return http.build(); } }- パラメーター:
csrfCustomizer-Customizerを使用して、CsrfConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
logout
ログアウトサポートを提供します。これは、EnableWebSecurityを使用するときに自動的に適用されます。デフォルトでは、URL "/logout" にアクセスすると、HTTP セッションを無効にし、構成されたrememberMe(Customizer)認証をクリーンアップし、SecurityContextHolderをクリアしてから、"/login?success" にリダイレクトすることでユーザーをログアウトします。カスタム構成の例
URL "/custom-logout" が呼び出されたときにログアウトするための次のカスタマイズ。ログアウトすると、"remove" という名前の Cookie が削除され、HttpSession が無効にならず、SecurityContextHolder がクリアされ、完了時に "/logout-success" にリダイレクトされます。@Configuration @EnableWebSecurity public class LogoutSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()) // sample logout customization .logout((logout) -> logout.deleteCookies("remove") .invalidateHttpSession(false) .logoutUrl("/custom-logout") .logoutSuccessUrl("/logout-success") ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
logoutCustomizer-Customizerを使用して、LogoutConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
anonymous
匿名ユーザーの表現方法を構成できます。これは、EnableWebSecurityと組み合わせて使用すると自動的に適用されます。デフォルトでは、匿名ユーザーはAnonymousAuthenticationTokenで表され、ロール "ROLE_ANONYMOUS" が含まれます。構成例
次の構成は、匿名ユーザーが代わりにロール "ROLE_ANON" を含むように指定する方法を示しています。@Configuration @EnableWebSecurity public class AnonymousSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()) // sample anonymous customization .anonymous((anonymous) -> anonymous .authorities("ROLE_ANON") ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }以下は、匿名ユーザーを null として表す方法を示しています。これにより、匿名認証が有効になっていると想定するコードでNullPointerExceptionSE が発生する可能性があることに注意してください。@Configuration @EnableWebSecurity public class AnonymousSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()) // sample anonymous customization .anonymous((anonymous) -> anonymous.disable() ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
anonymousCustomizer-Customizerを使用して、AnonymousConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
formLogin
フォームベースの認証をサポートすることを指定します。FormLoginConfigurer.loginPage(String)が指定されていない場合、デフォルトのログインページが生成されます。構成例
最も基本的な構成は、デフォルトで URL "/login" にログインページを自動的に生成し、認証の失敗のために "/login?error" にリダイレクトします。ログインページの詳細はFormLoginConfigurer.loginPage(String)にあります。@Configuration @EnableWebSecurity public class FormLoginSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }以下の設定は、デフォルトのカスタマイズを示しています。@Configuration @EnableWebSecurity public class FormLoginSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin((formLogin) -> formLogin .usernameParameter("username") .passwordParameter("password") .loginPage("/authentication/login") .failureUrl("/authentication/login?failed") .loginProcessingUrl("/authentication/login/process") ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
formLoginCustomizer-Customizerを使用して、FormLoginConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
saml2Login
SAML 2.0 サービスプロバイダーを使用して認証サポートを設定します。
「認証フロー」は、SAML V2.0 コア、プロファイル、バインディング仕様に記載されているように、POST および REDIRECT バインディングを使用して、Web ブラウザー SSO プロファイルを使用して実装されます。
この機能を使用するための前提条件として、アサーションを提供するための SAML v2.0 ID プロバイダーがあることが必要です。サービスプロバイダー、依存パーティ、リモート ID プロバイダー、アサーティングパーティの表現はRelyingPartyRegistrationに含まれています。
RelyingPartyRegistrationはRelyingPartyRegistrationRepository内で構成されます。これは必須であり、ApplicationContextに登録するか、saml2Login().relyingPartyRegistrationRepository(..)を介して構成する必要があります。
デフォルトの構成では、"/login"で自動生成されたログインページが提供され、認証エラーが発生すると"/login?error"にリダイレクトされます。ログインページには、「認証フロー」を開始できるリンクを備えた各 ID プロバイダーが表示されます。
構成例
次の例は、SimpleSamlPhp を認証プロバイダーとして使用して、必要な最小限の構成を示しています。@Configuration @EnableWebSecurity public class Saml2LoginSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .anyRequest().authenticated() ) .saml2Login(withDefaults()); return http.build(); } @Bean public RelyingPartyRegistrationRepository relyingPartyRegistrationRepository() { return new InMemoryRelyingPartyRegistrationRepository(this.getSaml2RelyingPartyRegistration()); } private RelyingPartyRegistration getSaml2RelyingPartyRegistration() { //remote IDP entity ID String idpEntityId = "https://simplesaml-for-spring-saml.apps.pcfone.io/saml2/idp/metadata.php"; //remote WebSSO Endpoint - Where to Send AuthNRequests to String webSsoEndpoint = "https://simplesaml-for-spring-saml.apps.pcfone.io/saml2/idp/SSOService.php"; //local registration ID String registrationId = "simplesamlphp"; //local entity ID - autogenerated based on URL String localEntityIdTemplate = "{baseUrl}/saml2/service-provider-metadata/{registrationId}"; //local signing (and decryption key) Saml2X509Credential signingCredential = getSigningCredential(); //IDP certificate for verification of incoming messages Saml2X509Credential idpVerificationCertificate = getVerificationCertificate(); return RelyingPartyRegistration.withRegistrationId(registrationId) .remoteIdpEntityId(idpEntityId) .idpWebSsoUrl(webSsoEndpoint) .credential(signingCredential) .credential(idpVerificationCertificate) .localEntityIdTemplate(localEntityIdTemplate) .build(); } }- パラメーター:
saml2LoginCustomizer-Customizerを使用して、Saml2LoginConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
saml2Logout
public HttpSecurity saml2Logout(Customizer<Saml2LogoutConfigurer<HttpSecurity>> saml2LogoutCustomizer) SAML 2.0 証明書利用者のログアウトサポートを設定します。
SAML V2.0 コア、プロファイル、バインディング仕様に記載されているように、POST および REDIRECT バインディングを使用して、シングルログアウトプロファイルを実装します。
この機能を使用するための前提条件として、ログアウトリクエストを送信する SAMLv2.0 アサーティングパーティがあることです。証明書利用者と主張者の表現はRelyingPartyRegistrationに含まれています。
RelyingPartyRegistrationはRelyingPartyRegistrationRepository内で構成されます。これは必須であり、ApplicationContextに登録するか、saml2Login(Customizer)を介して構成する必要があります。
デフォルト設定では、"/logout"で自動生成されたログアウトエンドポイントが提供され、ログアウトが完了すると/login?logoutにリダイレクトされます。
構成例
次の例は、架空のアサートパーティを使用して、必要な最小限の構成を示しています。@EnableWebSecurity @Configuration public class Saml2LogoutSecurityConfig { @Bean public SecurityFilterChain web(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize .anyRequest().authenticated() ) .saml2Login(withDefaults()) .saml2Logout(withDefaults()); return http.build(); } @Bean public RelyingPartyRegistrationRepository relyingPartyRegistrationRepository() { RelyingPartyRegistration registration = RelyingPartyRegistrations .withMetadataLocation("https://ap.example.org/metadata") .registrationId("simple") .build(); return new InMemoryRelyingPartyRegistrationRepository(registration); } }- 戻り値:
- さらにカスタマイズするための
HttpSecurity
saml2Metadata
public HttpSecurity saml2Metadata(Customizer<Saml2MetadataConfigurer<HttpSecurity>> saml2MetadataConfigurer) <md:EntityDescriptor>ペイロードで証明書利用者の構成を示す SAML 2.0 メタデータエンドポイントを構成します。デフォルトでは、エンドポイントは
/saml2/metadataおよび/saml2/metadata/{registrationId}ですが、下位互換性の目的で/saml2/service-provider-metadata/{registrationId}も認識されることに注意してください。構成例
次の例は、架空のアサートパーティを使用して、必要な最小限の構成を示しています。@EnableWebSecurity @Configuration public class Saml2LogoutSecurityConfig { @Bean public SecurityFilterChain web(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated()) .saml2Metadata(Customizer.withDefaults()); return http.build(); } @Bean public RelyingPartyRegistrationRepository relyingPartyRegistrationRepository() { RelyingPartyRegistration registration = RelyingPartyRegistrations .withMetadataLocation("https://ap.example.org/metadata") .registrationId("simple") .build(); return new InMemoryRelyingPartyRegistrationRepository(registration); } }- パラメーター:
saml2MetadataConfigurer-Customizerを使用して、Saml2MetadataConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
oauth2Login
public HttpSecurity oauth2Login(Customizer<OAuth2LoginConfigurer<HttpSecurity>> oauth2LoginCustomizer) OAuth 2.0 や OpenID Connect 1.0 プロバイダーを使用して認証サポートを設定します。
「認証フロー」は、OAuth 2.0 認証フレームワークおよび OpenID Connect コア 1.0 仕様で指定されているように、Authorization Code Grant を使用して実装されます。
この機能を使用するための前提条件として、クライアントをプロバイダーに登録する必要があります。クライアント登録情報は、ClientRegistration.Builderを使用してClientRegistrationを構成するために使用できます。
ClientRegistrationはClientRegistrationRepository内で構成されます。これは必須であり、ApplicationContextに登録するか、oauth2Login().clientRegistrationRepository(..)を介して構成する必要があります。
デフォルトの構成では、"/login"で自動生成されたログインページが提供され、認証エラーが発生すると"/login?error"にリダイレクトされます。ログインページには、「認証フロー」を開始できるリンクを持つ各クライアントが表示されます。
構成例
次の例は、Google を認証プロバイダーとして使用して、必要な最小限の構成を示しています。@Configuration @EnableWebSecurity public class OAuth2LoginSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .anyRequest().authenticated() ) .oauth2Login(withDefaults()); return http.build(); } @Bean public ClientRegistrationRepository clientRegistrationRepository() { return new InMemoryClientRegistrationRepository(this.googleClientRegistration()); } private ClientRegistration googleClientRegistration() { return ClientRegistration.withRegistrationId("google") .clientId("google-client-id") .clientSecret("google-client-secret") .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC) .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE) .redirectUri("{baseUrl}/login/oauth2/code/{registrationId}") .scope("openid", "profile", "email", "address", "phone") .authorizationUri("https://accounts.google.com/o/oauth2/v2/auth") .tokenUri("https://www.googleapis.com/oauth2/v4/token") .userInfoUri("https://www.googleapis.com/oauth2/v3/userinfo") .userNameAttributeName(IdTokenClaimNames.SUB) .jwkSetUri("https://www.googleapis.com/oauth2/v3/certs") .clientName("Google") .build(); } }より高度な構成については、デフォルトをカスタマイズするために使用可能なオプションについて、
OAuth2LoginConfigurerを参照してください。- パラメーター:
oauth2LoginCustomizer-Customizerを使用して、OAuth2LoginConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity - 関連事項:
oidcLogout
oidcLogout
oauth2Client
public HttpSecurity oauth2Client(Customizer<OAuth2ClientConfigurer<HttpSecurity>> oauth2ClientCustomizer) OAuth 2.0 クライアントのサポートを構成します。構成例
次の例は、すべてのエンドポイントに対して OAuth 2.0 クライアントサポートを有効にする方法を示しています。@Configuration @EnableWebSecurity public class OAuth2ClientSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .anyRequest().authenticated() ) .oauth2Client(withDefaults()); return http.build(); } }- パラメーター:
oauth2ClientCustomizer-Customizerを使用して、OAuth2ClientConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
oauth2ResourceServer
public HttpSecurity oauth2ResourceServer(Customizer<OAuth2ResourceServerConfigurer<HttpSecurity>> oauth2ResourceServerCustomizer) OAuth 2.0 リソースサーバーのサポートを構成します。構成例
次の例は、カスタム JWT 認証コンバーターを構成する方法を示しています。@Configuration @EnableWebSecurity public class OAuth2ResourceServerSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .anyRequest().authenticated() ) .oauth2ResourceServer((oauth2ResourceServer) -> oauth2ResourceServer .jwt((jwt) -> jwt .decoder(jwtDecoder()) ) ); return http.build(); } @Bean public JwtDecoder jwtDecoder() { return NimbusJwtDecoder.withPublicKey(this.key).build(); } }- パラメーター:
oauth2ResourceServerCustomizer-Customizerを使用して、OAuth2ResourceServerConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
oauth2AuthorizationServer
public HttpSecurity oauth2AuthorizationServer(Customizer<OAuth2AuthorizationServerConfigurer> oauth2AuthorizationServerCustomizer) OAuth 2.1 認証サーバーのサポートを構成します。- パラメーター:
oauth2AuthorizationServerCustomizer-CustomizerはOAuth2AuthorizationServerConfigurerへのアクセスを提供し、さらなるカスタマイズを可能にします- 戻り値:
- さらにカスタマイズするための
HttpSecurity - 関連事項:
oneTimeTokenLogin
public HttpSecurity oneTimeTokenLogin(Customizer<OneTimeTokenLoginConfigurer<HttpSecurity>> oneTimeTokenLoginConfigurerCustomizer) ワンタイムトークンログインサポートを構成します。構成例
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize .anyRequest().authenticated() ) .oneTimeTokenLogin(Customizer.withDefaults()); return http.build(); } @Bean public OneTimeTokenGenerationSuccessHandler oneTimeTokenGenerationSuccessHandler() { return new MyMagicLinkOneTimeTokenGenerationSuccessHandler(); } }- パラメーター:
oneTimeTokenLoginConfigurerCustomizer-Customizerを使用して、OneTimeTokenLoginConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
requiresChannel
@DeprecatedSE public HttpSecurity requiresChannel(Customizer<ChannelSecurityConfigurer<HttpSecurity>.ChannelRequestMatcherRegistry> requiresChannelCustomizer) 使用すべきではありません。チャネルセキュリティを設定します。この構成を有効にするには、必要なチャネルへの少なくとも 1 つのマッピングを提供する必要があります。構成例
以下の例は、すべてのリクエストに HTTP をリクエストする方法を示しています。一部のリクエストに対して HTTPS のみをリクエストすることはサポートされていますが、HTTP を許可するアプリケーションは多くのセキュリティの脆弱性をもたらすため、推奨されません。そのような例の 1 つとして、Firesheep について参照してください。@Configuration @EnableWebSecurity public class ChannelSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .formLogin(withDefaults()) .requiresChannel((requiresChannel) -> requiresChannel .anyRequest().requiresSecure() ); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
requiresChannelCustomizer-Customizerを使用して、ChannelSecurityConfigurer.ChannelRequestMatcherRegistryにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
redirectToHttps
public HttpSecurity redirectToHttps(Customizer<HttpsRedirectConfigurer<HttpSecurity>> httpsRedirectConfigurerCustomizer) チャネルセキュリティを設定します。この構成を有効にするには、必要なチャネルへの少なくとも 1 つのマッピングを提供する必要があります。構成例
以下の例は、すべてのリクエストに対して HTTPS をリクエストする方法を示しています。ローカルデプロイと本番 デプロイを区別する必要がある場合など、一部のリクエストに対してのみ HTTPS をリクエストすることがサポートされています。@Configuration @EnableWebSecurity public class RequireHttpsConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorize) -> authorize anyRequest().authenticated() ) .formLogin(withDefaults()) .redirectToHttps(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
httpsRedirectConfigurerCustomizer-Customizerを使用して、HttpsRedirectConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
httpBasic
HTTP 基本認証を構成します。構成例
以下の例は、アプリケーションの HTTP 基本認証を構成する方法を示しています。デフォルトのレルムは「レルム」ですが、HttpBasicConfigurer.realmName(String)を使用してカスタマイズできます。@Configuration @EnableWebSecurity public class HttpBasicSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .httpBasic(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
httpBasicCustomizer-Customizerを使用して、HttpBasicConfigurerにより多くのオプションを提供します。- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
passwordManagement
public HttpSecurity passwordManagement(Customizer<PasswordManagementConfigurer<HttpSecurity>> passwordManagementCustomizer) パスワード管理のサポートを追加します。構成例
以下の例は、アプリケーションのパスワード管理を構成する方法を示しています。デフォルトのパスワード変更ページは "/change-password" ですが、PasswordManagementConfigurer.changePasswordPage(String)を使用してカスタマイズできます。@Configuration @EnableWebSecurity public class PasswordManagementSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .authorizeHttpRequests(authorizeHttpRequests -> authorizeHttpRequests .requestMatchers("/**").hasRole("USER") ) .passwordManagement(passwordManagement -> passwordManagement .changePasswordPage("/custom-change-password-page") ); return http.build(); } }- パラメーター:
passwordManagementCustomizer-Customizerを使用して、PasswordManagementConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
authenticationManager
デフォルトのAuthenticationManagerを構成します。- パラメーター:
authenticationManager- 使用するAuthenticationManager- 戻り値:
- さらにカスタマイズするための
HttpSecurity - 導入:
- 5.6
beforeConfigure
protected void beforeConfigure()クラスからコピーされた説明:AbstractConfiguredSecurityBuilder各SecurityConfigurer.configure(SecurityBuilder)メソッドを呼び出す前に呼び出されます。サブクラスは、このメソッドをオーバーライドして、SecurityConfigurerを使用せずにライフサイクルにフックできます。performBuild
クラスからコピーされた説明:AbstractConfiguredSecurityBuilderサブクラスはこのメソッドを実装して、返されるオブジェクトを構築する必要があります。- 次で指定:
- クラス
AbstractConfiguredSecurityBuilder<DefaultSecurityFilterChain, HttpSecurity>のperformBuild - 戻り値:
- 構築するオブジェクト、または実装で許可されている場合は null
authenticationProvider
インターフェースからコピーされた説明:HttpSecurityBuilderAuthenticationProviderを追加して使用できるようにします- 次で指定:
- インターフェース
HttpSecurityBuilder<HttpSecurity>内のauthenticationProvider - パラメーター:
authenticationProvider- 追加するAuthenticationProvider- 戻り値:
- さらにカスタマイズするための
HttpSecurity
userDetailsService
インターフェースからコピーされた説明:HttpSecurityBuilderUserDetailsServiceを追加して使用できるようにします- 次で指定:
- インターフェース
HttpSecurityBuilder<HttpSecurity>内のuserDetailsService - パラメーター:
userDetailsService- 追加するUserDetailsService- 戻り値:
- さらにカスタマイズするための
HttpSecurity
addFilterAfter
public HttpSecurity addFilterAfter(jakarta.servlet.Filter filter, ClassSE<? extends jakarta.servlet.Filter> afterFilter) インターフェースからコピーされた説明:HttpSecurityBuilder既知のFilterクラスの 1 つの後にFilterを追加できます。既知のFilterインスタンスは、HttpSecurityBuilder.addFilter(Filter)にリストされているFilter、またはHttpSecurityBuilder.addFilterAfter(Filter, Class)またはHttpSecurityBuilder.addFilterBefore(Filter, Class)を使用してすでに追加されているFilterのいずれかです。- 次で指定:
- インターフェース
HttpSecurityBuilder<HttpSecurity>内のaddFilterAfter - パラメーター:
filter- 型afterFilterの後に登録するFilterafterFilter- 既知のFilterのクラス。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
addFilterBefore
public HttpSecurity addFilterBefore(jakarta.servlet.Filter filter, ClassSE<? extends jakarta.servlet.Filter> beforeFilter) インターフェースからコピーされた説明:HttpSecurityBuilder既知のFilterクラスの 1 つの前にFilterを追加できます。既知のFilterインスタンスは、HttpSecurityBuilder.addFilter(Filter)にリストされているFilter、またはHttpSecurityBuilder.addFilterAfter(Filter, Class)またはHttpSecurityBuilder.addFilterBefore(Filter, Class)を使用してすでに追加されているFilterのいずれかです。- 次で指定:
- インターフェース
HttpSecurityBuilder<HttpSecurity>内のaddFilterBefore - パラメーター:
filter- 型beforeFilterの前に登録するFilterbeforeFilter- 既知のFilterのクラス。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
addFilter
インターフェースからコピーされた説明:HttpSecurityBuilderセキュリティフレームワーク内で提供されるフィルターのいずれかのインスタンスであるか、拡張する必要があるFilterを追加します。このメソッドにより、フィルターの順序が自動的に処理されます。フィルターの順序は次のとおりです。DisableEncodeUrlFilterForceEagerSessionCreationFilterChannelProcessingFilterHttpsRedirectFilterWebAsyncManagerIntegrationFilterSecurityContextHolderFilterSecurityContextPersistenceFilterHeaderWriterFilterCorsFilterCsrfFilterLogoutFilterOAuth2AuthorizationRequestRedirectFilterSaml2WebSsoAuthenticationRequestFilterX509AuthenticationFilterAbstractPreAuthenticatedProcessingFilter- CasAuthenticationFilter
OAuth2LoginAuthenticationFilterSaml2WebSsoAuthenticationFilterUsernamePasswordAuthenticationFilterDefaultLoginPageGeneratingFilterDefaultLogoutPageGeneratingFilterConcurrentSessionFilterDigestAuthenticationFilterBearerTokenAuthenticationFilterBasicAuthenticationFilterAuthenticationFilterRequestCacheAwareFilterSecurityContextHolderAwareRequestFilterJaasApiIntegrationFilterRememberMeAuthenticationFilterAnonymousAuthenticationFilterOAuth2AuthorizationCodeGrantFilterSessionManagementFilterExceptionTranslationFilterFilterSecurityInterceptorAuthorizationFilterSwitchUserFilter
- 次で指定:
- インターフェース
HttpSecurityBuilder<HttpSecurity>内のaddFilter - パラメーター:
filter- 追加するFilter- 戻り値:
- さらにカスタマイズするための
HttpSecurity
addFilterAt
public HttpSecurity addFilterAt(jakarta.servlet.Filter filter, ClassSE<? extends jakarta.servlet.Filter> atFilter) 指定された Filter クラスの場所に Filter を追加します。例: フィルター CustomFilter をUsernamePasswordAuthenticationFilterと同じ位置に登録したい場合は、以下を呼び出すことができます。addFilterAt(new CustomFilter(), UsernamePasswordAuthenticationFilter.class)
同じ場所に複数のフィルターを登録すると、それらの順序は確定的ではなくなります。より具体的には、同じ場所に複数のフィルターを登録しても、既存のフィルターはオーバーライドされません。代わりに、使用しないフィルターを登録しないでください。- パラメーター:
filter- 登録するフィルターatFilter- Spring Security にすでに登録されている(つまり既知の)別のFilterの場所- 戻り値:
- さらにカスタマイズするための
HttpSecurity
securityMatchers
public HttpSecurity securityMatchers(Customizer<HttpSecurity.RequestMatcherConfigurer> requestMatcherCustomizer) このHttpSecurityが呼び出されるHttpServletRequestインスタンスを指定できます。このメソッドにより、複数の異なるRequestMatcherインスタンスに対してHttpSecurityを簡単に呼び出すことができます。RequestMatcherが 1 つだけ必要な場合は、securityMatcher(String...)またはsecurityMatcher(RequestMatcher)の使用を検討してください。securityMatchers(Customizer)を呼び出しても、それ以前のsecurityMatchers(Customizer)、securityMatcher(String...)、securityMatcher(RequestMatcher)の呼び出しは上書きされません。構成例
次の構成では、"/api/" または "/oauth/" で始まる URL に対してHttpSecurityを有効にします。@Configuration @EnableWebSecurity public class RequestMatchersSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .securityMatchers((matchers) -> matchers .requestMatchers("/api/**", "/oauth/**") ) .authorizeHttpRequests((authorize) -> authorize .anyRequest().hasRole("USER") ) .httpBasic(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }以下の構成は、前の構成と同じです。@Configuration @EnableWebSecurity public class RequestMatchersSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .securityMatchers((matchers) -> matchers .requestMatchers("/api/**") .requestMatchers("/oauth/**") ) .authorizeHttpRequests((authorize) -> authorize .anyRequest().hasRole("USER") ) .httpBasic(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }以下の構成も上記の構成と同じです。@Configuration @EnableWebSecurity public class RequestMatchersSecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) { http .securityMatchers((matchers) -> matchers .requestMatchers("/api/**") ) .securityMatchers((matchers) -> matchers .requestMatchers("/oauth/**") ) .authorizeHttpRequests((authorize) -> authorize .anyRequest().hasRole("USER") ) .httpBasic(withDefaults()); return http.build(); } @Bean public UserDetailsService userDetailsService() { UserDetails user = User.withDefaultPasswordEncoder() .username("user") .password("password") .roles("USER") .build(); return new InMemoryUserDetailsManager(user); } }- パラメーター:
requestMatcherCustomizer-Customizerを使用して、HttpSecurity.RequestMatcherConfigurerにより多くのオプションを提供します。- 戻り値:
- さらにカスタマイズするための
HttpSecurity
securityMatcher
指定されたRequestMatcherと一致する場合にのみHttpSecurityが呼び出されるように構成できます。より高度な構成が必要な場合は、securityMatchers(Customizer)()} の使用を検討してください。securityMatcher(RequestMatcher)を呼び出すと、それ以前のsecurityMatcher(RequestMatcher)、securityMatcher(String...)、securityMatchers(Customizer)の呼び出しが上書きされます。- パラメーター:
requestMatcher- 使用するRequestMatcher、たとえばPathPatternRequestMatcher.pathPattern(HttpMethod.GET, "/admin/**")- 戻り値:
- さらにカスタマイズするための
HttpSecurity - 関連事項:
securityMatcher
指定されたpatternsのセットに一致する場合にのみHttpSecurityが呼び出されるように設定できます。一致ルールについてはPathPatternを参照してくださいsecurityMatcher(String...)を呼び出すと、以前のsecurityMatcher(String...)、securityMatcher(RequestMatcher)、securityMatchers(Customizer)の呼び出しが上書きされます。- パラメーター:
patterns- 一致するパターン (つまり、"/admin/**")- 戻り値:
- さらにカスタマイズするための
HttpSecurity - 関連事項:
webAuthn
webAuthn/ パスキーベースの認証を指定します。@Bean SecurityFilterChain securityFilterChain(HttpSecurity http) { http // ... .webAuthn((webAuthn) -> webAuthn .rpId("example.com") .allowedOrigins("https://example.com") ); return http.build(); }- パラメーター:
webAuthn- 適用するカスタマイザー- 戻り値:
HttpSecurityのさらなるカスタマイズについては @
redirectToHttps(Customizer)を使用