SlideShare 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

More from Takuya Iwatsuka

Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Takuya Iwatsuka
 
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデートSpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
Takuya Iwatsuka
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
Takuya Iwatsuka
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Takuya Iwatsuka
 
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsSpring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Takuya Iwatsuka
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
Takuya Iwatsuka
 

More from Takuya Iwatsuka (6)

Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud ContractSpring I/O 2018 報告 RESTDocs RAML, Cloud Contract
Spring I/O 2018 報告 RESTDocs RAML, Cloud Contract
 
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデートSpringOne Platform 2017報告会 メインプロジェクトのアップデート
SpringOne Platform 2017報告会 メインプロジェクトのアップデート
 
Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報Spring Security 5.0 解剖速報
Spring Security 5.0 解剖速報
 
Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応Spring I/O 2017 報告 ThymeleafのWebFlux対応
Spring I/O 2017 報告 ThymeleafのWebFlux対応
 
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular SessionsSpring I/O 2016 報告 Test / Cloud / Other Popular Sessions
Spring I/O 2016 報告 Test / Cloud / Other Popular Sessions
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 

Password validation with Passay