2011-08-18 19 views
6

Tôi có một ứng dụng sử dụng số custom login module của JBoss. Việc xác thực có thể không thành công vì nhiều lý do và tôi phải hiển thị chúng cho người dùng thay vì lỗi Inavlid username/password thông thường.Thông báo lỗi đăng nhập tùy chỉnh JBoss JAAS Thông báo lỗi

Có cách nào để nhận thông báo lỗi từ thông báo đăng nhập không? Tôi nghĩ rằng tốt nhất sẽ là thông qua một ngoại lệ kể từ khi xác thực trả về một boolean, tuy nhiên tôi không thể tìm cách bắt nó sau khi xác thực. Bất kỳ con trỏ chào đón.

Trả lời

2

Bạn có thể sử dụng các mô-đun cơ sở dữ liệu đăng nhập và sau đó nhận được ngoại trừ sử dụng

Exception e = (Exception) SecurityContextAssociation.getContextInfo ("org.jboss.security.exception");

Bạn có thể sử dụng mã này bên trong hàm bean được quản lý để tìm nạp thông báo lỗi cũ.

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

lập JAAS với Jboss 7 thấy đòn này:

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

1

tôi đã cùng một vấn đề ..., nhưng tôi không thích writting đang gắn với thùng vì những lý do rõ ràng .

Vì vậy, điều tôi đã làm là tự thêm ngoại lệ cho phiên đó.

Thứ nhất, xây dựng một người giữ ngoại lệ ThreadLocal để gửi ngoại lệ giữa LoginContext và 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(); 
} 

}

Thêm LoginException để SecurityThreadLocal:

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

Add Exception để HttpSession với Bộ lọc:

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

Nhưng bạn nên biết như tôi biết điều này là một thói quen xấu và một vết nứt an ninh.

Vâng .., trong trường hợp của tôi, khách hàng đã giành được ...