Spring Securityでのログインユーザー名の取得方法
今回は、Spring Securityに関連する実践的なTipsの紹介です。
Spring Securityによるログインが成功すると、UserDetailsクラスのオブジェクトを含むorg.springframework.security.core.context.SecurityContextHolderがセッションに保持されます。
UserDetailsクラスのオブジェクトには、ログインしたユーザー名の情報が含まれます。
ログイン後の画面でのログインユーザー名の取得は、セッションに保持されているSecurityContextHolderからUserDetailsクラスのオブジェクトを取得することで実現できます。
サンプルコードの紹介
サンプルコードは以下の通りです。
(ログインユーザー名の取得に関係しないコードは省略します)
【サンプルコード】
・SecuritySession.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package com.example.util; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; @Component public class SecuritySession { public String getUsername() { // SecurityContextHolderから // org.springframework.security.core.Authenticationオブジェクトを取得 Authentication authentication = SecurityContextHolder.getContext() .getAuthentication(); if (authentication != null) { // AuthenticationオブジェクトからUserDetailsオブジェクトを取得 Object principal = authentication.getPrincipal(); if (principal instanceof UserDetails) { // UserDetailsオブジェクトから、ユーザ名を取得 return ((UserDetails) principal).getUsername(); } } return null; } } |
・MainCotroller.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.beans.factory.annotation.Autowired; import com.example.util.SecuritySession; import org.springframework.ui.Model; import java.util.Locale; @Controller @RequestMapping("/main") public class MainCotroller { @Autowired private SecuritySession securitySession; /** メイン画面を表示 */ @GetMapping("/main") public String getMain(Model model, Locale localem) { System.out.println(securitySession.getUsername()); return "main/main"; } } |
【実行結果】
・「0001」というユーザー名でログイン

・ログイン後のコンソール表示の確認
1 |
0001 |
あとがき
今回紹介した内容は、弊社から出版している後述の書籍でも紹介しています。
弊社の書籍では、このような実践的なコーディングも含めて、実務で使う技術や知識を盛り込んでいますので、ご興味があれば是非手に取ってみてください!
株式会社サイゼントでは、即戦力のJavaプログラマーを育てるための書籍「絶対にJavaプログラマーになりたい人へ」をKindleで販売しています。

同じく、Spring Frameworkについてきめ細かく解説した別冊も販売中です。

また、上記の書籍をテキストとして用いたプログラミングスクール「サイゼントアカデミー」も開校しています。
このスクールは、受託開発事業・SES事業である弊社が、新入社員向けの研修で培ったノウハウを詰め込んだものです。

ご興味がある方は、上記画像から個別ページにアクセスしてみてください!
コメント