SJS*_*SJS 7 java spring spring-security spring-ldap apacheds
我正在尝试使用Spring LDAP进行编码
<ldap-server ldif="classpath:my-ldap-clone.ldif" />
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
NoClassDefFoundError: org/apache/directory/server/core/DirectoryService
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
小智 13
使用maven:
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-all</artifactId>
<version>1.5.7</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如果您使用 Maven,这些实际上来自spring-security-ldap.
使用apacheds-all是一个坏主意,因为它嵌入了许多相当常见的依赖项,例如 slf4j 和 dom4j。你会很容易陷入类加载器的问题。
相反,您应该查看spring-security-ldap您正在使用的版本的 pom 中的apacheds可选依赖项,并将它们复制到您的 pom 中,而没有<scope>和<optional>元素(不幸的是,没有更好的方法来处理 Maven 的可选依赖项)。
例如,使用spring-security-ldap4.2.2,它将给出:
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-core-entry</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-protocol-ldap</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-protocol-shared</artifactId>
<version>1.5.5</version>
</dependency>
<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
(看起来它至少从 3.2 开始就没有改变)
从下面的链接http://directory.apache.org/下载 ApcheDS 或从这里获取完整的 jar 我曾经使用带有 LDAP 的 Spring Security 3.0.5 (Spring LDAP 1.3)。那一次我没有满足ApacheDS的要求。检查您的 Spring Secuirty 版本,该版本可能与 ApacheDS 存在依赖关系。