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

ログアウトの処理

このセクションでは、ログアウトの処理をカスタマイズする方法について説明します。

ログアウト 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 {                                                  (1)
            logoutUrl = "/my/logout"                              (2)
            logoutSuccessUrl = "/my/index"                        (3)
            logoutSuccessHandler = customLogoutSuccessHandler     (4)
            invalidateHttpSession = true                          (5)
            addLogoutHandler(logoutHandler)                       (6)
            deleteCookies(cookieNamesToClear)                     (7)
        }
    }
    // ...
}
1 ログアウトのサポートを提供します。
2 ログアウトをトリガーする URL(デフォルトは /logout)。CSRF 保護が有効になっている場合(デフォルト)、リクエストも POST である必要があります。詳細については、logoutUrl(java.lang.String logoutUrl) (Javadoc) を参照してください。
3 ログアウトが発生した後にリダイレクトする URL。デフォルトは /login?logout です。詳細については、logoutSuccessUrl(java.lang.String logoutSuccessUrl) (Javadoc) を参照してください。
4 カスタム LogoutSuccessHandler を指定しましょう。これを指定すると、logoutSuccessUrl() は無視されます。詳細については、LogoutSuccessHandler (Javadoc) を参照してください。
5 ログアウト時に HttpSession を無効にするかどうかを指定します。これはデフォルトで当てはまります。裏で SecurityContextLogoutHandler を構成します。詳細については、invalidateHttpSession(boolean invalidateHttpSession) (Javadoc) を参照してください。
6LogoutHandler を追加します。デフォルトでは、SecurityContextLogoutHandler が最後の LogoutHandler として追加されます。
7 ログアウトが成功すると、Cookie の名前の指定を削除できます。これは、CookieClearingLogoutHandler を明示的に追加するためのショートカットです。

ログアウトは、XML 名前空間表記を使用して構成することもできます。詳細については、Spring Security XML 名前空間セクションのログアウト要素のドキュメントを参照してください。

一般に、ログアウト機能をカスタマイズするために、LogoutHandler (Javadoc)  または LogoutSuccessHandler (Javadoc)  の実装を追加できます。多くの一般的なシナリオでは、これらのハンドラーは、流れるような API を使用するときに内部で適用されます。

ログアウト XML 設定

logout 要素は、特定の URL に移動してログアウトするためのサポートを追加します。デフォルトのログアウト URL は /logout ですが、logout-url 属性を設定することで別の URL に設定できます。他の使用可能な属性の詳細については、名前空間の付録を参照してください。

LogoutHandler

一般に、LogoutHandler (Javadoc)  実装は、ログアウト処理に参加できるクラスを示します。これらは、必要なクリーンアップを実行するために呼び出されることが期待されています。結果として、例外をスローするべきではありません。Spring Security は、さまざまな実装を提供します。

詳細は Remember-Me インターフェースと実装を参照してください。

LogoutHandler 実装を直接提供する代わりに、Fluent API は、それぞれの LogoutHandler 実装を内部で提供するショートカットも提供します。例: deleteCookies() では、ログアウトが成功したときに削除する 1 つ以上の Cookie の名前を指定できます。これは、CookieClearingLogoutHandler を追加する場合と比較した場合のショートカットです。

LogoutSuccessHandler

LogoutSuccessHandler は、LogoutFilter によるログアウトが成功した後に呼び出され、(たとえば)適切な宛先へのリダイレクトまたは転送を処理します。インターフェースは LogoutHandler とほぼ同じですが、例外が発生する可能性があることに注意してください。

Spring Security は、次の実装を提供します。

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

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