Как получить зарегистрированное имя пользователя / принципала в Spring MVC REST channel?

У меня есть Spring MVC REST канал:

@Controller
@RequestMapping("/rest")
public class REST {

и у меня есть мой метод:

@RequestMapping(value = "/doSomething")
public @ResponseBody DoSomethingResultDTO doSomething(
    @RequestBody DoSomethingRequestDTO)

Теперь мне нужно имя пользователя, который вошел в систему. Обычно я мог сделать это методом

HttpServletRequest.getUserPrincipal()

но как получить это здесь? У меня есть аннотации для заголовков (@RequestHeader) или даже печенье (@CookieValue). Но как я могу получить Principal в моем методе?

3 ответа

Решение

Вы можете внедрить объект Principal в метод вашего контроллера

@RequestMapping(value = "/doSomething")
public @ResponseBody DoSomethingResultDTO doSomething(
    @RequestBody DoSomethingRequestDTO, Principal principal)

См. Весеннее справочное руководство для получения дополнительной информации.

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";

  }

Вот ссылка

Вы также можете получить аннотации, предполагая, что CustomUser реализует UserDetails

@RequestMapping(value = { "/home" }, method = RequestMethod.GET)
public String home(@AuthenticationPrincipal CustomUser customUser, Model model, HttpServletRequest request,
        HttpServletResponse response, Locale locale) throws Exception {

    System.out.println("Entering Home Controller @AuthenticationPrincipal: " + customUser);
}

public class CustomUser implements UserDetails { // code omitted }
Другие вопросы по тегам