2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SpringSecurity 403エラーページをカスタマイズする

Last updated at Posted at 2022-06-28

はじめに

SpringSecurity その4です。前回からの続きになっています。
今回はエラーページをカスタマイズしていきます。

SpringSecurityシリーズ 項目表

NO タイトル
その1 SpringSecurity 導入から基本的な認証フロー
その2 SpringSecurity ログインページをカスタマイズする
その3 SpringSecurity DBアクセス処理
その4 SpringSecurity 403エラーページをカスタマイズする

前回からの続きになっている為、その1から順にご覧ください。

現在の課題

アクセス権限の設定を行なったページに権限のないアカウントでアクセスすると、
「Whitelabel Error Page」が表示される。
image.png

403エラーは権限がない場合などに発生するエラーです。
/admin は、ADMIN権限を持ったアカウントのみがアクセスできるよう設定を行なっています。
この章では、エラーの際に用意したページが表示されるように実装していきます。

実装

SpringSecurityの設定

エラーの際に用意したページが表示されるように設定を追加します。

SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

  <!-- 中略 -->

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    // アクセス権限の設定
    http.authorizeRequests()
        // 制限なし
        .antMatchers("/", "/login*", "/logout").permitAll()
        // '/admin'は、'ADMIN'ロールのみアクセス可
        .antMatchers("/admin").hasRole("ADMIN")
        // 他は制限あり
        .anyRequest().authenticated();
    // ログイン処理の設定
    http.formLogin()
        // ログイン処理のURL
        .loginPage("/login")
        // usernameのパラメータ名
        .usernameParameter("user")
        // passwordのパラメータ名
        .passwordParameter("password")
        // ログイン失敗時の遷移先URL
        .failureForwardUrl("/login-error");
    // ログアウト処理の設定
    http.logout()
        // ログアウト処理のURL
        .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        // ログアウト成功時の遷移先URL
        .logoutSuccessUrl("/login")
        // ログアウト時に削除するクッキー名
        .deleteCookies("JSESSIONID")
        // ログアウト時のセッション破棄を有効化
        .invalidateHttpSession(true);
    // エラー処理の設定    
    http.exceptionHandling().accessDeniedPage("/error");
  }

 <!-- 中略 -->

}

追加したのは、http.exceptionHandling().accessDeniedPage("/error");のみです。
これでエラーの際に指定したページが表示されるようになります。
accessDeniedPage(...)で表示させたいページを指定します。

画面遷移用ページの用意

ページ遷移の確認用に、必要最小限のエラーページを用意します。

View

error.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
  <head>
    <meta charset="UTF-8">
    <title>errorページ</title>
  </head>
  <body>
    <h1>errorページ</h1>
    <p>アクセス権限が不足 or URLが正しく入力されていない</p>
    <a href="/">トップページに戻る</a>
  </body>
</html>

動作確認

アクセス権限の有無でそれぞれ動作確認を行います。

アクセス権限があるアカウント

アクセス権限があるアカウントでログインします。
image.png

権限設定されたページにアクセスできます。
image.png

アクセス権限がないアカウント

アクセス権限がないアカウントでログインします。
image.png

権限設定されたページにアクセスできません。エラーページが表示されます。
image.png

おわりに

これでSpringSecurityの403エラーページをカスタマイズすることができました。
間違っている箇所ありましたら、ご指摘いただければ幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?