2011-08-18 25 views
6

JBoss'un custom login module'unu kullanan bir uygulamam var. Kimlik doğrulaması çok çeşitli nedenlerden dolayı başarısız olabilir ve bunları her zamanki Inavlid username/password hatası yerine kullanıcıya göstermem gerekir.JBoss JAAS özel Giriş Modülü Hata mesajları

Giriş mesajından hata mesajı almanın bir yolu var mı? Kimlik doğrulaması bir boolean döndürdüğünden, en iyisi bir istisna yoluyla olabileceğimi düşünüyorum, ancak kimlik doğrulamasından sonra onu nasıl yakalayacağımı anlayamıyorum. Herhangi bir işaretçi memnuniyetle karşılar.

cevap

2

Sen (

İstisna e = (İstisna) SecurityContextAssociation.getContextInfo kullanılarak istisna olsun sonra Veritabanı giriş modülünü kullanabilir ve "org.jboss.security.exception");

Bu kodu eski hata mesajını almak için yönetilen fasulye işlevinin içinde kullanabilirsiniz. JBoss 7 ile JAAS kurmak için

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; 
    } 

bu darbe bakın: http://amatya.net/blog/implementing-security-with-jaas-in-jboss-as-7/

1

Ben aynı problem vardı ... ama bilinen nedenlerle konteynere bağlı kod yazma sevmiyorum .

Yaptığım şey, oturuma kendim için istisna eklemek oldu.

Öncelikle LoginContext ve ServletContext'te arasındaki istisna göndermek için ThreadLocal istisna tutucu oluşturun:

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 için LoginException ekleyin:

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

Ekleme İstisna ile HttpSession için bir Filtre:

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); 
    } 

Ama bu kötü bir uygulamadır ve bir güvenlik çatlak olduğunu biliyoruz olarak bilmeli.

Eh .., benim durumumda müşteri ...

İlgili konular