Как получить зарегистрированное имя пользователя / принципала в 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 }