Spring Securityでのログインユーザー名の取得方法
今回は、Spring Securityに関連する実践的なTipsの紹介です。
Spring Securityによるログインが成功すると、UserDetailsクラスのオブジェクトを含むorg.springframework.security.core.context.SecurityContextHolderがセッションに保持されます。
UserDetailsクラスのオブジェクトには、ログインしたユーザー名の情報が含まれます。
ログイン後の画面でのログインユーザー名の取得は、セッションに保持されているSecurityContextHolderからUserDetailsクラスのオブジェクトを取得することで実現できます。
サンプルコードの紹介
サンプルコードは以下の通りです。
(ログインユーザー名の取得に関係しないコードは省略します)
【サンプルコード】
・SecuritySession.java
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
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」というユーザー名でログイン

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

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

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

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


コメント