ログインしたユーザの情報をコントロールで取得してみましょう。
ユーザ名はServletのリクエスト情報を表すHttpServletRequestクラスのオブジェクトのgetRemoteUserメソッドで取得できます。このユーザ名からUserクラスのオブジェクトを取得します。
コントローラは次のようになります。
1 2 3 4 5 6 7 |
@RequestMapping("user") public String user(ModelMap modelMap, HttpServletRequest httpServletRequest) { String username = httpServletRequest.getRemoteUser(); User user = userRepository.getOne(username); modelMap.addAttribute("user", user); return "user"; } |
- 1行目: 引数にHttpServletRequestを指定することによってそのオブジェクトが取得できる。
- 2行目: getRemoteUserメソッドでユーザ名を取得する。
- 3行目: getOneメソッドは、JpaRepositoryに最初から用意されているメソッドで、IDからインスタンスを取得することができる。
- 4行目: addAttributeメソッドで、userをビューに送る。String以外のオブジェクトでもビューに送ることができる。
ビューは次のようにします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8" /> <title>user</title> </head> <body> <h1>ユーザ情報</h1> <p>現在、下記のユーザでログインしています。</p> <dl> <dt>username</dt> <dd th:text="${user.username}">username</dd> <dt>password</dt> <dd th:text="${user.password}">password</dd> </dl> </body> </html> |
- 12,14行目: コントローラーからビューに送られてきたオブジェクトはgetterが設定されていればフィールドを取得することができます。usernameとpasswordはLombokによってgetUsername、getPasswordというgetterが生成されているため、${user.username}、${user.password}で値を取り出すことができます。
http://localhost:8080/userにアクセスすると(ログインしていない場合はログイン画面になり、ログインすると)ユーザ情報が表示されます。