我有一個應用程序使用JBoss的custom login module。身份驗證可能因多種原因而失敗,我必須將這些顯示給用戶,而不是通常的Inavlid username/password
錯誤。JBoss JAAS自定義登錄模塊錯誤消息
有沒有辦法從登錄消息中獲取錯誤消息?我認爲最好的是通過一個異常,因爲authenticate返回一個布爾值,但是我不知道如何在認證後捕獲它。任何指針都歡迎。
我有一個應用程序使用JBoss的custom login module。身份驗證可能因多種原因而失敗,我必須將這些顯示給用戶,而不是通常的Inavlid username/password
錯誤。JBoss JAAS自定義登錄模塊錯誤消息
有沒有辦法從登錄消息中獲取錯誤消息?我認爲最好的是通過一個異常,因爲authenticate返回一個布爾值,但是我不知道如何在認證後捕獲它。任何指針都歡迎。
使用閥org.jboss.web.tomcat.security.ExtendedFormAuthenticator
並從會議中抓住j_exception
。
編號:
您可以使用數據庫登錄模塊,然後讓使用
異常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/
我有同樣的問題......,但我不喜歡書面方式代碼依賴於容器的原因很明顯。
所以我所做的就是自己添加異常到會話中。
首先,建立一個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();
}
}
添加LoginException異常到SecurityThreadLocal:
catch (Exception e) { // or just catch LoginException
log.log(Level.SEVERE, e.getMessage(), e);
SecurityThreadLocal.setException(e);
}
添加例外與HttpSession中a過濾器:
的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);
}
但是你應該知道,因爲我知道這是一個不好的做法和安全漏洞。
呃..在我的情況下,客戶贏了...