狠狠撸

狠狠撸Share a Scribd company logo
Password Validation
with Passay
2015/8/28 Spring in Summer 懇親会
岩塚 卓弥
1
あんた誰
名前:岩塚 卓弥
仕事:某通信会社の研究者
ソフトウェア工学とかの研究
最近は仕事でSpringを使用
2
何の話をするの
5
アカウント登録
アカウント名 :
パスワード:
パスワード(確認):
何の話をするの
5
アカウント登録
アカウント名 :
パスワード:
パスワード(確認):
はいはいアカウント名と
パスワードっと
iwatsuka
***
***
何の話をするの
5
アカウント登録
アカウント名 :
パスワード:
パスワード(確認):
はいはいアカウント名と
パスワードっと
パスワードは10文字以上で
大文字と小文字と数字を
それぞれ一文字以上含めて下さい
iwatsuka
***
***
何の話をするの
5
アカウント登録
アカウント名 :
パスワード:
パスワード(確認):
(; ?Д`)
はいはいアカウント名と
パスワードっと
パスワードは10文字以上で
大文字と小文字と数字を
それぞれ一文字以上含めて下さい
iwatsuka
***
***
何の話をするの
5
アカウント登録
アカウント名 :
パスワード:
パスワード(確認):
(; ?Д`)
はいはいアカウント名と
パスワードっと
パスワードは10文字以上で
大文字と小文字と数字を
それぞれ一文字以上含めて下さい
↑
コレの作り方について話します
iwatsuka
***
***
やりたいこと
パスワードの満たすべき条件をチェックしたい
チェックのロジックを汎用的に使いまわしたい
条件を柔軟にカスタマイズできると嬉しい
自作しようとすると結構面倒
6
使う機能?ライブラリ
Bean Validation
Java標準のValidation API
もちろん Spring Framework から使える
Passay ( http://www.passay.org )
パスワードValidation / Generation ライブラリ
7
Passayの使い方
1. Validationのルールをインスタンス化する
2. PasswordValidatorにルールをセットする
3. PasswordValidatorでパスワードをチェックする
8
1. Validationのルールをインスタンス
化する
よく使われるルールがクラスとして提供されている
「含まなければいけない」系ルール
長さ,大文字,小文字,数字,特殊文字,…
「含んではいけない」系ルール
最近使用したもの,ユーザ名を含むもの,…
自分でルールを作ることもできる
既存のルールのクラスを継承すると楽
9
1. Validationのルールをインスタンス
化する
基本的に複数のルールを組み合わせて使う
ルールのインスタンスをリストに格納
10
List<Rule> rules = Arrays.asList(
new LengthRule(8, 14),
new CharacterRule(EnglishCharacterRule.UpperCase, 1),
new CharacterRule(EnglishCharacterRule.LowerCase, 1)
)
長さ8~14文字
大文字?小文字をそれぞれ1字以上含む
2. PasswordValidator にルールを
セットする
実際にValidationを行うクラス
コンストラクタにルールのリストを渡す
ルールの差し替えはできない
11
PasswordValidator validator = new PasswordValidator(rules);
3. PasswordValidatorでパスワード
をチェックする
12
PasswordData pd = new PasswordData(password);
RuleResult result = validator.validate(pd);
boolean isValid = result.isValid();
文字列からPasswordDataを作成
結果やメッセージを
RuleResultとして返す
結果の取得
Custom Validatorを作る
13
@Retention(RetentionPolicy.RUNTIME)
@Target(/* … */)
@Constraint(validatedBy=CustomValidator.class)
@Documented
public @interface Password {
public class CustomValidator
implements ConstraintValidator<Password, Object> {
@Autowired
PasswordValidator passwordValidator;
@Override
private boolean isValid(Object value, ConstraintValidatorContext context){
//ここでPasswordValidatorを使う
詳細は略!
Google先生に聞いて!
Bean定義しておいた
PasswordValidatorをInjection
利用イメージ
14
public class AccountForm {
@Password
private String Password;
@Controller
public class AccountController {
@RequestMapping(/* … */)
private String create(
@Validated AccountForm form,
BindingResult bindingResult, /* … */){
Custom Validatorを付与する
チェックする
まとめ
Bean Validation と Passay で簡単にパスワードの
Validationができるよ
ルールが柔軟に組み合わせられる
カスタムルールも作れる
15
まとめ
Bean Validation と Passay で簡単にパスワードの
Validationができるよ
ルールが柔軟に組み合わせられる
カスタムルールも作れる
15
さまざまなルールをくみあわせて
キミだけの PasswordValidator をつくろう!
16
完

More Related Content

Password validation with Passay