[Spring Roo] 07. パスワードのハッシュ化とDBへの保存

2014/02/10 1:49 AM
 

これまで作ってきたオンラインメモ・アプリに、認証機能を追加しよう。

今回は、Accountテーブルに暗号化されたパスワードを保存できるようにする。次回、Spring Securityを使用して、ユーザ認証を行うように変更していく。

Accountエンティティには、既にloginIdとpasswordHashのフィールドを用意してあるので、これを利用して認証を行う。

パスワードの変更機能については別途。

パスワードをハッシュで保存する

Accountエンティティを新規登録して保存する際に、パスワードのハッシュ化を行う。ハッシュ化には、SpringのBCryptPasswordEncoderを使用する。

BCryptという暗号化手法は、処理時間をかけて何回もハッシュ化を行うことで、SHAやMD5に比べ格段に破られにくいと言われている。ほとんどのケースで使えるだろうと、Spring Securtyのリファレンスにも書かれている。

AccuontControllerへのメソッドの追加

まず、AccountControllerの新規登録メソッドに、ハッシュ化処理を追加する。

Roo Shellでweb mvc setupを実行した直後のAccountController.javaは、このように何も書かれていない状態だ。

実装はAccountController_Roo_Controller.ajに書かれている。この中に定義されたcreateメソッド(31行目〜40行目)が、AccountControllerに追加されて実行される。

Spring Rooを使用する上で、このITDファイルは書き換えてはいけない(書き換えても戻されてしまう)。

しかし、AccountController本体に同じメソッドを記述すると、Rooによって自動的にITDファイルから削除される。この仕組みを使って、ITDファイルの該当の箇所を元にAccountControllerに手を入れよう。

AccountController_Roo_Controller.ajのcreateメソッド(31行目〜40行目)をAccountControllerにコピーし、下記のように書き換える。

ほとんど同じだが、メソッド名の前の「AccountController.」を削除する必要がある。

書いたままだとビルドエラーになる。しかし、保存してビルドすると、RooによってITDファイルも更新され、ビルドエラーが消える。Spring Rooが起動していないと更新されないので、この時までに、Roo Shellを起動しておくのを忘れないように。

ハッシュ化処理の追加

次に、Spring securityのBCryptPasswordEncoderを使って、createメソッド内でAccountオブジェクトのpasswordHashを書き換える処理を追加する。createメソッドに暗号化の処理を追加する。

実行と確認

では、プロジェクトをリフレッシュ(ビルド)して、サーバを起動し、動作確認をしてみよう。

新規作成画面で、パスワードに「m1xNu7sA1m0nd」を入力。

020

作成結果画面で、「$2a$10$pbw90mf6KxgLJ5xFYTZjgO4ku1IPl2lgwuwjd5TuObUDGRGplc8tu」になった。

021

これで、ハッシュ化されたパスワードがデータベースに保存されるようになった。

次回は、このAccountテーブルの情報を使用してログインする仕組みをつくる。 



コメントはまだありません

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを書く

WordPress Themes