Unixな話を中心に。最近は雑多な内容が多かったりして...。Bootと題して、ログイン/ログアウト時にクエリパラメータを保持する方法について書いたんだけど、こいつの参照実装を後輩君に教えてやったところ、「ログイン失敗時のメッセージが出なくなったんすけど?」とかいうリプライが。Securityの設定をしていたようだが、「ログインに失敗したときに、画面上どうふるまうか」を理解せぬまま、僕が示した参照実装のコードを丸写ししていたようで、あんなリプライを出してきた模様。このあたり、「自分で考えろ」と突き放してもよかったんだが、後学のために「どうすればいいか」を少々考えてみることにする。実際どうなっているのか氏の書籍には、だいたいこんな感じでエラーメッセージ周りの処理が紹介されている。th:if="${param.error}>ユーザー名、またはパスワードが違います。それが証拠に、認証に失敗しなくても、「/loginForm?error」をブラウザのアドレスバーに直接入力すると、エラーメッセージが出るはずである。これ自体は、話を簡単にするための処置なのだろう、と考えているのだが、今回の一件では、認証の成功、失敗で適切にクエリパラメータを加工して流す考慮が必要になるので、アプローチとしては以下の2つがあると考える。URLだけで制御する場合Viewの実装をそのままにしたい場合、いままでどおりURLでコントロールするよう、クエリパラメータを適切に追加、削除する処理を書けばよい、ということになる。}汚い実装で恐縮だが、雰囲気は伝わっただろうか。オブジェクトとして受け取ることができるようになっている。(参考)「パスワードが違う」「アカウントが有効期限切れ」「アカウント凍結中」など、詳細に調べることができるので、これを使って流すエラーメッセージを選別すればいい。}一方Thymeleafには、セッションオブジェクトを扱うための「session」というそのものずばりな予約変数がある。Thymeleaf」という公式ドキュメントに詳しく書かれているので、ひとまずそちらを参照していただくとして、セッションにエラーメッセージを置くなら、セッションから値を取り出して張る処理をViewテンプレートに書く。th:text="${session.errReason}">Hoge</div>この方法のメリットは、クエリパラメータをこねくり回す必要がなくなる点で、おそらくこういう方法のほうがフレームワークの設計思想に沿ったものなんじゃないだろうか、と個人的に考えている。動く参照実装URLだけでコントロールしたい場合はこちらを、セッションを使う場合はこちらを、それぞれご参照ください。芸能・アイドルRSSを表示する@niftyが提供する無料ブログはココログ!。