如何在 Wildfly Web 应用中实现 LDAP 登录
Posted
技术标签:
【中文标题】如何在 Wildfly Web 应用中实现 LDAP 登录【英文标题】:How implement LDAP login in wildfly web app 【发布时间】:2015-07-23 01:54:41 【问题描述】:如何在 Java EE WildFly 应用中实现 LDAP 身份验证?有没有例子?
我是 Java EE 的新手,需要使用 LDAP 编写应用程序,但我遇到了困难。我读了一本关于在 WildFly 中开发的书,但那里没有关于 LDAP 的信息。
【问题讨论】:
【参考方案1】:必须执行以下操作步骤以使用 LDAP 验证您的应用程序(假设 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 中添加安全上下文。假设您只希望具有user
角色的用户登录到您的应用程序,那么您可以添加类似这样的内容
<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>
你可以找到关于这个主题的精彩教程here
【讨论】:
谢谢它的工作。我需要为用户定义我自己的组(我不能使用来自 LDAP 的组)。默认情况下,用户只能读取,但我想要另外两个组。一个用于管理员,第二个用于 deleopers。你知道怎么做吗?映射用户->我想在数据库中拥有的组。 @skoczo 我认为您可以添加类似<login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> <module-option name="dsJndiName" value="java:jboss/datasource/datasourceName"/> <module-option name="rolesQuery" value="select roleid, 'Roles' from user_roles where userid=?"/> <module-option name="password-stacking" value="useFirstPass"/> </login-module>
的内容,但我对此并不完全确定,最好您可以展示一些您当前的实现并提出一个新问题以上是关于如何在 Wildfly Web 应用中实现 LDAP 登录的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter Web 中实现 Stripe 支付?