2016-07-08 9 views
0

私はgrailsフレームワークが新しくなりました。私は下記の設定を使用しています。ログインしようとすると、「LDAP:error code 32 - No such object」というエラーメッセージが表示され、ネストされた例外はjavax.naming.NameNotFoundExceptionです。grails 3.1.6でのLDAPログイン。エラーメッセージ "LDAP:error code 32"

Grails Version: 3.1.6 
Groovy Version: 2.4.6 
JVM Version: 1.8.0_92 

Build.gradle

dependencies { 
    compile "org.springframework.boot:spring-boot-starter-logging" 
    compile "org.springframework.boot:spring-boot-autoconfigure" 
    compile "org.grails:grails-core" 
    compile "org.springframework.boot:spring-boot-starter-actuator" 
    compile "org.springframework.boot:spring-boot-starter-tomcat" 
    compile "org.springframework.boot:spring-boot-gradle-plugin:1.3.3.RELEASE" 
    **compile "org.grails.plugins:spring-security-ldap:3.0.1" 
    compile "org.grails.plugins:spring-security-core:3.1.1"** 
    compile "org.grails:grails-dependencies" 
    compile "org.grails:grails-web-boot" 
    compile "org.grails.plugins:cache" 
    compile "org.grails.plugins:scaffolding" 
    compile "org.grails.plugins:hibernate4" 
    compile "org.hibernate:hibernate-ehcache" 
    console "org.grails:grails-console" 
    profile "org.grails.profiles:web:3.1.6" 
    runtime "com.bertramlabs.plugins:asset-pipeline-grails:2.8.2" 
    runtime "com.h2database:h2" 
    testCompile "org.grails:grails-plugin-testing" 
    testCompile "org.grails.plugins:geb" 
    testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1" 
    testRuntime "net.sourceforge.htmlunit:htmlunit:2.18" 
} 

Application.yml

grails: 
    plugin: 
     springsecurity: 
     providerNames: ['ldapAuthProvider','anonymousAuthenticationProvider'] 
     ldap: 
      context: 
       managerDn: '[distinguishedName]' 
       managerPassword: secret 
       server: 'ldap://[ip]:[port]/' 
      authorities: 
       retrieveDatabaseRoles: true 
      password: 
       algorithm: 'SHA-256' 
      search: 
       base: [dc=mycompany,dc=com] 
       filter: 'uid={0}' 
       attributesToReturn: ['displayname','mail'] 
       searchSubtree: true 

MyUserDetails.groovy

import org.springframework.security.core.GrantedAuthority 
import org.springframework.security.core.userdetails.User 

class MyUserDetails extends User { 

    // extra instance variables 
    final String fullname 
    final String email 
    final String title 

    MyUserDetails(String username, String password, boolean enabled, boolean accountNonExpired, 
     boolean credentialsNonExpired, boolean accountNonLocked, 
     Collection<GrantedAuthority> authorities, String fullname, 
     String email, String title) { 

     super(username, password, enabled, accountNonExpired, credentialsNonExpired, 
      accountNonLocked, authorities) 

     this.fullname = fullname 
     this.email = email 
     this.title = title 
    } 
} 

MyUserDetailsContextMapper.groovy

誰もがGrailsの3.1.6でLDAPを設定するための詳細な手順を共有する場合は、コンソールで
import org.springframework.ldap.core.DirContextAdapter 
import org.springframework.ldap.core.DirContextOperations 
import org.springframework.security.core.userdetails.UserDetails 
import org.springframework.security.ldap.userdetails.UserDetailsContextMapper 

class MyUserDetailsContextMapper implements UserDetailsContextMapper { 

    UserDetails mapUserFromContext(DirContextOperations ctx, String username, 
            Collection authorities) { 

     String fullname = ctx.originalAttrs.attrs['name'].values[0] 
     String email = ctx.originalAttrs.attrs['mail'].values[0].toString().toLowerCase() 
     def title = ctx.originalAttrs.attrs['title'] 

     new MyUserDetails(username, null, true, true, true, true, 
         authorities, fullname, email, 
         title == null ? '' : title.values[0]) 
    } 

    void mapUserToContext(UserDetails user, DirContextAdapter ctx) { 
     throw new IllegalStateException("Only retrieving data from AD is currently supported") 
    } 
} 

エラー

ERROR org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[grailsDispatcherServlet] - Servlet.service() for servlet [grailsDispatcherServlet] in context with path [] threw exception 
org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - No Such Object]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'ou=groups,dc=example,dc=com' 
    at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:183) 
    at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:376) 
    at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:328) 
    at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:629) 
    at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:570) 
    at org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForMultipleAttributeValues(SpringSecurityLdapTemplate.java:241) 
    at org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleAttributeValues(SpringSecurityLdapTemplate.java:166) 
    at org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator.getGroupMembershipRoles(DefaultLdapAuthoritiesPopulator.java:238) 
    at grails.plugin.springsecurity.ldap.userdetails.GrailsLdapAuthoritiesPopulator.getGroupMembershipRoles(GrailsLdapAuthoritiesPopulator.groovy:114) 
    at org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator.getGrantedAuthorities(DefaultLdapAuthoritiesPopulator.java:207) 
    at org.springframework.security.ldap.authentication.LdapAuthenticationProvider.loadUserAuthorities(LdapAuthenticationProvider.java:215) 
    at org.springframework.security.ldap.authentication.AbstractLdapAuthenticationProvider.authenticate(AbstractLdapAuthenticationProvider.java:87) 
    at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:167) 
    at org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter.attemptAuthentication(UsernamePasswordAuthenticationFilter.java:93) 
    at grails.plugin.springsecurity.web.authentication.GrailsUsernamePasswordAuthenticationFilter.attemptAuthentication(GrailsUsernamePasswordAuthenticationFilter.groovy:53) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:217) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:91) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:213) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:176) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:75) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1095) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object] 
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3160) 
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3081) 
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2888) 
    at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1846) 
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1769) 
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:392) 
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:358) 
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:341) 
    at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:267) 
    at org.springframework.ldap.core.LdapTemplate$4.executeSearch(LdapTemplate.java:322) 
    at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:363) 
    ... 56 common frames omitted 

また、それは、参考になります。

ありがとうございました。

答えて

0

私は最近、2.x Grailsアプリケーションを3.1.8 &に変換しました。私のLDAP設定をgroovyからymlに移動しました。フォーマットがあなたの設定のいくつかに合っているかどうかは分かりません。 providerNames、私はこれらを次のように分割しました:

springsecurity: 
     active: true 
     useSecurityEventListener: false 
     providerNames: 
      - ldapAuthProvider 
      - anonymousAuthenticationProvider 
     ldap: 
      context: 
       managerDn: 'cn=Directory Manager' 
       managerPassword: 'secret' 
       server: 'ldap://localhost:389' 
      authorities: 
       retrieveGroupRoles: true 
       groupSearchBase: 'ou=Groups,dc=blah,dc=co,dc=uk' 
      search: 
       base: 'dc=blah,dc=co,dc=uk' 
       searchSubtree: true 
       attributesToReturn: 
        - mail 
        - name 
      auth: 
       hideUserNotFoundExceptions: false 
     logout: 
      postOnly: false 
0

また、私はLDAPのために何を使用しているのか分かりません。 ApacheDSは、LDAP階層の構築、テスト、デバッグに役立つ優れたApacheDS Studioアプリケーションが付属しているので、ApacheDSを試してみることをお勧めします。

関連する問題