Spring security ldapuserdetailsiml.hashCode中的LDAP Spring安全空指针

Spring security ldapuserdetailsiml.hashCode中的LDAP Spring安全空指针,spring-security,spring-session,spring-security-ldap,Spring Security,Spring Session,Spring Security Ldap,在多节点SpringLDAP安全应用程序中,获取以下异常。奇怪的是,在某些节点中,身份验证正确发生,并且在某些节点中出现了此异常- 在多节点SpringLDAP安全应用程序中,获取以下异常。奇怪的是,在某些节点中,身份验证正确发生,并且在某些节点中出现了此异常- StackTrace:org.springframework.security.ldap.userdetails.ldapuserdetailsiml.hashCode(ldapuserdetailsiml.java:133)org.s

在多节点SpringLDAP安全应用程序中,获取以下异常。奇怪的是,在某些节点中,身份验证正确发生,并且在某些节点中出现了此异常-

在多节点SpringLDAP安全应用程序中,获取以下异常。奇怪的是,在某些节点中,身份验证正确发生,并且在某些节点中出现了此异常-

StackTrace:org.springframework.security.ldap.userdetails.ldapuserdetailsiml.hashCode(ldapuserdetailsiml.java:133)org.springframework.security.authentication.AbstractAuthenticationToken.hashCode(AbstractAuthenticationToken.java:180)java.lang.Object.toString(Object.java:236)位于org.springframework.security.authentication.AbstractAuthenticationToken.toString(AbstractAuthenticationToken.java:201)处java.lang.String.valueOf(String.java:2994)处java.lang.StringBuilder.append(StringBuilder.java:131)处org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.successfulAuthentication处位于org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:240)的org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)com.company.cm.config.WebSecurityConfig$1.doFilterInternal(WebSecurityConfig.java:113)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:124)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.header.HeaderWriterFilter.doFilter内部(HeaderWriterFilter.java:64)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)位于org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331),位于org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56),位于org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)org.springframework.security.web.access.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:157)org.springframework.security.web.FilterChainProxy$virtualfilter.doFilter(FilterChainProxy.java:331)位于org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)位于org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)位于org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)的org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)位于org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:167),位于org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:80),位于org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)org.apache.catalina.core.ApplicationFilterChain.doFilter(DelegatingFilterProxy.java:262)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)org.apache.catalina.valves.ErrorReportValve.invokeorg.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)在org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)在org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1533)在org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1489)上java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)org.apache.tomcat.util.threads.TaskThread$wrappingranable.run(TaskThread.java:61)java.lang.Thread.745)

日志-

20:04:28.581[http-nio-8080-exec-10]调试org.springframework.security.web.util.matcher.AntPathRequestM
@Bean
public DefaultSpringSecurityContextSource ldapContext() {
    DefaultSpringSecurityContextSource context = new DefaultSpringSecurityContextSource(
            config.get("ldap.context", "ldap://x.x.x.x/dc=company,dc=com"));
    context.afterPropertiesSet();
    return context;
}

/**
 * LDAP Bind Authenticator
 * 
 * @return
 */
@Bean
public BindAuthenticator bindAuthenticator() {
    BindAuthenticator authenticator = new BindAuthenticator(ldapContext());
    String[] dnPatterns = { config.get("ldap.dnPattern", "uid={0},ou=People") };
    authenticator.setUserDnPatterns(dnPatterns);
    return authenticator;
}

/**
 * LDAP authorities populator
 * 
 * @return
 */
@Bean
public DefaultLdapAuthoritiesPopulator ldapAuthoritiesPopulator() {
    DefaultLdapAuthoritiesPopulator ldapAuthoritiesPopulator = new DefaultLdapAuthoritiesPopulator(ldapContext(),
            config.get("ldap.group.search.base", "ou=Group"));
    ldapAuthoritiesPopulator.setGroupRoleAttribute(config.get("ldap.group.role.attribute", "cn"));
    ldapAuthoritiesPopulator.setGroupSearchFilter(config.get("ldap.group.search.filter", "(memberUid={0})"));
    ldapAuthoritiesPopulator.setIgnorePartialResultException(true);
    ldapAuthoritiesPopulator.setRolePrefix(config.get("ldap.user.role.prefix", "ROLE_"));
    ldapAuthoritiesPopulator.setSearchSubtree(true);
    ldapAuthoritiesPopulator.setConvertToUpperCase(true);
    return ldapAuthoritiesPopulator;
}

@Bean
public LdapAuthenticationProvider ldapAuthenticationProvider() {
    LdapAuthenticationProvider authProvider = new LdapAuthenticationProvider(bindAuthenticator(),
            ldapAuthoritiesPopulator());
    authProvider.setUseAuthenticationRequestCredentials(true);
    authProvider.setHideUserNotFoundExceptions(false);
    authProvider.setUserDetailsContextMapper(ldapContextMapper());
    return authProvider;
}

@Bean
public LdapUserDetailsContextMapper ldapContextMapper() {
    return new LdapUserDetailsContextMapper();
}
@Autowired
Configuration config;

@Bean
public JedisConnectionFactory connectionFactory() {
    List<String> clusterNodes = Arrays.asList(config.get("redis.cluster.session"));
    return new JedisConnectionFactory(new RedisClusterConfiguration(clusterNodes));
}