2013-07-18 10 views
6

मैं वसंत MVC बाकी चैनल है:स्प्रिंग एमवीसी रीस्ट चैनल में लॉग इन उपयोगकर्ता नाम/प्रिंसिपल कैसे प्राप्त करें?

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

और मैं अपने तरीके होते है:।

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

अब मैं उपयोगकर्ता कि प्रवेश होने के नाम की जरूरत है आम तौर पर मैं विधि द्वारा यह कर सकता है

HttpServletRequest.getUserPrincipal() 

लेकिन इसे यहां कैसे प्राप्त करें? मेरे पास हेडर (@RequestHeader), या यहां तक ​​कि कुकीज़ (@CookieValue) के लिए एनोटेशन हैं। लेकिन मैं अपनी विधि में Principal कैसे प्राप्त कर सकता हूं?

उत्तर

19

आप अपने नियंत्रक हैंडलर विधि के प्रधान वस्तु इंजेक्षन कर सकते हैं

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

the spring reference manual for more info

+0

ठीक तुम भी CustomUser संभालने एनोटेशन के माध्यम से प्राप्त कर सकते हैं, मेरे त्रुटि हुई थी, मैं इसे केवल एनोटेशन के साथ की कोशिश की है। –

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 देखें
+0

नियंत्रक विधि में प्रधानाचार्य इंजेक्शन की तुलना में, यह अन्य हैंडलर विधियों में भी काम करेगा जो प्रिंसिपल ऑब्जेक्ट इंजेक्शन नहीं प्राप्त कर सकते हैं। –

2

लागू करता 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 } 
संबंधित मुद्दे