クラス AbstractPreAuthenticatedProcessingFilter
- java.lang.Object
-
- org.springframework.web.filter.GenericFilterBean
-
- org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter
- 実装されたすべてのインターフェース:
javax.servlet.Filter
、org.springframework.beans.factory.Aware
、org.springframework.beans.factory.BeanNameAware
、org.springframework.beans.factory.DisposableBean
、org.springframework.beans.factory.InitializingBean
、org.springframework.context.ApplicationEventPublisherAware
、org.springframework.context.EnvironmentAware
、org.springframework.core.env.EnvironmentCapable
、org.springframework.web.context.ServletContextAware
- 既知の直属サブクラス
J2eePreAuthenticatedProcessingFilter
、RequestAttributeAuthenticationFilter
、RequestHeaderAuthenticationFilter
、WebSpherePreAuthenticatedProcessingFilter
、X509AuthenticationFilter
public abstract class AbstractPreAuthenticatedProcessingFilter extends org.springframework.web.filter.GenericFilterBean implements org.springframework.context.ApplicationEventPublisherAware
事前認証された認証リクエストを処理するフィルターを処理するための基本クラス。この場合、プリンシパルはすでに外部システムによって認証されていると想定されます。その目的は、認証するのではなく、受信リクエストからプリンシパルに関する必要な情報を抽出することだけです。外部認証システムは、事前認証システムが抽出できるヘッダーやクッキーなどのリクエストデータを介してこの情報を提供する場合があります。外部システムは、データの正確性と偽造された値の送信を防ぐことに責任があると想定されています。サブクラスは
getPreAuthenticatedPrincipal()
およびgetPreAuthenticatedCredentials()
メソッドを実装する必要があります。このフィルターのサブクラスは通常、PreAuthenticatedAuthenticationProvider
と組み合わせて使用されます。PreAuthenticatedAuthenticationProvider
は、ユーザーの追加データをロードするために使用されます。このプロバイダーは null 資格情報を拒否するため、getPreAuthenticatedCredentials(javax.servlet.http.HttpServletRequest)
メソッドは有効なプリンシパルに対して null を返すべきではありません。セキュリティコンテキストにすでに
Authentication
オブジェクトが含まれている場合(フィルターの呼び出しから、または他の認証メカニズムのため)、フィルターはデフォルトでは何もしません。checkForPrincipalChanges
プロパティを設定することにより、プリンシパルの変更を強制的にチェックできます。デフォルトでは、認証試行が失敗した場合、他の認証メカニズムがリクエストを処理できるようにするために、フィルターチェーンが続行します。資格情報をすぐに拒否するには、 continueFilterChainOnUnsuccessfulAuthentication フラグを false に設定します。 AuthenticationManager によって発生した例外は再スローされます。これは、チェーンが通常どおり続行する場合、
getPreAuthenticatedPrincipal(javax.servlet.http.HttpServletRequest)
によって返されるプリンシパルが null の場合には影響しないことに注意してください。- 導入:
- 2.0
コンストラクターのサマリー
コンストラクター コンストラクター 説明 AbstractPreAuthenticatedProcessingFilter()
メソッドのサマリー
すべてのメソッド インスタンスメソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 void
afterPropertiesSet()
すべての必須プロパティが設定されているかどうかを確認します。void
doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
ユーザーがまだ認証されていない場合は、Spring Security で事前認証されたユーザーを認証してください。protected AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest,?>
getAuthenticationDetailsSource()
protected abstract java.lang.Object
getPreAuthenticatedCredentials(javax.servlet.http.HttpServletRequest request)
オーバーライドして、現在のリクエストから資格情報(該当する場合)を抽出します。protected abstract java.lang.Object
getPreAuthenticatedPrincipal(javax.servlet.http.HttpServletRequest request)
現在のリクエストからプリンシパル情報を抽出するオーバーライドprotected boolean
principalChanged(javax.servlet.http.HttpServletRequest request, Authentication currentAuthentication)
現在のプリンシパルが変更されたかどうかを判断します。void
setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher anApplicationEventPublisher)
void
setAuthenticationDetailsSource(AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest,?> authenticationDetailsSource)
void
setAuthenticationFailureHandler(AuthenticationFailureHandler authenticationFailureHandler)
失敗した認証の処理に使用される戦略を設定します。void
setAuthenticationManager(AuthenticationManager authenticationManager)
void
setAuthenticationSuccessHandler(AuthenticationSuccessHandler authenticationSuccessHandler)
成功した認証を処理するために使用される戦略を設定します。void
setCheckForPrincipalChanges(boolean checkForPrincipalChanges)
設定すると、事前認証されたプリンシパルが各リクエストでチェックされ、現在の認証オブジェクトの名前と比較されます。void
setContinueFilterChainOnUnsuccessfulAuthentication(boolean shouldContinue)
true
(デフォルト)に設定されている場合、AuthenticationManager
によって発生したAuthenticationException
はすべて飲み込まれ、潜在的に代替認証メカニズムを使用して、リクエストの続行が許可されます。void
setInvalidateSessionOnPrincipalChange(boolean invalidateSessionOnPrincipalChange)
checkForPrincipalChanges が設定されており、プリンシパルの変更が検出された場合は、新しいプリンシパルの認証に進む前に、既存のセッションを無効にする必要があるかどうかを決定します。void
setRequiresAuthenticationRequestMatcher(RequestMatcher requiresAuthenticationRequestMatcher)
リクエストマッチャーを設定して、リクエストをさらに進めるかどうかを確認します。void
setSecurityContextRepository(SecurityContextRepository securityContextRepository)
認証が成功したときにSecurityContext
を保存するようにSecurityContextRepository
を設定します。protected void
successfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Authentication authResult)
認証マネージャーから返されたAuthentication
インスタンスを安全なコンテキストに入れます。protected void
unsuccessfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, AuthenticationException failed)
認証が失敗した場合、セキュアコンテキストの認証オブジェクトが null に設定されるようにします。
メソッドの詳細
afterPropertiesSet
public void afterPropertiesSet()
すべての必須プロパティが設定されているかどうかを確認します。- 次で指定:
- インターフェース
org.springframework.beans.factory.InitializingBean
のafterPropertiesSet
- オーバーライド:
- クラス
org.springframework.web.filter.GenericFilterBean
のafterPropertiesSet
doFilter
public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws java.io.IOException, javax.servlet.ServletException
ユーザーがまだ認証されていない場合は、Spring Security で事前認証されたユーザーを認証してください。- 次で指定:
- インターフェース
javax.servlet.Filter
のdoFilter
- 例外:
java.io.IOException
javax.servlet.ServletException
principalChanged
protected boolean principalChanged(javax.servlet.http.HttpServletRequest request, Authentication currentAuthentication)
現在のプリンシパルが変更されたかどうかを判断します。デフォルトの実装はgetPreAuthenticatedPrincipal(HttpServletRequest)
がストリングの場合、Principal.getName()
は事前認証済みプリンシパルと比較されます。- それ以外の場合、
getPreAuthenticatedPrincipal(HttpServletRequest)
はAuthentication.getPrincipal()
と比較されます
サブクラスはこのメソッドをオーバーライドして、プリンシパルがいつ変更されたかを判断できます。
- パラメーター:
request
-currentAuthentication
-- 戻り値:
- プリンシパルが変更された場合は true、そうでない場合は false
successfulAuthentication
protected void successfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, Authentication authResult) throws java.io.IOException, javax.servlet.ServletException
認証マネージャーから返されたAuthentication
インスタンスを安全なコンテキストに入れます。- 例外:
java.io.IOException
javax.servlet.ServletException
unsuccessfulAuthentication
protected void unsuccessfulAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, AuthenticationException failed) throws java.io.IOException, javax.servlet.ServletException
認証が失敗した場合、セキュアコンテキストの認証オブジェクトが null に設定されるようにします。失敗の例外をリクエスト属性としてキャッシュします
- 例外:
java.io.IOException
javax.servlet.ServletException
setApplicationEventPublisher
public void setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher anApplicationEventPublisher)
- 次で指定:
- インターフェース
org.springframework.context.ApplicationEventPublisherAware
のsetApplicationEventPublisher
- パラメーター:
anApplicationEventPublisher
- 使用する ApplicationEventPublisher
setSecurityContextRepository
public void setSecurityContextRepository(SecurityContextRepository securityContextRepository)
認証が成功したときにSecurityContext
を保存するようにSecurityContextRepository
を設定します。デフォルトのアクションは、SecurityContext
を保存しないことです。- パラメーター:
securityContextRepository
- 使用するSecurityContextRepository
。null にはできません。
setAuthenticationDetailsSource
public void setAuthenticationDetailsSource(AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest,?> authenticationDetailsSource)
- パラメーター:
authenticationDetailsSource
- 使用する AuthenticationDetailsSource
getAuthenticationDetailsSource
protected AuthenticationDetailsSource<javax.servlet.http.HttpServletRequest,?> getAuthenticationDetailsSource()
setAuthenticationManager
public void setAuthenticationManager(AuthenticationManager authenticationManager)
- パラメーター:
authenticationManager
- 使用する AuthenticationManager
setContinueFilterChainOnUnsuccessfulAuthentication
public void setContinueFilterChainOnUnsuccessfulAuthentication(boolean shouldContinue)
true
(デフォルト)に設定されている場合、AuthenticationManager
によって発生したAuthenticationException
はすべて飲み込まれ、潜在的に代替認証メカニズムを使用して、リクエストの続行が許可されます。false
の場合、認証に失敗するとすぐに例外が発生します。- パラメーター:
shouldContinue
-true
に設定すると、認証が失敗した後にリクエストを続行できます。
setCheckForPrincipalChanges
public void setCheckForPrincipalChanges(boolean checkForPrincipalChanges)
設定すると、事前認証されたプリンシパルが各リクエストでチェックされ、現在の認証オブジェクトの名前と比較されます。Authentication.getPrincipal()
がプリンシパルに等しいかどうかを確認するチェックも実行されます。変更が検出されると、ユーザーは再認証されます。- パラメーター:
checkForPrincipalChanges
-
setInvalidateSessionOnPrincipalChange
public void setInvalidateSessionOnPrincipalChange(boolean invalidateSessionOnPrincipalChange)
checkForPrincipalChanges が設定されており、プリンシパルの変更が検出された場合は、新しいプリンシパルの認証に進む前に、既存のセッションを無効にする必要があるかどうかを決定します。- パラメーター:
invalidateSessionOnPrincipalChange
- false は、既存のセッションを保持します。デフォルトは true です。
setAuthenticationSuccessHandler
public void setAuthenticationSuccessHandler(AuthenticationSuccessHandler authenticationSuccessHandler)
成功した認証を処理するために使用される戦略を設定します。
setAuthenticationFailureHandler
public void setAuthenticationFailureHandler(AuthenticationFailureHandler authenticationFailureHandler)
失敗した認証の処理に使用される戦略を設定します。
setRequiresAuthenticationRequestMatcher
public void setRequiresAuthenticationRequestMatcher(RequestMatcher requiresAuthenticationRequestMatcher)
リクエストマッチャーを設定して、リクエストをさらに進めるかどうかを確認します。
getPreAuthenticatedPrincipal
protected abstract java.lang.Object getPreAuthenticatedPrincipal(javax.servlet.http.HttpServletRequest request)
現在のリクエストからプリンシパル情報を抽出するオーバーライド
getPreAuthenticatedCredentials
protected abstract java.lang.Object getPreAuthenticatedCredentials(javax.servlet.http.HttpServletRequest request)
オーバーライドして、現在のリクエストから資格情報(該当する場合)を抽出します。有効なプリンシパルに対して null を返すべきではありませんが、実装によってはダミー値を返す場合があります。