2013-07-18 9 views
6

Ich habe Spring MVC REST-Kanal:Wie protokolliert man Benutzername/Principal im Frühling MVC REST-Kanal?

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

und ich habe meine Methode.

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

Jetzt muss ich den Namen des Benutzers, der angemeldet ist es normalerweise durch die Methode, die ich tun könnte

HttpServletRequest.getUserPrincipal() 

aber wie man es hier bekommt? Ich habe Anmerkungen für Kopfzeilen (@RequestHeader) oder sogar Cookies (@CookieValue). Aber wie kann ich die Principal in meiner Methode bekommen?

Antwort

19

Sie können Principal-Objekt zu Ihrem Controller-Handler-Methode injizieren

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

Siehe the spring reference manual for more info

+0

OK, mein Fehler war, habe ich es nur versucht, mit Anmerkungen. –

9

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

    } 

Here is reference

+0

Im Vergleich zur Injektion von Principal in die Controller-Methode funktioniert dies auch in anderen Handler-Methoden, die das Principal-Objekt nicht injizieren können. –

2

Sie können auch durch Anmerkungen erhalten unter der Annahme CustomUser implementiert 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 } 
Verwandte Themen