Java JBoss JAAS自定义登录模块错误消息
我有一个应用程序,利用JBoss的。身份验证可能会由于各种原因而失败,我必须向用户显示这些原因,而不是通常的Java JBoss JAAS自定义登录模块错误消息,java,authentication,jboss,jaas,Java,Authentication,Jboss,Jaas,我有一个应用程序,利用JBoss的。身份验证可能会由于各种原因而失败,我必须向用户显示这些原因,而不是通常的Inavlid用户名/密码错误 有没有办法从登录消息中获取错误消息?我认为最好是通过一个异常,因为authenticate返回一个布尔值,但是我不知道如何在验证后捕获它。欢迎任何指针。使用valveorg.jboss.web.tomcat.security.ExtendedFormAuthenticator,并从会话中抓取j_异常 参考: 您可以使用数据库登录模块,然后使用 异常e=(
Inavlid用户名/密码
错误
有没有办法从登录消息中获取错误消息?我认为最好是通过一个异常,因为authenticate返回一个布尔值,但是我不知道如何在验证后捕获它。欢迎任何指针。使用valve
org.jboss.web.tomcat.security.ExtendedFormAuthenticator
,并从会话中抓取j_异常
参考:
您可以使用数据库登录模块,然后使用
异常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;
}
要使用JBoss7设置JAAS,请参见以下内容:
我也有同样的问题…,但出于明显的原因,我不喜欢编写绑定到容器的代码
因此,我所做的就是将异常添加到会话中
首先,构建一个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();
}
使用筛选器将异常添加到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);
}
if(uri.endsWith(“”&&session!=null){
异常j_Exception=SecurityThreadLocal.getException();
if(j_异常!=null)
setAttribute(“j_异常”,j_异常);
}
但你应该知道,正如我所知道的,这是一种糟糕的做法,是一种安全漏洞
嗯,在我的情况下,客户赢了
if (uri.endsWith("<form-error-page>") && session != null){
Exception j_exception = SecurityThreadLocal.getException();
if( j_exception != null)
session.setAttribute("j_exception", j_exception);
}