Java 弹簧无法加载ldif

Java 弹簧无法加载ldif,java,spring,spring-security,spring-security-ldap,ldif,Java,Spring,Spring Security,Spring Security Ldap,Ldif,我目前正在尝试用Spring Boot 1.4.2.0版本构建一个小型Web应用程序。为此,我还使用了SpringBootLDAP,并加载了嵌入式LDAP和ldif。如果我开始这样做,它总是告诉我没有DN集,您将在下面看到 所以,如果我遗漏了什么,有人能告诉我如何运行它吗。已经尝试了教程中的一些示例ldif文件,但结果总是一样的 以下是我的配置的一些部分: -爪哇8 -弹簧靴1.4.2.1释放 -Spring注释代替xml -格拉德尔 build.gradle: ... springBootVe

我目前正在尝试用Spring Boot 1.4.2.0版本构建一个小型Web应用程序。为此,我还使用了SpringBootLDAP,并加载了嵌入式LDAP和ldif。如果我开始这样做,它总是告诉我没有DN集,您将在下面看到

所以,如果我遗漏了什么,有人能告诉我如何运行它吗。已经尝试了教程中的一些示例ldif文件,但结果总是一样的

以下是我的配置的一些部分: -爪哇8 -弹簧靴1.4.2.1释放 -Spring注释代替xml -格拉德尔

build.gradle:

... springBootVersion = '1.4.2.RELEASE'
compile ('org.springframework.boot:spring-boot-starter-web') {
    exclude module: 'org.springframework.boot:spring-boot-starter-tomcat'
}
compile 'org.springframework.boot:spring-boot-starter-jetty',
        'org.springframework.boot:spring-boot-starter-data-jpa',
        'org.springframework.boot:spring-boot-starter-data-rest',
        'org.springframework.boot:spring-boot-starter-freemarker',
        'org.springframework.boot:spring-boot-starter-security',
        'org.springframework.boot:spring-boot-actuator',
        'org.springframework.boot:spring-boot-devtools',
        'org.springframework.security:spring-security-ldap',
        'org.springframework:spring-tx',
        'com.h2database:h2',
        'org.apache.directory.server:apacheds-server-jndi:1.5.5'
testCompile 'org.springframework.boot:spring-boot-starter-test',
            'org.springframework.security:spring-security-test'
...
配置:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .authorizeRequests()
                    .anyRequest().fullyAuthenticated()
                    .and()
                .formLogin();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .ldapAuthentication()
                    .userSearchFilter("uid={0}")
                    .userSearchBase("ou=users")
                    .groupSearchBase("ou=groups")
                    .groupSearchFilter("(uniqueMember={0}")
                    .groupRoleAttribute("cn")
                    .rolePrefix("ROLE")
                    .contextSource().ldif("classpath:test.ldif")
                    .root("o=mojo");
    }

test.ldif:

version: 1

dn: o=mojo
objectClass: organization
objectClass: extensibleObject
objectClass: top
o: mojo

dn: ou=users,o=mojo
objectClass: extensibleObject
objectClass: organizationalUnit
objectClass: top
ou: users

dn: ou=groups,o=mojo
objectClass: extensibleObject
objectClass: organizationalUnit
objectClass: top
ou: groups

dn: cn=User,ou=groups,o=mojo
objectClass: groupOfUniqueNames
objectClass: top
cn: User
uniqueMember: cn=John Milton,ou=users,o=mojo
uniqueMember: cn=Robert Browning,ou=users,o=mojo
uniqueMember: cn=Hugo Williams,ou=users,o=mojo
uniqueMember: cn=John Keats,ou=users,o=mojo

dn: cn=Admin,ou=groups,o=mojo
objectClass: groupOfUniqueNames
objectClass: top
cn: Admin
uniqueMember: cn=Hugo Williams,ou=users,o=mojo
uniqueMember: cn=John Keats,ou=users,o=mojo

dn: cn=Robert Browning,ou=users,o=mojo
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: Robert Browning
sn: Browning
uid: rbrowning
userPassword:: cGFzcw==

...
错误消息:

2016-11-25 22:45:58.383  INFO 15028 --- [  restartedMain] o.s.s.ldap.server.ApacheDSContainer      : Loading LDIF file: C:\SourceCode\Zeiterfassung\src\main\resources\test.ldif
2016-11-25 22:45:58.391  WARN 15028 --- [  restartedMain] o.a.d.shared.ldap.ldif.LdifReader        : No version information : assuming version: 1
2016-11-25 22:45:58.391 ERROR 15028 --- [  restartedMain] o.a.d.shared.ldap.ldif.LdifReader        : A ldif entry must start with a DN
2016-11-25 22:45:58.392 ERROR 15028 --- [  restartedMain] o.a.d.s.p.shared.store.LdifFileLoader    : Failed to import LDIF into backing store.

