2011-07-25 12 views
15

मैं नियंत्रक से वसंत में वेबपैप का पूर्ण यूआरएल खोजना चाहता हूं। मुझे जेएसटीएल सी: यूआरएल के बारे में पता है, लेकिन मुझे इस जानकारी को नियंत्रक के अंदर से चाहिए।वसंत में वर्तमान वेबपैप का मूल URL कैसे खोजें?

@Controller 
public class AuthorizeController { 

    @Autowired 
    private Authorizer auth; 

    @RequestMapping("/auth") 
    public String sendToAuthorization() {   
     String baseUrl = "http://localhost:8080/tasks/"; 
     return "redirect:" + auth.getAuthorizationUrl(baseUrl); 
    } 

} 

आप देख सकते हैं baseurl हार्डकोडेड है, और मैं इसे वसंत विन्यास के माध्यम से authorizer वर्ग के लिए प्रदान कर सकता है, लेकिन मुझे यकीन है कि यह नियंत्रक के भीतर वसंत से यह जानकारी प्राप्त करने के लिए संभव है कर रहा हूँ के रूप में। मैंने "वसंत एमवीसी यूआरएल" को Google पर करने की कोशिश की और इस समस्या को हल करने का कोई तरीका नहीं मिला।

उत्तर

22

मुझे लगता है कि हो रही पूर्ण यूआरएल ही संभव है आपके सर्वर के रूप में अनुरोध कई IP पते और डोमेन नाम हो सकता है संसाधित करते समय।

@RequestMapping("/auth") 
    public String sendToAuthorization(HttpServletRequest request) {   
    String baseUrl = String.format("%s://%s:%d/tasks/",request.getScheme(), request.getServerName(), request.getServerPort()); 


     return "redirect:" + auth.getAuthorizationUrl(baseUrl); 
    } 

सर्वलेट के लिए, इसमें web.xml में कई मैपिंग भी हो सकती हैं।

similar question

पी.एस. वैसे भी, रनटाइम में यूआरएल पार्सिंग मेरे लिए एक अच्छा विचार नहीं लग रहा है।

+1

में एक श्रोता के रूप में पंजीकृत किया है मैं समझता हूँ और यह mod_jk, URL रीराइट हो सकता था और सर्वलेट कि के बारे में पता नहीं होगा। आपके द्वारा लिंक किए गए दूसरे प्रश्न को भी पढ़ते हुए, मुझे लगता है कि मेरा सबसे अच्छा विकल्प इस वसंत एक्सएमएल कॉन्फ़िगरेशन के साथ बीन में इस आधार यूआरएल को इंजेक्शन दे रहा है। धन्यवाद। – stivlo

8

इस उत्तर के बहुत देर हो चुकी है, लेकिन यदि आप विधि हस्ताक्षर में सर्वलेट ऑब्जेक्ट्स को धक्का नहीं देना चाहते हैं, तो एक उपयोगिता वर्ग/विधि से RequestContextHolder का उपयोग करना है। यह अमूर्त फ़ॉलबैक तर्क (उदा।, एक संपत्ति फ़ाइल से खींचने) की क्षमता भी प्रदान करेगा। घटिया उदाहरण:

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); 
if(null != requestAttributes && requestAttributes instanceof ServletRequestAttributes) { 
    HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest(); 
    // build URL from request 
} 
else { 
    // fallback logic if request won't work... 
} 

यह मान लिया जाता है आप org.springframework.web.context.request.RequestContextListenerweb.xml

संबंधित मुद्दे