2011-05-25 13 views
5

मेरे पास एक वेब ऐप है जो वसंत सुरक्षा का उपयोग करता है। मैं उपयोगकर्ता को उसी पृष्ठ पर रीडायरेक्ट करना चाहता हूं, जब वे लॉग आउट करते हैं तो लॉग आउट करने से पहले थे।वसंत सुरक्षा: लॉगआउट के बाद पिछले यूआरएल पर रीडायरेक्ट

क्या ऐसा करने का कोई आसान तरीका है?

+0

क्या आप वाकई यह भी चाहते हैं? यह उपयोगकर्ता कुछ सुरक्षित पृष्ठ पर जा रहा है, क्या आप उसे लॉगआउट के बाद उस सुरक्षित पृष्ठ पर जाने की अनुमति देना चाहते हैं। –

+0

@ विजय अतिथि के रूप में हो सकता है –

+1

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

उत्तर

1

आप जोड़ सकते हैं उल्लेख किया है आप referrer header का उपयोग कर सकते करने के लिए उपयोगकर्ता अनुप्रेषित वसंत सुरक्षा की फ़िल्टर श्रृंखला में एक नया फिल्टर। वह नया फाइलर /logout यूआरएल पर लागू किया जाएगा। इस फ़िल्टर को गले में जाने पर आप मौजूदा पेज को फील्ड वैरिएबल में सेव कर सकते हैं। और फिल्टर के माध्यम से लौटने पर। आप अनुरोध को सहेजे गए यूआरएल पर रीडायरेक्ट कर सकते हैं। मुझे लगता है कि यह मदद कर सकता है। आप उपयोग करके वर्तमान पेज यूआरएल प्राप्त कर सकते हैं। RefererRequest ऑब्जेक्ट में शीर्षलेख।

0

बस एक विचार:

कैसे के बारे में हम गए पृष्ठों के एक ढेर रखने के लिए। अधिकतम 3 प्रविष्टियों पर हो सकता है। और उपयोगकर्ता को लॉगआउट से रीडायरेक्ट करता है।

  • कॉन्फ़िगर एक फिल्टर या पिछले दो देखे गए URL

  • लॉगआउट पर के बारे में सत्र में ढेर बनाए रखने के लिए वसंत सुरक्षा फिल्टर का विस्तार logout-success-url के रूप में एक सर्वलेट कॉन्फ़िगर करें।

  • अब अब सत्र ढेर से URL और पाने सत्र रद्द करना और उस पृष्ठ

के रूप में भी विजय

7

यह सुनिश्चित नहीं है कि इस प्रश्न का कौन सा स्प्रिंग संस्करण संदर्भित कर रहा था - लेकिन useReferer मानक org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler पर वसंत 3.0 के बाद संपत्ति है।

तो तुम सब करने की जरूरत है इस तरह यह कॉन्फ़िगर और लॉगआउट जहाँ भी उपयोगकर्ता से आया है पर रीडायरेक्ट करेगा है:

<bean id="logoutSuccessHandler" class="org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler"> 
    <property name="useReferer" value="true"/> 
</bean> 

<security:http> 
    <security:logout logout-url="/logout" success-handler-ref="logoutSuccessHandler" /> 
</security:http> 
+0

मैंने इसका इस्तेमाल किया, और यह ठीक काम करता है। हालांकि जब मैं सुरक्षित पृष्ठ से लॉगआउट करता हूं तो यह लॉगिन फॉर्म पर जाता है ... क्या इस मामले में अलग-अलग यूआरएल पर जाने का कोई तरीका है? (यानी होम पेज) – Mat

+0

मुझे नहीं लगता कि यह मानक SimpleUrlLogoutSuccessHandler के साथ संभव है। आप इसका विस्तार कर सकते हैं और कस्टम व्यवहार को लागू करने के लिए 'निर्धारणTargetUrl (HttpServletRequest अनुरोध, HttpServletResponse प्रतिक्रिया) विधि को ओवरराइड कर सकते हैं। लेकिन आपको यह जानने की आवश्यकता होगी कि यूआरएल (जैसा कि 'super.determineTargetUrl (अनुरोध, प्रतिक्रिया) द्वारा निर्धारित किया गया है;') जिसे संरक्षित किया जा रहा है संरक्षित किया जा रहा है .. मुझे लक्ष्य यूआरएल स्ट्रिंग की जांच करने के अलावा अन्य करने का कोई तरीका नहीं मिला क्या आप वहां मौजूद हैं। – meyertee

0

आपको क्या करना होगा एक सरल LogoutSuccessHandler है

@Component 
    public class CustomLogoutSuccessHandler extends 
    SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler { 

@Override 
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse 
    response, Authentication authentication) 
     throws IOException, ServletException { 
    if (authentication != null) { 
     System.out.println(authentication.getName()); 
    } 
    response.setStatus(HttpStatus.OK.value()); 
    response.sendRedirect(request.getHeader("referer")); 
} 

और बाद में इसे अपने कॉन्फ़िगरेशन विधि में कॉल करें यानी

.logout().logoutSuccessHandler(customLogoutSuccessHandler) 

यह आपको URL को रेफरर करने के लिए रीडायरेक्ट करेगा।

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