2011-08-18 11 views
6

मेरे पास एक ऐसा एप्लिकेशन है जो JBoss के custom login module का उपयोग करता है। प्रमाणीकरण विभिन्न कारणों से विफल हो सकता है और मुझे इसे सामान्य Inavlid username/password त्रुटि के बजाय उपयोगकर्ता को प्रदर्शित करना होगा।जेबॉस जेएएएस कस्टम लॉगिन मॉड्यूल त्रुटि संदेश

क्या लॉगिन संदेश से त्रुटि संदेश प्राप्त करने का कोई तरीका है? मुझे लगता है कि प्रमाणीकरण एक बूलियन लौटने के बाद से एक अपवाद के माध्यम से सबसे अच्छा होगा, हालांकि मैं प्रमाणीकरण के बाद इसे पकड़ने का तरीका नहीं समझ सकता। कोई संकेतक स्वागत करता है।

उत्तर

2

आप डेटाबेस लॉगिन मॉड्यूल का उपयोग कर सकते हैं और उसके बाद (अपवाद का उपयोग कर

अपवाद ई = (अपवाद) SecurityContextAssociation.getContextInfo मिल "org.jboss.security.exception");

आप त्रुटि संदेश पूर्व लाने के लिए प्रबंधित बीन फ़ंक्शन के अंदर इस कोड का उपयोग कर सकते हैं।

public String getLoginFailureMsg(){ 
     Exception e = (Exception) SecurityContextAssociation. 
            getContextInfo("org.jboss.security.exception"); 
     if(e != null){ 
      if(e.getMessage().contains("PB00019")) 
       return "invalid username"; 
      else 
       return "invalid password"; 
     } 
     return null; 
    } 

Jboss 7 के साथ JAAS की स्थापना के लिए यह झटका देखें:

http://amatya.net/blog/implementing-security-with-jaas-in-jboss-as-7/

1

मैं एक ही समस्या ... था, लेकिन मैं स्पष्ट कारणों के लिए कंटेनर से बंधा कोड writting पसंद नहीं है ।

तो मैंने सत्र में अपवाद जोड़ने के लिए क्या किया था। साथ HttpSession को

अपवाद
catch (Exception e) { // or just catch LoginException 
     log.log(Level.SEVERE, e.getMessage(), e); 
     SecurityThreadLocal.setException(e); 
    } 

जोड़ें:

सबसे पहले, एक ThreadLocal अपवाद धारक का निर्माण LoginContext और ServletContext के बीच अपवाद भेजने के लिए:

public final class SecurityThreadLocal { 
private static final ThreadLocal<Exception> j_exception = new ThreadLocal<Exception>(); 

public static void setException(Exception e) { 
    j_exception.set(e); 
} 

public static Exception getException() { 
    return (Exception)j_exception.get(); 
} 

public static void clear() { 
    j_exception.remove(); 
} 

}

SecurityThreadLocal को LoginException जोड़े एक फ़िल्टर:

web.xml

<filter-mapping> 
    <filter-name>SecurityFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

SecurityFilter.java

if (uri.endsWith("<form-error-page>") && session != null){ 
    Exception j_exception = SecurityThreadLocal.getException(); 
    if(j_exception != null) 
     session.setAttribute("j_exception", j_exception); 
    } 

लेकिन जैसे-जैसे मैं जानता हूँ कि यह एक बुरा व्यवहार और एक सुरक्षा दरार है आपको पता होना चाहिए।

अच्छा .., मेरे मामले में ग्राहक जीता ...

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