2016-11-25 103 views
0

我目前正在尝试用Spring Boot 1.4.2.RELEASE构建一个小型的web应用程序。为此,我还使用带有嵌入式LDAP和ldif的Spring Boot LDAP。如果我开始,它总是告诉我,没有DN设置,你会看到下面。Spring无法加载ldif

所以有人能够告诉我如何得到那个跑步,如果我失去了一些东西。已经从教程中尝试了一些示例ldif文件,但总是有相同的结果。

这里是我的配置的某些部分: - Java的8 - 春季启动1.4.2.RELEASE - 春天注释,而不是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] 

非常感谢您的帮助

AirBounce

回答

0

通过查看您所提供的日志,它是接缝您的ldif文件的第一行(version: 1)未考虑在内:

2016年11月25日22:45:58.391 WARN 15028 --- [restartedMain] oadshared.ldap.ldif.LdifReader:没有版本信息:假定版本:1

顺便提及,您提供的版本是默认版本,因此您可以将其删除。

然后,我认为它会工作。

Regards

+0

HI Pierre-Jean, 感谢您的帮助,实际上我停止了在ldif上工作,因为没有出路。我也尝试删除第一行但没有工作。但仍然感谢您的回复。 此致 – AirBounce

0

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