最新の安定バージョンについては、Spring Security 6.4.2 を使用してください! |
ログアウトの処理
ログアウト Java/Kotlin 構成
HttpSecurity (Javadoc)
Bean を注入すると、ログアウト機能が自動的に適用されます。デフォルトでは、URL /logout
にアクセスすると、次の方法でユーザーがログアウトされます。
HTTP セッションの無効化
構成された RememberMe 認証をクリーンアップする
SecurityContextHolder
のクリアSecurityContextRepository
のクリア/login?logout
にリダイレクト
ただし、ログイン機能の構成と同様に、ログアウト要件をさらにカスタマイズするためのさまざまなオプションもあります。
Java
Kotlin
public SecurityFilterChain filterChain(HttpSecurity http) {
http
.logout(logout -> logout (1)
.logoutUrl("/my/logout") (2)
.logoutSuccessUrl("/my/index") (3)
.logoutSuccessHandler(logoutSuccessHandler) (4)
.invalidateHttpSession(true) (5)
.addLogoutHandler(logoutHandler) (6)
.deleteCookies(cookieNamesToClear) (7)
)
...
}
open fun filterChain(http: HttpSecurity): SecurityFilterChain {
http {
logout {
logoutUrl = "/my/logout" (1)
logoutSuccessUrl = "/my/index" (2)
logoutSuccessHandler = customLogoutSuccessHandler (3)
invalidateHttpSession = true (4)
addLogoutHandler(logoutHandler) (5)
deleteCookies(cookieNamesToClear) (6)
}
}
// ...
}
1 | ログアウトのサポートを提供します。 |
2 | ログアウトをトリガーする URL(デフォルトは /logout )。CSRF 保護が有効になっている場合(デフォルト)、リクエストは POST である必要があります。詳細については、Javadoc を参照してください。 |
3 | ログアウト後にリダイレクトする URL。デフォルトは /login?logout です。詳細については、Javadoc を参照してください。 |
4 | カスタム LogoutSuccessHandler を指定してみましょう。これが指定されている場合、logoutSuccessUrl() は無視されます。詳細については、Javadoc を参照してください。 |
5 | ログアウト時に HttpSession を無効にするかどうかを指定します。これはデフォルトで真です。カバーに SecurityContextLogoutHandler を構成します。詳細については、Javadoc を参照してください。 |
6 | LogoutHandler を追加します。SecurityContextLogoutHandler は、デフォルトで最後の LogoutHandler として追加されます。 |
7 | ログアウトの成功時に削除する Cookie の名前を指定できます。これは、CookieClearingLogoutHandler を明示的に追加するためのショートカットです。 |
もちろん、ログアウトは XML 名前空間表記を使用して構成することもできます。詳細については、Spring Security XML 名前空間セクションのログアウト要素のドキュメントを参照してください。 |
一般に、ログアウト機能をカスタマイズするために、LogoutHandler (Javadoc)
および / または LogoutSuccessHandler (Javadoc)
実装を追加できます。多くの一般的なシナリオでは、これらのハンドラーは、Fluent API を使用するときに隠れて適用されます。
ログアウト XML 設定
logout
要素は、特定の URL にナビゲートすることでログアウトのサポートを追加します。デフォルトのログアウト URL は /logout
ですが、logout-url
属性を使用して他の URL に設定できます。他の利用可能な属性の詳細については、ネームスペースの付録を参照してください。
LogoutHandler
一般的に、LogoutHandler (Javadoc)
実装は、ログアウト処理に参加できるクラスを示します。これらは、必要なクリーンアップを実行するために呼び出されることが期待されています。そのため、例外をスローすべきではありません。さまざまな実装が提供されます。
詳細については、Remember-Me インターフェースと実装を参照してください。
LogoutHandler
実装を直接提供する代わりに、流れるような API は、それぞれの LogoutHandler
実装をカバーするショートカットを提供します。例: deleteCookies()
では、ログアウト成功時に削除される 1 つ以上の Cookie の名前を指定できます。これは、CookieClearingLogoutHandler
の追加と比較したショートカットです。
LogoutSuccessHandler
LogoutSuccessHandler
は、LogoutFilter
によるログアウトの成功後に呼び出され、たとえば適切な宛先へのリダイレクトまたは転送。インターフェースは LogoutHandler
とほぼ同じですが、例外が発生する可能性があることに注意してください。
次の実装が提供されます。
HttpStatusReturningLogoutSuccessHandler
上記のように、SimpleUrlLogoutSuccessHandler
を直接指定する必要はありません。代わりに、流れるような API は logoutSuccessUrl()
を設定することによりショートカットを提供します。これにより、SimpleUrlLogoutSuccessHandler
がカバーにセットアップされます。指定された URL は、ログアウトが発生した後にリダイレクトされます。デフォルトは /login?logout
です。
HttpStatusReturningLogoutSuccessHandler
は、REST API 型のシナリオで興味深い場合があります。ログアウトが成功したときに URL にリダイレクトする代わりに、この LogoutSuccessHandler
では、返されるプレーン HTTP ステータスコードを提供できます。設定されていない場合、デフォルトでステータスコード 200 が返されます。