2009-03-10 5 views
12

कैसे प्राप्त करें मैं वसंत सुरक्षा का उपयोग प्रतिबंधित यूआरएल तक कर रहा हूं। मैं एक ही पृष्ठ पर साइनअप और लॉगिन पेज प्रदान करने की कोशिश कर रहा हूं।वसंत सुरक्षा: आरंभिक लक्ष्य यूआरएल

लॉगिन पृष्ठ पर वसंत सुरक्षा हस्तांतरण प्रतिबंधित पृष्ठ पर। हालांकि मैं साइनअप प्रक्रिया में लक्ष्य यूआरएल पास करने की कोशिश कर रहा हूं, ताकि साइनअप के बाद हम प्रतिबंधित पृष्ठ पर रीडायरेक्ट कर सकें।

उपयोगकर्ता द्वारा रीडायरेक्ट किए जाने वाले वास्तविक URL को कैसे प्राप्त करें।

कोई विचार?

+0

मैं वसंत 3.1.1.RELEASE विन्यस्त और समाधान तुम लोगों द्वारा पोस्ट की गई उपयोग करने की कोशिश की है, लेकिन किसी भी तरह मैं सत्र मिल 'शून्य' के रूप में। इस व्यवहार के लिए संभावित कारण के बारे में कोई विचार ?? – Prabhat

+0

'savedRequest savedRequest = (savedRequest) session.getAttribute ("SPRING_SECURITY_SAVED_REQUEST"); ' –

+0

आज़माएं इसे आजमाएं: सहेजे गए रिवेस्ट सेव किया गया Request = new HttpSessionRequestCache()। GetRequest (अनुरोध, प्रतिक्रिया); – Jesfre

उत्तर

13

इस प्रकार मुझे स्प्रिंग सुरक्षा से यूआरएल मिला।

 
SavedRequest savedRequest = (SavedRequest)session.getAttribute(
    AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY); 
String requestUrl = savedRequest.getFullRequestUrl(); 
12

उन्होंने वसंत सुरक्षा 3.0 में चीजों को थोड़ा सा स्थानांतरित कर दिया, इसलिए उपर्युक्त कोड स्निपेट अब और काम नहीं करता है। यह काम कर देता है, हालांकि:

protected String getRedirectUrl(HttpServletRequest request) { 
    HttpSession session = request.getSession(false); 
    if(session != null) { 
     SavedRequest savedRequest = (SavedRequest) session.getAttribute(WebAttributes.SAVED_REQUEST); 
     if(savedRequest != null) { 
      return savedRequest.getRedirectUrl(); 
     } 
    } 

    /* return a sane default in case data isn't there */ 
    return request.getContextPath() + "/"; 
} 
+1

एक नोट के रूप में, WebAttributes 3.0.3 – yincrash

+6

तक उपलब्ध नहीं है 'WebAttributes.SAVED_REQUEST' अब 3.1 में मौजूद नहीं है, हालांकि [यह समाधान] (http://stackoverflow.com/a/5389357/535646) काम करता है। –

+5

@TilmanHausherr WebAttributes.SAVED_REQUEST को स्प्रिंग 3.1 में "SPRING_SECURITY_SAVED_REQUEST" स्ट्रिंग के साथ प्रतिस्थापित किया जा सकता है जो उपरोक्त समाधान को फिर से कार्यात्मक बनाता है। – TimS

2

वसंत सुरक्षा 4.1.4 के साथ:

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, 
     HttpServletResponse response, Authentication authentication) 
     throws IOException, ServletException { 

    SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); 
    if (savedRequest != null) { 
     response.sendRedirect(savedRequest.getRedirectUrl()); 
    } 
    else{ 
     response.sendRedirect("some/path"); 
    } 
}