2016-11-25 14 views
0

В настоящее время я пытаюсь создать небольшую веб-приложение с Spring Boot 1.4.2.RELEASE. Для этого я также использую Spring Boot LDAP со встроенными LDAP и ldif загруженными. Если я начинаю, это всегда говорит мне, что нет DN, как вы увидите ниже.Весна не в состоянии загрузить ldif

Так кто-то может рассказать мне, как добиться этого, если я что-то упустил. Уже пробовал некоторые примеры файлов ldif из учебников, но всегда есть тот же результат.

Вот некоторые части моей конфигурации: - Java 8 - Spring Загрузочный 1.4.2.RELEASE - Spring аннотаций вместо XML - Gradle

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

Кстати, версия, которую вы предоставили швам, была стандартной по умолчанию, поэтому вы можете ее удалить.

Тогда, я думаю, это сработает.

С уважением

+0

HI Pierre-Jean, спасибо за вашу помощь, на самом деле я перестал работать с ldif, потому что выхода просто не было. Я также попробовал его с удалением первой строки, но не работал. Но все равно спасибо за ваш ответ. С уважением – AirBounce

0

Моя проблема была Byte Order Mark в моем Ldif-файле. Если вы удалите спецификацию, Apache DS сможет обработать файл.