1
9

More than 1 year has passed since last update.

SpringBootパスワードの相関チェック

Posted at

はじめに

今回は、SpringBootを使った相関チェックの実装を行ったので、備忘録として書いておきます。

環境

  • SpringBoot2.5.5
  • SpringSecurity
  • Thymeleaf
  • MyBatis2.2.0
  • MySQL5.6.50

実現したいこと

僕の場合は、よくあるパスワードとパスワード(確認用)の2つが一致しないといけないというバリデーションを実現したいため、そのような実装を行いました。

参考文献にあるように、@AssertTrueを用いての実装を行い、上記仕様のバリデーションを実現しました。

実装

import javax.validation.constraints.AssertTrue;

import lombok.Data;

@Data
public class SignupForm {

    private String password;

    private String passwordConfirmation;

    @AssertTrue(message = "PasswordとPassword confirmationは同一にしてください。")
    public boolean isPasswordValid() {
        if (password == null || password.isEmpty()) {
            return true;
        }

        return password.equals(passwordConfirmation);
    } 
}

@AssetTrueを用いると、相関チェックはラクに実装できます。これ以外の方法だと、自身でアノテーションを作成するなどがあります。

上記のコードを簡単に説明すると、パスワードの相関チェックは確認用の入力の際に行いたいので、if分の条件式でパスワードの入力欄がnullや空の時はバリデーションにかからないようにしています。

パスワードの入力がされた時は、パスワード(確認用)と等しいかを比較します。

エラーメッセージの表示

    @PostMapping("/signup")
    public String postSignup(@Validated @ModelAttribute("form") SignupForm form, BindingResult result) {

        /* 入力チェック*/
        if (result.hasErrors()) {
            /* NG:ユーザー登録画面に戻る*/
            return "user/signup";
        }

        return "redirect:/";

}

まずはコントローラーですが、@Validatedアノテーションを使うことでバリデーションのチェックができます。
そして、BindingResultには、バリデーションの結果が格納されます。

そのため、if分の条件式では、「バリデーション結果がエラーの時」という条件を指定します。

<p th:if="${#fields.hasErrors('passwordValid')}" th:errors="*{passwordValid}"></p>

次にビューですが、相関チェックのメソッドisPasswordValidを変数化しpasswordValidとすることでメッセージの表示を行えます。

「どこからそんな変数が来たんや、、、」という方に向けて言うと、まず、コントローラーでバリデーション結果(BindingResult)を格納しているため、それをビューに渡せばメッセージは表示できます。

その時にformクラスに定義した相関チェックのメソッドも、当然渡されることになるので、ビューで呼び出す時に「is」を抜き、変数として扱うことでメッセージを表示しているという流れです。

参考文献

1
9
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
1
9