Spring Securityのログアウト

Spring Securityログアウト

1. 概要

この記事は、Form Login tutorialの上に構築されており、Logout with Spring Securityを構成する方法に焦点を当てます。

参考文献:

Spring Security:データベースがサポートするUserDetailsS​​erviceによる認証

Spring Securityを使用した認証用のカスタムデータベースバックアップUserDetailsS​​erviceを作成するためのクイックガイド。

Spring Method Securityの概要

Spring Securityフレームワークを使用したメソッドレベルセキュリティのガイド。

Spring Security –ログイン後に以前のURLにリダイレクトする

Spring Securityでのログイン後のリダイレクトの簡単な例

2. 基本設定

logout()メソッドを使用したSpring Logout functionalityの基本構成は、十分に単純です。

@Configuration
@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        http
          //...
          .logout()
          //...
   }
   //...
}

そして、XML構成を使用します。



    ...
    

この要素は、デフォルトのログアウトメカニズムを有効にします。これは、次のlogout urlを使用するように構成されています。https://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html#m3to4-xmlnamespace-logout.の前に/j_spring_security_logoutであった/logout

この簡単な例を続けると、Webアプリケーションでlogout linkを提供する方法は次のとおりです。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

   
   
      ">Logout
   

4. 高度なカスタマイズ

4.1. logoutSuccessUrl()

ログアウトプロセスが正常に実行された後、Spring Securityはユーザーを指定されたページにリダイレクトします。 デフォルトでは、これはルートページ(“/”)ですが、これは構成可能です。

//...
.logout()
.logoutSuccessUrl("/afterlogout.html")
//...

これは、XML構成を使用して行うこともできます。

アプリケーションによっては、ユーザーをログインページにリダイレクトすることをお勧めします。

//...
.logout()
.logoutSuccessUrl("/login.html")
//...

4.2. logoutUrl()

Spring Securityの他のデフォルトと同様に、ログアウトメカニズムを実際にトリガーするURLにもデフォルトがあります–/logout

ただし、このデフォルト値を変更して、アプリケーションを保護するために使用されるフレームワークに関する情報が公開されないようにすることをお勧めします。

.logout()
.logoutUrl("/perform_logout")

そして、XMLを介して:

4.3. invalidateHttpSessionおよびdeleteCookies

これらの2つの高度な属性は、セッションの無効化と、ユーザーがログアウトするときに削除されるCookieのリストを制御します。 そのため、invalidateHttpSessionを使用すると、ログアウト時にセッションが無効にならないようにセッションを設定できます(デフォルトではtrue)。

deleteCookiesメソッドも簡単です。

.logout()
.logoutUrl("/perform_logout")
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")

そして、XMLバージョン:

4.4. logoutSuccessHandler()

名前空間の柔軟性が十分でない、より高度なシナリオでは、Spring ContextのLogoutSuccessHandlerBeanをカスタム参照に置き換えることができます。

@Bean
public LogoutSuccessHandler logoutSuccessHandler() {
    return new CustomLogoutSuccessHandler();
}

//...
.logout()
.logoutSuccessHandler(logoutSuccessHandler());
//...

同等のXML構成は次のとおりです。



...

任意のcustom application logic that needs to run when the user successfully logs outは、カスタムログアウト成功ハンドラーを使用して実装できます。 たとえば、ユーザーがログアウトをトリガーしたときの最後のページを追跡する単純な監査メカニズム:

public class CustomLogoutSuccessHandler extends
  SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {

    @Autowired
    private AuditService auditService;

    @Override
    public void onLogoutSuccess(
      HttpServletRequest request,
      HttpServletResponse response,
      Authentication authentication)
      throws IOException, ServletException {

        String refererUrl = request.getHeader("Referer");
        auditService.track("Logout from: " + refererUrl);

        super.onLogoutSuccess(request, response, authentication);
    }
}

また、このカスタムBeanには、ユーザーがログアウトした後の宛先を決定する責任があることに注意してください。 このため、logoutSuccessHandler属性とlogoutSuccessUrlのペアリングは機能しません。どちらも、同様の機能をカバーしているためです。

5. 結論

この例では、Spring Securityを使用して簡単なログアウトサンプルを設定することから始め、次に、利用可能なより高度なオプションについて説明しました。

このSpringLogoutチュートリアルの実装は、the GitHub projectにあります。これはEclipseベースのプロジェクトであるため、そのままインポートして実行するのは簡単です。

プロジェクトをローカルで実行すると、サンプルHTMLにアクセスできます。