最新の安定バージョンについては、Spring Security 6.3.1 を使用してください!

ログアウトの処理

ログアウト 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 を参照してください。
6LogoutHandler を追加します。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 とほぼ同じですが、例外が発生する可能性があることに注意してください。

次の実装が提供されます。

上記のように、SimpleUrlLogoutSuccessHandler を直接指定する必要はありません。代わりに、流れるような API は logoutSuccessUrl() を設定することによりショートカットを提供します。これにより、SimpleUrlLogoutSuccessHandler がカバーにセットアップされます。指定された URL は、ログアウトが発生した後にリダイレクトされます。デフォルトは /login?logout です。

HttpStatusReturningLogoutSuccessHandler は、REST API 型のシナリオで興味深い場合があります。ログアウトが成功したときに URL にリダイレクトする代わりに、この LogoutSuccessHandler では、返されるプレーン HTTP ステータスコードを提供できます。設定されていない場合、デフォルトでステータスコード 200 が返されます。

その他のログアウト関連の参照