2011-03-28 22 views
8

हमारे पास लॉग इन करने के दो तरीके हैं।वसंत सुरक्षा: प्रमाणीकरण विफल होने पर लॉगिन पृष्ठ पर पुनर्निर्देशित

  • उपयोगकर्ता नाम और पासवर्ड अनुरोध शीर्षलेख में किसी अन्य ऐप द्वारा भेजा जाता है। आईटी की जांच की जाती है और यदि उपयोगकर्ता का नाम और पासवर्ड सही है, तो यह अंदर जाता है। [इस के लिए एक कस्टम फ़िल्टर लिखा गया है]
  • यदि अनुरोध शीर्षलेख में उपयोगकर्ता नाम और पासवर्ड मौजूद नहीं है, तो लॉगिन स्क्रीन प्रस्तुत की जाती है। बुरा साख पेज: प्रमाणीकरण विफल -
  • उपयोगकर्ता नाम और पासवर्ड अनुरोध हेडर में मौजूद है और इसके गलत करता है, तो कर रहे हैं, मैं एक HTTP स्थिति 401 से पता चला रहा हूँ।

    प्रमाणीकरण विफल होने पर मैं लॉगिन पृष्ठ कैसे दिखा सकता हूं।

    नीचे security.xml में कोड

    <http auto-config="true" use-expressions="true"> 
          <access-denied-handler error-page="/login.jsp"/> 
          <intercept-url pattern="/*Login*" access="hasRole('ROLE_ANONYMOUS')"/> 
          <intercept-url pattern="/*" access="hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')"/> 
          <custom-filter ref="requestHeaderFilter" before="FORM_LOGIN_FILTER"/> 
          <form-login login-page="/login.jsp"/> 
    
        </http> 
    

    कृपया आप अधिक जानकारी की जरूरत है, तो मुझे पता है है।

    संपादित करें: अपने आवेदन

    public class RequestHeaderProcessingFilter extends AbstractAuthenticationProcessingFilter{ 
    
    private String usernameHeader = "j_username"; 
    private String passwordHeader = "j_password"; 
    
    
    protected RequestHeaderProcessingFilter() { 
        super("/login_direct"); 
    } 
    
    //getters and setters 
    
    @Override 
    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { 
        String username = request.getHeader(usernameHeader); 
        String password = request.getHeader(passwordHeader); 
    
        SignedUsernamePasswordAuthenticationToken authRequest = 
         new SignedUsernamePasswordAuthenticationToken(username, password); 
    
         return this.getAuthenticationManager().authenticate(authRequest); 
    } 
    

    } में RequestHeader फ़िल्टर के लिए कोड जोड़ने

    उत्तर

    0

    प्रमाणीकरण विफलता पर डिफ़ॉल्ट व्यवहार HTTP स्थिति 401 प्रदर्शित करने के लिए मामले SimpleUrlAuthenticationFailureHandler में (के रूप में विफलताओं को संभालने के लिए इस्तेमाल किया जाता है AbstractAuthenticationProcessingFilter के द्वारा किया, इस व्यवहार /login.jsp को defaultFailureUrl की स्थापना द्वारा अधिरोहित जा सकता है।

    वैकल्पिक रूप से, एक कस्टम त्रुटि हैंडलर सुई के साथ परिभाषित किया जा सकता टेबल कार्रवाई

    +0

    हाय रघुराम, धन्यवाद। मैं डिफ़ॉल्ट FailureUrl कहां कॉन्फ़िगर करूँ? क्या मुझे ऊपर दिए गए कोड में इसे प्लग करना है? – vinoth

    +0

    @vinoth। यह 'requestHeaderFilter' कार्यान्वयन के कार्यान्वयन पर निर्भर करता है। उत्तर में उल्लिखित वर्ग इस – Raghuram

    +0

    करने का एक तरीका दिखाते हैं हाय, मैंने अनुरोध हैडरफिल्टर के कार्यान्वयन को जोड़ा है। क्या हमें उसमें बदलाव करना चाहिए? – vinoth

    2

    प्रवेश पृष्ठ मामले में प्रमाणीकरण विफल आप <access-denied-handler error-page="/login.jsp"/> में एक ही यूआरएल और <intercept-url pattern="/*Login*" access="hasRole('ROLE_ANONYMOUS')"/>

    उदाहरण के लिए

    होना चाहिए दिखाने के लिए:

    <global-method-security secured-annotations="enabled" /> 
    
    <http auto-config="true" access-denied-page="/app/sesiones/procesarLogin"> 
        <logout logout-success-url="/app/sesiones/login" /> 
        <form-login 
         authentication-failure-url="/app/sesiones/login?error=true" 
         login-page="/app/sesiones/login" default-target-url="/app/sesiones/procesarLogin" /> 
        <intercept-url pattern="/app/privados/*" access="ROLE_USER" /> 
    </http> 
    
    कि उदाहरण में

    , उपयोगकर्ता भी पर भेज दिया जाएगा लॉग आउट करने के बाद लॉगिन पेज।/ProcesarLogin एक तरीका है जो उपयोगकर्ता lo login.jsp पेज भेजा गया है।

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