Spring Boot/特定のログインエラーで画面遷移する

ポケットがチケットでいっぱい

編集 追加
| | | |
2017-05-24 (水) 11:40:13 (147d)
Top / Spring Boot / 特定のログインエラーで画面遷移する

キーワード

  • Spring Boot
  • Spring Security

したいこと

特定のログインエラー時に画面遷移したい(ログイン画面には戻らずに)。

どうやって

認証失敗したときのハンドラを用意する

public class SecurityConfigAuthenticationFailureHandler 
  extends ExceptionMappingAuthenticationFailureHandler{

	public SecurityConfigAuthenticationFailureHandler() {
		this.setDefaultFailureUrl("/");
		this.setExceptionMappings(getFailureUrlMap());
	}
	
	private Map<String, String> getFailureUrlMap() {
		Map<String, String> map = new HashMap<>();
		map.put(CredentialsExpiredException.class.getName(), "/password_reset");
		return map;
	}

}
  • Mapは<String,String>
    • 例外のクラス名
    • リダイレクト先(コンテキストパスは補ってくれる)

ハンドラをセットする

http.formLogin()
  .loginPage("/")
  .loginProcessingUrl("/login")
  .failureHandler(new SecurityConfigAuthenticationFailureHandler())
  // あといろいろ

リダイレクト先を認証不要にする

http.authorizeRequests()
  // 認証不要
  .antMatchers(
      // ログインフォーム
      "/",
      // パスワードリセット
      "/password_reset"
  )
  .permitAll()
  // あといろいろ

ノート

こうだよとバシッと書いてくれてる記事が見つからなくて少してこずった。

いやいや、これだとパスワードリセット画面でもログインIDを入力してもらわないといけなくなる。CredentialsExpiredExceptionしてるときはログインができていないので。controllerの処理としてリダイレクトするしかないのかなあ。→Spring Boot/パスワードの有効期限切れでリダイレクトする

参考