Spring Security:ログインユーザー名をセッションから取得する方法を紹介!

java

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事業である弊社が、新入社員向けの研修で培ったノウハウを詰め込んだものです。

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

コメント

タイトルとURLをコピーしました