当前位置: 首页 > 知识库问答 >
问题:

Spring-ldap-test嵌入式ldap服务器在jdk 11中启动失败

公冶宏深
2023-03-14

我正在将我的应用程序升级到Java11(open JDK11),在我的测试用例中,我使用的是spring-ldap-test 2.3.3版本和apacheds-core-api:1.5.7,

我使用下面的方法启动embeddedLdapServer

@Configuration
@Profile("test")
public class EmbeddedLdapTestConfiguration {

    @Autowired
    Environment env;

    @Autowired
    private LdapContextSource contextSource;

    @Value("${embedded-ldap.port}")
    int port;

    @Bean
    EmbeddedLdapServerFactoryBean embeddedLdapServer() {
        EmbeddedLdapServerFactoryBean embeddedLdapServerFactoryBean = new EmbeddedLdapServerFactoryBean();
        embeddedLdapServerFactoryBean.setPartitionName("example");
        embeddedLdapServerFactoryBean.setPartitionSuffix("dc=example,dc=com");
        embeddedLdapServerFactoryBean.setPort(port);
        return embeddedLdapServerFactoryBean;
    }

    @Bean
    public LdifPopulator ldifPopulator () {
        LdifPopulator ldifPopulator = new LdifPopulator();
        ldifPopulator.setContextSource(contextSource);
        ldifPopulator.setResource(
                new ClassPathResource("./test.ldif"));
        ldifPopulator.setBase("dc=example,dc=com");
        ldifPopulator.setClean(true);
        ldifPopulator.setDefaultBase("dc=example,dc=com");
        return ldifPopulator;
    }
}

我的测试用例运行失败,因为在spring-ldap-test 2.3.3版本中启动嵌入式ldap时

public class EmbeddedLdapServerFactoryBean extends AbstractFactoryBean<EmbeddedLdapServer> {
    private int port;
    private String partitionName;
    private String partitionSuffix;

    @Override
    public Class<?> getObjectType() {
        return EmbeddedLdapServer.class;
    }

    public void setPartitionName(String partitionName) {
        this.partitionName = partitionName;
    }

    public void setPartitionSuffix(String partitionSuffix) {
        this.partitionSuffix = partitionSuffix;
    }

    public void setPort(int port) {
        this.port = port;
    }

    @Override
    protected EmbeddedLdapServer createInstance() throws Exception {
        return EmbeddedLdapServer.newEmbeddedServer(partitionName, partitionSuffix, port);
    }

    @Override
    protected void destroyInstance(EmbeddedLdapServer instance) throws Exception {
        instance.shutdown();
    }
}

在createInstance()中,EmbeddedLdapServer.NewEmbeddedServer最终将调用apacheds-core 1.5.7中DefaultSchemaService.java中的函数,如下所示

 public final SchemaManager getSchemaManager()
    {
        return schemaPartition.getSchemaManager();
    }

和错误,如下所示

在我的年级,我使用以下库

  "org.springframework.ldap:spring-ldap-test:2.3.3.REALEASE",
                "org.springframework.boot:spring-boot-starter-test:2.3.3.REALEASE",
                "org.apache.directory.server:apacheds-core:1.5.7",
                "org.apache.directory.server:apacheds-core-entry:1.5.7",
                "org.apache.directory.server:apacheds-protocol-shared:1.5.7",
                "org.apache.directory.server:apacheds-protocol-ldap:1.5.7",
                "org.apache.directory.server:apacheds-server-jndi:1.5.7",
                "org.apache.directory.shared:shared-ldap:0.9.19"

当我使用openjdk8和spring-ldap-test 2.3.2版本以及apacheds-core-api:1.5.5时,测试用例运行得很成功,但是如果我升级到JDK11,apacheds-core-api1.5.5将抛出错误消息,因为它使用了java 11不支持的sun.reflect.*包。所以我要把版本升级到1.5.7出现这个问题。

有人能帮忙检查一下如何解决这个问题吗?多谢.

共有1个答案

魏煜祺
2023-03-14

Spring Security https://github.com/spring-projects/spring-security/issues/6804中存在问题

您能试试https://github.com/spring-projects/spring-security/issues/6804#issuecomment-572568328吗?

<dependency>
            <groupId>org.apache.directory.server</groupId>
            <artifactId>apacheds-core-avl</artifactId>
            <version>1.5.7</version>
            <scope>test</scope>
</dependency>
 类似资料:
  • 在Spring,嵌入式ldap如何与sping-ldap模板一起使用。目前,我的配置是- ContextSource值在属性文件中可用。现在我想使用嵌入式ldap- 我将在LdapContextSource值中指定的默认端口是什么。

  • 长时间的听众,第一次打电话的人。 我已经下载了Spring身份验证ldap示例:https://spring.io/guides/gs/authenticating-ldap/STS。它工作正常。 然而,我想尝试让它与一个真正的ldap数据库一起工作,比如forumsys.com的一些人提供的:http://www.forumsys.com/en/tutorials/integration-how

  • ldap-test-tool 一个轻量级的 ldap 测试工具 支持: ldap 认证 ldap 查询(默认基于用户) 自定义 filter 的 ldap 查询 多用户的批量 ldap 认证 多用户的批量 ldap 查询 支持批量查询结果输出到 csv REST API 编译 go get ./...go build release 可以直接下载编译好的 release 版本 提供 win64 和

  • 运行Spring Boot应用程序时,嵌入式tomcat服务器无法启动。我刚刚在pom.xml中添加了所需的依赖项,并创建了一个简单的java POJO类。应用程序属性已经按照oracle数据库所需的jdbc配置以及Hibernate方言信息进行了设置。 执行mvn spring-boot:run时的控制台日志

  • Spring应用程序使用Maven只包含Spring Web依赖项,给出“无法启动嵌入式Tomcat服务”的错误。 相同的项目在其他计算机上运行,就像预期的那样。 null

  • 我有一个外部Web服务器,我正在迁移。我试图通过LDAP对内部服务器上的Active Directory进行身份验证。我可以使用相同的代码从旧服务器(Ubuntu 8)进行连接和身份验证,但无法在新服务器(Redhat 7)上进行身份验证。 外部服务器当前运行的是运行PHP 5.4.16并启用LDAP支持(PHP LDAP)的Redhat 7。 内部服务器目前是一个带有LDAP和Active Di