10

I have Spring MVC REST channel:

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

and I have my method:

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

Now I need the name of the user that is logged in. Normally I could do it by the method

HttpServletRequest.getUserPrincipal()

but how to get it here? I have annotations for headers (@RequestHeader), or even cookies (@CookieValue). But how can I get the Principal in my method?

Danubian Sailor
  • 1
  • 38
  • 145
  • 223

2 Answers2

24

You can inject Principal object to your controller handler method

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

See the spring reference manual for more info

gerrytan
  • 40,313
  • 9
  • 84
  • 99
4

You can also get through annotations assuming CustomUser implements 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 }
Anand
  • 1,845
  • 2
  • 20
  • 25