2016-11-25 82 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將能夠處理該文件。