この記事では、Spring Securityで現在ログインしているユーザー名を取得する3つの方法を示します。

1. SecurityContextHolder Authentication.getName()

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class LoginController {

  @RequestMapping(value="/login", method = RequestMethod.GET)
  public String printUser(ModelMap model) {

      Authentication auth = SecurityContextHolder.getContext().getAuthentication();
      String name = auth.getName();//get logged in username

      model.addAttribute("username", name);
      return "hello";

  }
 //...

2. SecurityContextHolder User.getUsername()

import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class LoginController {

  @RequestMapping(value="/login", method = RequestMethod.GET)
  public String printUser(ModelMap model) {

      User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
      String name = user.getUsername();//get logged in username

      model.addAttribute("username", name);
      return "hello";

  }
 //...

3. UsernamePasswordAuthenticationToken

これはより洗練された解決策です。実行時にSpringは

UsernamePasswordAuthenticationToken`を

Principal`インターフェースに注入します。

import java.security.Principal;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class LoginController {

  @RequestMapping(value="/login", method = RequestMethod.GET)
  public String printWelcome(ModelMap model, Principal principal ) {

      String name = principal.getName();//get logged in username
      model.addAttribute("username", name);
      return "hello";

  }
 //...

ソースコードをダウンロードする

ダウンロードする –

Spring-Security-Get-Logged-In-Username.zip

(9 KB)