如何在Wildfly Web应用程序中实现LDAP登录

4

如何在Java EE WildFly应用程序中实现LDAP身份验证?有没有示例?

我是Java EE的新手,需要编写一个使用LDAP的应用程序,但我卡住了。我读了一本关于开发WildFly的书,但里面没有关于LDAP的信息。

1个回答

8

假设LDAP已经设置好,进行应用程序认证的下一步操作如下:

standalone.xml文件中创建一个新的安全域。

<security-domain name="LDAPAuth">
  <authentication>
    <login-module code="LdapExtended" flag="required">
      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
      <module-option name="java.naming.provider.url" value="ldap://localhost:389"/>
      <module-option name="java.naming.security.authentication" value="simple"/>
      <module-option name="bindDN" value="uid=admin,dc=acme,dc=com"/>
      <module-option name="bindCredential" value="secret"/>
      <module-option name="baseCtxDN" value="ou=People,dc=acme,dc=com"/>
      <module-option name="baseFilter" value="(uid={0})"/>
      <module-option name="rolesCtxDN" value="ou=Roles,dc=acme,dc=com"/>
      <module-option name="roleFilter" value="(member={1})"/>
      <module-option name="roleAttributeID" value="cn"/>
      <module-option name="searchScope" value="ONELEVEL_SCOPE"/>
      <module-option name="allowEmptyPasswords" value="true"/>
    </login-module>
  </authentication> 
</security-domain>

您需要相应地更改值

现在您需要在应用程序的web.xml中添加安全上下文。假设您只希望具有“用户”角色的用户登录到您的应用程序,则可以添加以下内容:

    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

        <security-constraint>
            <web-resource-collection>
                <web-resource-name>HtmlAuth</web-resource-name>
                <description>application security constraints</description>
                <url-pattern>/*</url-pattern>
                <http-method>GET</http-method>
                <http-method>POST</http-method>
            </web-resource-collection>
            <auth-constraint>
                <role-name>Manager</role-name>
            </auth-constraint>
        </security-constraint>
        <login-config>
            <auth-method>BASIC</auth-method>
            <realm-name>LDAPAuth realm</realm-name>
        </login-config>
        <security-role>
            <role-name>user</role-name>
        </security-role>
    </web-app>

您需要在WEB-INF文件夹中放置一个名为jboss-web.xml的文件,并包含以下内容:

    <jboss-web>
           <security-domain>java:/jaas/LDAPAuth</security-domain>
    </jboss-web>

您可以在这里找到一份关于此主题的精彩教程


谢谢,它有效。我需要为用户定义自己的组(无法使用LDAP中的组)。默认情况下,用户仅具有读取访问权限,但我想要两个附加组。一个是管理员组,另一个是开发人员组。您知道如何做到这一点吗?我希望在数据库中进行用户->组的映射。 - user1799537
@skoczo 我认为你可以添加类似于以下内容的代码: 但我并不完全确定,最好是您可以展示一些您当前的实现,并开启一个新问题。 - Shiva
请问我该如何在Java中提取用户名和密码呢? - Robs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接