用于登录模块和应用程序的单一LDAP配置

时间:2016-10-20 18:29:26

标签: java jboss ldap

我正在开发一个需要访问LDAP服务器的JavaEE应用程序。对LDAP服务器的访问用于在登录页面和应用程序内的某些功能(自定义搜索和列表)中对用户进行身份验证。

对于身份验证部分,我使用的是JAAS,因此我可以使用基本的LDAP登录模块,具有自己的配置或自定义登录模块。但我不想两次配置LDAP参数,一个在loginalone模块的standalone.xml中,一个在应用程序内部(属性文件,或在数据库的表中),以便能够使用它实现所需的功能。理想情况是在standalone.xml文件中只配置一次,并将该配置用于登录模块和应用程序。

JBoss(EAP 6)是否拥有某种"自定义资源"可以在standalone.xml中配置并使用JNDI进行访问吗?是否有另一种解决方案允许我只配置一次LDAP连接参数,并从多个位置使用该配置?

感谢。

1 个答案:

答案 0 :(得分:0)

我已经解决了。

我所做的是定义一个外部上下文类型的新绑定:在standalone.xml文件中,在" urn:jboss:domain:naming"子系统,我宣布了上下文:

<bindings>
  <external-context name="java:global/..." module="org.jboss.as.naming" class="javax.naming.directory.InitialDirContext" cache="true">
    <environment>
      <property name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
      <property name="java.naming.provider.url" value="ldap://...:389"/>
      <property name="java.naming.security.authentication" value="simple"/>
      <property name="java.naming.security.principal" value="cn=..."/>
      <property name="java.naming.security.credentials" value="..."/>
    </environment>
  </external-context>
</bindings>

然后,我可以在任何需要的地方使用该背景:

try {
  Context initContext = new InitialContext();
  InitialDirContext ldapContext = (InitialDirContext)initContext.lookup("java:global/...");
  // Connection OK!
}catch(Exception ex) {
  // Connection failure!
}

这个解决方案的缺点是我不能使用JBoss附带的ldap登录模块,因为它不允许我使用上下文。所以,我将不得不开发一个自定义登录模块。