home wiki.fukuchiharuki.me
Menu

キーワード

  • 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を呼べばいい

参考