2011-08-18 9 views
6

JBossのcustom login moduleを使用するアプリケーションがあります。認証はさまざまな理由で失敗する可能性があり、通常のInavlid username/passwordエラーではなく、ユーザーに表示する必要があります。JBoss JAASカスタムログインモジュールのエラーメッセージ

ログインメッセージからエラーメッセージを受け取る方法はありますか?私は認証がブール値を返すので、最高の例外を介してになると思うが、私は認証後にそれをキャッチする方法を把握することはできません。任意のポインタを歓迎します。

答えて

2

データベース・ログインモジュールを使用して、

例外e =(例外)SecurityContextAssociation.getContextInfoを(使用して例外を取得することができます"org.jboss.security.exception");

このコードをマネージドBean関数内で使用すると、エラーメッセージexを取得できます。

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

私は...同じ問題を抱えていたが、私は明白な理由のための容器に結び付けられたコードを足す好きではありません。

私がしたのは、セッションに例外を追加することでした。

まず、LoginContextのとのServletContext間の例外を送信するためにThreadLocalの例外ホルダーを構築:

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を追加します。

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

はとのHttpSessionに例外を追加します。フィルター:

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

しかし、私は、これは悪い習慣やセキュリティ割れである知っているように、あなたは知っている必要があります。

まあ、私の場合は顧客が勝った...

関連する問題