キーワード†
- Spring Boot
- Spring Security
したいこと†
Spring Securityでログインしたログインユーザーの情報(LoggedInUser implements UserDetails)を取得したい。
どうやって†
ControllerAdviceで@ModelAttributeをセットしておくのが楽だと思う。
@ControllerAdvice
public class PrincipalControllerAdvice {
@ModelAttribute
public LoggedInUser getLoggedInUser(Principal principal) {
return
Optional.ofNullable(principal)
.filter(p -> p instanceof Authentication).map(p -> (Authentication) p)
.map(a -> a.getPrincipal())
.filter(p -> p instanceof LoggedInUser).map(p -> (LoggedInUser) p)
.orElse(null);
}
}
リクエストハンドラでは@ModelAttributeで取得できる。
@RequestMapping("/nanika")
public String nanika(
@ModelAttribute LoggedInUser loggedInUser,
Model model
) { /* 処理 */ }
ノート†
- 定形処理はアスペクトにしておくのが吉
- 毎リクエストごとにデータベースから取得するなら、
ここで取得できるusernameを使ってLoadServiceを呼べばいい