[Spring Roo] 09. パスワード変更機能の追加(jspxの編集)

2014/02/10 5:04 PM
 

今回は、パスワード変更機能の追加を通じて、jspx編集作業における注意点等を書く。

Rooによるjspx内要素の再生成(ラウンドトリップ)について

.jspxファイル内の要素は、エンティティの変更などを反映するために、Spring Rooによって自動的に更新される。だから、不要な項目などを削除しても自動的に復活してしまう。

この機能は便利である一方、デザインやセキュリティの面で邪魔になることもある。

今回の場合、アカウントの一覧画面や編集画面でのパスワードハッシュのフィールドが相当する。パスワードは、入力→ハッシュ化が一方通行である必要があり、また、ハッシュ化されたパスワードを画面に表示してもいけない。

Spring Web MVCリファレンスのJSP View(11.3)によると、jspx内の要素の属性について、以下のように書かれている。

  • id属性は、エンティティのフィールドに関連づいている。Roo Shellは、id属性とエンティティをチェックし、要素がjpsxから無くなっていれば再度生成する。
  • z属性には、エンティティのフィールド、属性の名前と値で生成されたハッシュ値が自動的に設定される。

ラウンドトリップを受けないようにするには

jspx内の要素を、Rooの自動再生成を受けないようにするには、次の方法がある。

タグ内の属性を変更する

ことz属性は、Rooが管理する要素なのかどうかを判断する重要なものである。

jspx内の要素の属性を変更すると、zに記述すべきハッシュ値が変わる。現在の属性の記述とzの値が合わない場合、Spring Rooは、ユーザが変更を望んでいると判断し、その要素に対する自動生成をやめる。そして、zの値を「user-managed」と変更してマークする。再びRooの自動再生成を受けたい場合は、zに「?」と、クエスチョンマークを書けばよい。

タグをdivやspanタグで囲む

自動再生成を受けたくない要素を、divやspanタグの中に入れることで、自動再生成されなくなる。これにより、見た目のデザインやドキュメントの構造を自由に保つことができる。

Accountの画面を変更

Accountの編集・詳細画面と一覧画面で、パスワードハッシュを表示しないようにしてみよう。

アカウント一覧・詳細画面の修正

まず、一覧のjspxファイル。デフォルトは以下のようになっている。

9行目を以下のように変更する。

すると、Rooが、以下のようにzの値を書き換えてくれる。自動的に書き換わらない場合は、Roo Shellを起動し直す(めんどい)。

実行して確認してみる。

変更前。パスワードハッシュが表示されていて、おまけに長過ぎてレイアウトが崩れている。

025

変更後。パスワードハッシュは表示されなくなった。

026

同様に、詳細画面でも、パスワードハッシュが表示されないようにしよう。

8行目のpasswordHashに、render=”false”を追加する。

変更前。

027

変更後。

028

アカウント編集画面の修正

次に、編集画面も修正しよう。

この画面では、前回までで保留となっていた、パスワードの変更が行えるようにする。

jspxの変更

まず、jspxを編集して、passwordHashフィールドを残しつつ、パスワードハッシュを表示しないように変更する。

8行目を、以下のように変更する。

重要な変更点は、以下の通り。

  • type=”password”として、パスワード入力フィールドにすること。
  • disableFormBinding=”true”として、編集のために検索した値を設定しないようにすること。
  • required=”false”として、入力を任意とすること。
  • label=”パスワードを変更する場合は入力”として、ラベル文字列を指定すること。

こうすることで、入力専用のフィールドとすることができる。

暗号化処理の追加

画面から入力されたパスワードは平文なので、新規登録時と同様、暗号化して保存する。

AccountControllerを変更して、パスワードが入力されていたら暗号化するようにしよう。

新規登録の時と同じように、AccountController_Roo_Controller.ajからupdateメソッドをコピーして、下記のように修正する。

updateメソッドの第1引数、accountには、バリデート済みのフォームの値が入っている。accountのpasswordHashの値が空文字(入力されていないと「””」)でなければ、createメソッドと同様の暗号化処理を実行。入力されていなければ、IDで検索した現在の値を代入して保存する。

以上の変更で、アカウントのパスワード変更が可能になる。

変更前。

030

変更後。パスワード入力っぽくなった。

031

結果画面は、先ほど修正した詳細画面。

032

ログアウトしてから、今設定したパスワードでログインを試みる。

033

ログイン成功。

034

「確認のためにパスワードをもう一度」機能の実装は後日。



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

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

RSS feed for comments on this post. TrackBack URI

コメントを書く

WordPress Themes