2011-12-06 16 views
7

को कार्यान्वित करने का तरीका मैं इसे करने की कोशिश कर रहा हूं: Make spring security add the return to url in the query string for the login page, यह है: लॉगिन पृष्ठ को बताने के लिए वसंत प्राप्त करें जहां से मैं आया था। मेरे पास कुछ एसएसओ एकीकरण है .. इसलिए मैं उन्हें यूआरएल भेजूंगा, या वे मेरे लिए रेफरर जोड़ देंगे, इसलिए मुझे पता है कि उपयोगकर्ता को लॉग इन होना चाहिए और /some/url पर भेजा जाना चाहिए। वह सब बेवकूफ है। मेरे पास जो समस्या है, वह LoginUrlAuthenticationEntryPoint तक विस्तारित है (जब तक कि आप मुझे AuthenticationEntryPoint को लागू करने के लिए एक अच्छा कारण बता सकते हैं)। मुझे केवल लॉगिन पृष्ठ पर अनुरोधों को संशोधित करने की आवश्यकता है, जैसे:LoginUrlAuthenticationEntryPoint का विस्तार कैसे करें या AuthenticationEntryPoint

RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 

// only append returnto to '/login' urls 
if(request.getServletPath() == "/login") { 
    // indicates we want to return to this page after login 
    redirectStrategy.sendRedirect(request, response, "/login?returnto=" + request.getServletPath()); 
} 

मैं बाकी अनुरोधों को अपनी बात कैसे कर सकता हूं? यह गलत है (मैं सिर्फ क्या कर रहा था):

RequestDispatcher dispatcher = request.getRequestDispatcher("/login"); 

// just forward the request 
dispatcher.forward(request, response); 

क्योंकि यह हमें एक रीडायरेक्ट लूप में डालता है। हालांकि यह what spring does in its version of commence प्रतीत होता है। मैं उलझन में हूं। LoginUrlAuthenticationEntryPoint पर मेरे कस्टम एक्सटेंशन में commence के साथ मुझे क्या करना चाहिए?

उत्तर

6

यह पता लगाया। केवल 'वापसी' के साथ लॉगिन पेज पर अग्रेषित करने की आवश्यकता है। मैंने इसे पहले भ्रमित कर दिया क्योंकि LoginUrlAuthenticationEntryPoint का मतलब यह नहीं था कि यह पहली नज़र में 'उपयोगकर्ताओं को लॉगिन पेज पर रीडायरेक्ट करता है'। यह सब मैं की जरूरत है:

@Override 
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException { 
    RedirectStrategy redirectStrategy = new DefaultRedirectStrategy(); 

    redirectStrategy.sendRedirect(request, response, "/login?returnto=" + request.getServletPath()); 
} 

इस उपयोगी था: LoginUrlAuthenticationEntryPoint.java on grepcode.com

0

जोश कोड वास्तव में क्या मैं जबकि अभी भी अन्य सभी अनुरोधों के लिए डिफ़ॉल्ट लॉगिन रीडायरेक्ट लॉजिक संरक्षण, जावास्क्रिप्ट में AJAX प्रमाणीकरण त्रुटियों को पकड़ने के लिए जरूरी था। चूंकि मेरे सभी AJAX अनुरोध "/ rest" से शुरू होते हैं, इसलिए मैं इस पर फ़िल्टर करने में सक्षम था।

if(request.getRequestURI().contains("/rest/")) 
    response.sendError(403); 
else 
    new DefaultRedirectStrategy().sendRedirect(request, response, "/login"); 
संबंधित मुद्दे