javax.naming.NamingException: No DN for entry
    at org.apache.directory.shared.ldap.ldif.LdifReader.parseDn(LdifReader.java:562) ~[shared-ldap-0.9.15.jar:na]
    at org.apache.directory.shared.ldap.ldif.LdifReader.parseEntry(LdifReader.java:1234) ~[shared-ldap-0.9.15.jar:na]
    at org.apache.directory.shared.ldap.ldif.LdifReader.init(LdifReader.java:282) ~[shared-ldap-0.9.15.jar:na]
    at org.apache.directory.shared.ldap.ldif.LdifReader.<init>(LdifReader.java:329) ~[shared-ldap-0.9.15.jar:na]
    at org.apache.directory.server.protocol.shared.store.LdifFileLoader.execute(LdifFileLoader.java:181) ~[apacheds-protocol-shared-1.5.5.jar:na]
    at org.springframework.security.ldap.server.ApacheDSContainer.importLdifs(ApacheDSContainer.java:280) [spring-security-ldap-4.1.3.RELEASE.jar:4.1.3.RELEASE]
    at org.springframework.security.ldap.server.ApacheDSContainer.start(ApacheDSContainer.java:216) [spring-security-ldap-4.1.3.RELEASE.jar:4.1.3.RELEASE]
    at org.springframework.security.ldap.server.ApacheDSContainer.afterPropertiesSet(ApacheDSContainer.java:134) [spring-security-ldap-4.1.3.RELEASE.jar:4.1.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642) [spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
2016-11-25 22:45:58.383信息15028---[restartedMain]o.s.s.ldap.server.ApacheDSContainer:加载LDIF文件:C:\SourceCode\Zeiterfassung\src\main\resources\test.LDIF
2016-11-25 22:45:58.391警告15028---[restartedMain]o.a.d.shared.ldap.ldif.LdifReader:无版本信息:假设版本:1
2016-11-25 22:45:58.391错误15028---[restartedMain]o.a.d.shared.ldap.ldif.LdifReader:ldif条目必须以DN开头
2016-11-25 22:45:58.392错误15028---[restartedMain]o.a.d.s.p.shared.store.LdifFileLoader:无法将LDIF导入备份存储。
javax.naming.NamingException:条目没有DN
在org.apache.directory.shared.ldap.ldif.LdifReader.parseDn(LdifReader.java:562)~[shared-ldap-0.9.15.jar:na]
在org.apache.directory.shared.ldap.ldif.LdifReader.parseEntry(LdifReader.java:1234)~[shared-ldap-0.9.15.jar:na]
在org.apache.directory.shared.ldap.ldif.LdifReader.init(LdifReader.java:282)~[shared-ldap-0.9.15.jar:na]
在org.apache.directory.shared.ldap.ldif.LdifReader.(LdifReader.java:329)~[shared-ldap-0.9.15.jar:na]
在org.apache.directory.server.protocol.shared.store.LdifFileLoader.execute(LdifFileLoader.java:181)~[apacheds-protocol-shared-1.5.5.jar:na]
位于org.springframework.security.ldap.server.ApacheDSContainer.importLdifs(ApacheDSContainer.java:280)[spring-security-ldap-4.1.3.RELEASE.jar:4.1.3.RELEASE]
在org.springframework.security.ldap.server.ApacheDSContainer.start(ApacheDSContainer.java:216)[spring-security-ldap-4.1.3.RELEASE.jar:4.1.3.RELEASE]
位于org.springframework.security.ldap.server.ApacheDSContainer.afterPropertieSet(ApacheDSContainer.java:134)[spring-security-ldap-4.1.3.RELEASE.jar:4.1.3.RELEASE]
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1642)[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
非常感谢你的帮助


AirBounce

通过查看您提供的日志,可以发现您的ldif文件的第一行(
版本:1
)未被考虑在内:

2016-11-25 22:45:58.391警告15028---[restartedMain]o.a.d.shared.ldap.ldif.LdifReader:无版本信息:假设版本:1

顺便说一下,您提供的版本将是默认版本,因此您可以删除它

那么,我想它会起作用的


关于

我的问题是ldif文件中有一个字节顺序标记。如果删除BOM表,Apache DS将能够处理该文件。

我通过删除
application.yml中的validation属性来修复它

以前是:

spring:
  ldap:
    embedded:
      base-dn: dc=example,dc=com
      ldif: classpath:test-server.ldif
      port: 12745
      validation:
        enabled: true
现在是:

spring:
  ldap:
    embedded:
      base-dn: dc=example,dc=com
      ldif: classpath:test-server.ldif
      port: 12745

如果嵌入式ldap服务器上有任何日志记录,那么查找此类问题会更容易。

嗨,Pierre Jean,谢谢你的帮助,实际上我停止了ldif的工作,因为没有出路。我也尝试过删除第一行,但也不起作用。但还是要感谢你的回复。RegardsHi AirBounce,我也遇到了类似的问题-您还记得您是否将.ldif文件放在了“src/main/resources”文件夹中吗?Spring是否只是在启动应用程序时加载文件?我不确定是否需要在“application.properties”文件中配置它,该文件也应该位于“src/main/resources”中