2012-12-03 22 views
6

लौटाता है मैं वसंत सुरक्षा संस्करण 3.1.2 का उपयोग कर रहा हूं।वसंत सुरक्षा: एकाधिक सुरक्षा संदर्भ लेकिन गलत प्रमाणीकरण-विफलता-यूआरएल

<http pattern="/embedded/**" auto-config="true" use-expressions="true" access-denied-page="/embedded/login.htm"> 
    <intercept-url pattern="/embedded/login-embedded.html" access="hasRole('ROLE_AUTHENTICATED')"/> 
    <intercept-url pattern="/embedded/**" access="permitAll"/> 
    <form-login login-page="/embedded/login.htm" 
       authentication-failure-url="/embedded/login.htm?error=true" 
       default-target-url="/embedded/login-embedded.html" /> 
    <logout logout-success-url="/embedded/index.html"/> 

</http> 

<http auto-config="true" use-expressions="true" access-denied-page="/login.htm"> 
    <intercept-url pattern="/login-success.html" access="hasRole('ROLE_AUTHENTICATED')"/> 
    <intercept-url pattern="/**" access="permitAll"/> 
    <form-login login-page="/login.htm" 
       authentication-failure-url="/login.htm?error=true" 
       default-target-url="/login-success.html"/> 
    <logout logout-success-url="/index.html"/> 
</http> 

मैं एक वसंत MVC नियंत्रक जो एक कैप्चा मान्य करने के लिए एक सेवा कॉल करने के लिए डेटा पोस्ट:

यहाँ विन्यास है। अगर यह इसे j_spring_security_check RequestDispatcher पर आगे भेजता है।

यहाँ नियंत्रक के प्रासंगिक हिस्सा है:

@RequestMapping(value ="/embedded/login.htm", method = RequestMethod.POST) 
public String authenticateCaptcha(HttpServletRequest request, 
            HttpServletResponse response, 
            @RequestParam String verificationText) throws IOException, ServletException { 
    HttpSession session = request.getSession(); 
    String sessionId = session.getId(); 
    if (captchaService.validate(sessionId, verificationText)) { 
     request.getRequestDispatcher("/j_spring_security_check").forward(request, response); 
     return null; 
    } 
    return buildErrorRedirect(request); 
} 

मेरे समस्या यह है कि बाद कैप्चा मान्य है और अनुरोध स्प्रिंग सुरक्षा और प्रमाणीकरण को भेजा जाता है वहाँ विफल रहता है त्रुटि पृष्ठ यह आगे /login.htm?error=true बजाय है करने के लिए है /embedded/login.htm?error=true

उत्तर

4

यूआरएल /j_spring_security_check/embedded/** से मेल नहीं खाता है इसलिए authentication-failure-url="/login.htm?error=true" का उपयोग किया जाता है - दूसरा कॉन्फ़िगरेशन से एक।

इसी प्रकार के सवाल हाल ही में कहा गया है:

Spring security with two realms, first default-target-url is never invoked

और स्प्रिंग सुरक्षा के रचनाकारों में से एक यह जवाब दे दिया। मैं इसे पढ़ने की सलाह देते हैं।

स्टैक ओवरफ़्लो का एक और योग्य टुकड़ा: Why does a forwarded request pass through filter chain again?

+0

धन्यवाद। पहले लिंक ने बहुत मदद की। 'फॉर्म-लॉगिन' के 'लॉगिन-प्रोसेसिंग-यूआरएल' को कॉन्फ़िगर करना मेरी समस्या को हल करता है। –

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