Caused by: java.lang.RuntimeException: Could not postProcess org.springframework.security.ldap.server.ApacheDSContainer@54a76efa of type class org.springframework.security.ldap.server.ApacheDSContainer
at org.springframework.security.config.annotation.configuration.AutowireBeanFactoryObjectPostProcessor.postProcess(AutowireBeanFactoryObjectPostProcessor.java:70)
at org.springframework.security.config.annotation.SecurityConfigurerAdapter$CompositeObjectPostProcessor.postProcess(SecurityConfigurerAdapter.java:123)
at org.springframework.security.config.annotation.SecurityConfigurerAdapter.postProcess(SecurityConfigurerAdapter.java:82)
at org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer.access$400(LdapAuthenticationProviderConfigurer.java:58)
at org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer$ContextSourceBuilder.build(LdapAuthenticationProviderConfigurer.java:555)
at org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer$ContextSourceBuilder.access$500(LdapAuthenticationProviderConfigurer.java:446)
at org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer.getContextSource(LdapAuthenticationProviderConfigurer.java:606)
at org.springframework.security.config.annotation.authentication.configurers.ldap.LdapAuthenticationProviderConfigurer.build(LdapAuthenticationProviderConfigurer.java:76)
我在谷歌的研究中列出了一篇2013年的帖子,其中说这个问题是因为Spring Security LDAP和Java8之间的不兼容。同一篇文章说,它已经在一些Spring引导版本中得到修复。它没有谈到任何非Spring Boot库的修复。
有人尝试过使用Java8进行Spring Security LDAP身份验证吗?请帮忙。
下面是我使用Java8和Spring Security LDAP的工作配置。我们将Spring Web应用程序连接到Active Directory实例,以确保通过URL进行访问。
如果我没记错的话,这比我预期的要长。
您需要更改LDAP上下文路径的“base”,并注意LDAP.user是完整的LDAP CN,而不仅仅是用户名。您可以使用诸如JXplorer(http://JXplorer.org/)之类的LDAP浏览器来正确地设置LDAP。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.ldap.core.support.LdapContextSource;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(SecurityConfig.class);
@Value("ldap://${ldap.host}:${ldap.port:389}")
private String url;
@Value("${ldap.user}")
private String user;
@Value("${ldap.password}")
private String password;
@Override
protected void configure(HttpSecurity http) throws Exception {
LOGGER.info("Configuring security...");
http.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/index.html").permitAll()
.anyRequest().fullyAuthenticated()
.and()
.httpBasic();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userSearchFilter("(&(objectClass=user)(sAMAccountName={0}))")
.contextSource(ldapContextSource());
}
@Bean
public BaseLdapPathContextSource ldapContextSource() {
LOGGER.info("LDAP: {}", url);
LdapContextSource bean = new LdapContextSource();
bean.setUrl(url);
bean.setBase("DC=CORP,DC=MyCompany,DC=com");
bean.setUserDn(user);
bean.setPassword(password);
bean.setPooled(true);
bean.setReferral("follow");
return bean;
}
}
ldap.host=ldap.mycompany.com
ldap.user=CN=MyUser,OU=Service Accounts,OU=New-York,DC=CORP,DC=MyCompany,DC=com
# Encrypt using Jasypt or something
ldap.password=B1gS3cr3t
我正在尝试在我的Jenkins工具中配置LDAP身份验证。我已经在Jenkins上完成了以下LDAP身份验证的设置,但我仍然无法登录。 服务器:ldaps://rootdc1.myweb.com:636 根DN:dc=myweb,dc=com 提前感谢!
问题内容: 我正在尝试在python中使用基本身份验证 响应表单 auth 变量: 但是,当我尝试从其他位置获取数据时-我收到401错误 据我了解-在第二个请求中不是替换的会话参数。 问题答案: 您需要使用会话对象,并向 每个请求 发送身份验证。该会话还将为您跟踪Cookie:
嗨,我在laravel的身份验证方面遇到了一些问题。我必须使用两个中间件1。是web和2。auth。我正在使用web中间件,以便可以使用会话来显示flash消息。并希望使用auth中间件对用户/管理员进行身份验证。但我面临一些问题。 下面是我检查授权和重定向到各自路线的功能 下面是我的管理路线 每次我试图登录它重定向我到相同的登录页面。
问题内容: 我正在上。基本身份验证将于 8月16日起过期。因此我们必须使用Twitter身份验证。但其实施有些复杂。切断了两个步骤。但是问题是我曾经 进行过身份验证,而且文档也很糟糕。我想使用1.6本身的XAuth。建议使用哪个软件包。以及(如果有)或特定于Android以使用身份验证。 问题答案: 编辑:在我的代码中,我这样做: 然后,您必须从以下位置保存令牌和令牌机密 当您想使用令牌时,只需执
身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工
我在Spring Boot web应用程序中有一个非常特殊的要求:我有内部和外部用户。内部用户通过使用KeyCoap身份验证登录到web应用程序(他们可以在web应用程序中工作),但我们的外部用户通过简单的Spring Boot身份验证登录(他们可以做的只是下载web应用程序生成的一些文件) 我想做的是使用多个身份验证模型:除了/download/*之外的所有路径都要通过我们的keyCoap身份验