yuusuke-roughの日記

Java,SpringBoot,趣味等

例外処理をしたいのでExceptionHandle等の動作確認 in SpringSecurity

はじめに

綺麗な桜と花見をしている人々の幸せそうな光景をぼんやり眺めていたり、ジムでZARDのDon't you seeが流れていて懐かしさに浸ったり、仕事の失敗で苦い現実と向き合わなくてはいけない1週間でした。

改めて、背中をとんと押してくれるような機会には巡り合えない人生なのだなと暗い気持ちになりますが、春風を浴びたりや枝垂桜を見ていると「辞めるその時までは頑張ろう」と思えます。

学習の悩みはスレッドセーフの概念が今一ピンと来ません。

師が欲しい...

 

さて、今回はSpringSecurityでのログイン時の例外処理とコントローラー内での例外処理の実装を学習の記録です。

 

動作環境

Spring Boot 2.6.3

Java SE11

 

実装しようとしたこと

SpringSecurityでのログイン時の例外処理とコントローラー内での例外処理です。

 

①ログイン時の例外処理については下記サイトとサイト内のgithubを参考にしました。

www.baeldung.com

 

②コントローラ内での例外処理は下記サイトを参考にしました。

qiita.com

 

実装の記録

①ログイン時の例外処理

2要素認証の例外はBadCredentialExceptionだが、AuthenticationExceptionを引数とするAuthenticationFailureHandler内のonAuthenticationFailureにて、BadCredentialExceptionのエラーメッセージを受け取れるか試すと不可。

そもそもCustomAuthenticationFailureHandler自体が呼び出されない。

 

→今回の場合はログインできない旨をメッセージで表示するだけなので、paramとth:ifだけで処理可能だった。※上記は今後検討したい。

 

②コントローラ内での例外処理

ExceptionHandlerを使用して最小の構成を実装しました。

以下、コントローラー

 

@Controller
public class TestController{
    

@GetMapping("test")
    public String b() {
        throw new RuntimeException("最小構成で考える");
        
    }
    
    @ExceptionHandler({RuntimeException.class})
    public String handlerException(Model model, RuntimeException rEx) {
        model.addAttribute("message", rEx.getMessage());
        System.out.println(rEx.getMessage());
        return "hello";
    }

}

 

RuntimeExceptionが発生した時に @ExceptionHandlerで処理してもらいました。

 

最後に

「その実装が必要なのか」という前提から間違ってしまいました。

今後使うのは@ExceptionHandlerとして、登録処理などに適用できるか動作を確認していきたいです。