web-dev-qa-db-ja.com

Spring Bootで「ログアウト」機能を実装する

基本的なセキュリティ機能を機能させるために、次のスターターパッケージをpom.xmlに追加しました

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

また、次の2つのプロパティをapplication.propertiesに追加しました。

security.user.name = guest
security.user.password = tiger

ホームページにアクセスすると、ログインボックスが表示され、期待どおりにログインできます。

次に、「ログアウト」機能を実装します。基本的に、ユーザーがリンクをクリックすると、ログアウトされます。ログインしてもブラウザにCookieが追加されないことに気付きました。 Spring SecurityはユーザーのHttpSessionオブジェクトを作成すると仮定しています。本当?このセッションを「無効化」して、ユーザーを他のページにリダイレクトする必要がありますか?スプリントブートベースのアプリケーションに「ログアウト」機能を実装する最良の方法は何ですか?

26
DilTeam

後期は決してないよりはましです。 Spring Bootは、CSRF保護を含む多くのセキュリティコンポーネントをデフォルトで設定します。行うことの1つはforce POST logout、こちらを参照してください: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle /#csrf-logout

これが示唆するように、次の行に沿って何かを使用して、これをオーバーライドできます。

http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")                                      
.anyRequest().fullyAuthenticated()
.and()
.formLogin().loginPage("/login").failureUrl("/login?error").permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/login");

最後の行は重要な行です。

79
mmeany