当前位置: 首页 > 知识库问答 >
问题:

使用Spring Security和JavaConfig进行身份验证时出现PartialResultException

姬向明
2023-03-14

我目前正在使用Spring Boot创建一个新的web应用程序,并开始集成Spring Security进行身份验证。在成功地学习了基于Spring Boot的LDAP教程之后,我想将基于JavaConfig的配置指向我的Active Directory实例。

我的应用程序现在按预期处理错误凭据,但有效凭据现在会导致

javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name ''

这是一个常见的问题——在许多地方都遇到过这个问题。解决方案似乎是设置上下文。引用“follow”,但我找不到任何说明如何使用JavaConfig设置该选项的文档。我在这里的唯一选择是恢复到基于XML的配置吗?似乎Spring正在推动开发人员使用JavaConfig,所以如果可能的话,我希望避免将这两种方法混合使用。

以下是我的安全配置:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/css/**").permitAll().anyRequest()
                .fullyAuthenticated().and().formLogin();
    }

    @Configuration
    protected static class AuthenticationConfiguration extends
            GlobalAuthenticationConfigurerAdapter {

        @Override
        public void init(AuthenticationManagerBuilder auth) throws Exception {
            auth.ldapAuthentication()
                .userSearchBase("")
                .userSearchFilter("(&(cn={0}))").contextSource()
                .managerDn("<username>")
                .managerPassword("<password>")
                .url("ldap://<url>");
        }
    }
}

共有1个答案

周伟泽
2023-03-14

我觉得我需要使用LdapContextSource的一个实例来实现这一点(因为它有一个方便的setReferral方法),但我在细节上有点纠结。关于Spring的论坛帖子。io给了我足够的时间让我继续下去,现在看来我的工作已经开始了。

我不清楚我在这里所做的工作是否有任何重大缺陷,但它似乎起到了作用,因此希望这将对未来的其他人有所帮助:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/css/**").permitAll().anyRequest()
                .fullyAuthenticated().and().formLogin();
    }

    @Configuration
    protected static class AuthenticationConfiguration extends
            GlobalAuthenticationConfigurerAdapter {

        @Override
        public void init(AuthenticationManagerBuilder auth) throws Exception {              
            DefaultSpringSecurityContextSource contextSource = new DefaultSpringSecurityContextSource("ldap://<url>");
            contextSource.setUserDn("<username>");
            contextSource.setPassword("<password>");
            contextSource.setReferral("follow"); 
            contextSource.afterPropertiesSet();

            LdapAuthenticationProviderConfigurer<AuthenticationManagerBuilder> ldapAuthenticationProviderConfigurer = auth.ldapAuthentication();

            ldapAuthenticationProviderConfigurer
                .userSearchFilter("(&(cn={0}))")
                .userSearchBase("")
                .contextSource(contextSource);
        }
    }
}
 类似资料:
  • 我正在编写一个需要用户登录的web应用程序。我的公司有一个Active Directory服务器,我想为此目的使用它。但是,我在使用Spring验证用户凭据时遇到了麻烦。 完整StackTrace: 当我使用Ldap-Explorer浏览广告并搜索(Spring在ActiveDirectoryLdapAuthenticationProvider:SearchForUser(...)中这样做)时,它

  • 问题内容: 我想为在Raspberry Pi上运行并像本地服务器一样工作的软件制作一些更新脚本。该服务器应连接到Web上的主服务器,以获取软件更新并验证软件的许可证。为此,我设置了两个python脚本。我希望它们通过TLS套接字连接。然后,客户端检查服务器证书,然后服务器检查它是否是授权的客户端之一。我在此页面上找到了解决方案。 现在还有一个问题。我想知道 哪个客户端 (取决于证书)正在建立连接。

  • 但请求呢?和是用户的属性,但应将它们发送到endpoint。如果我将资源发送到endpoint,则没有多大意义。 对此有没有办法,遵循JSONAPI并保持API的意义?

  • 问题内容: 我正在尝试为不同的URL模式定义两种不同的安全配置,其中一种使用表单登录,另一种使用对api的基本身份验证。 我正在寻找的解决方案与此处说明的解决方案类似,网址为http://meera- subbarao.blogspot.co.uk/2010/11/spring-security-combining-basic- and.html, 但我想这样做使用Java配置。 提前致谢。 这是

  • 我正在尝试使用urllib3连接到网页。代码如下所示。 如果我们假设url是需要使用用户名和密码进行身份验证的某个网页,那么我是否使用正确的代码进行身份验证? 我使用urllib2做这件事很舒服,但使用urllib3做不到同样的事情。 非常感谢

  • jwt不应该仅仅用于认证用户吗?我读到过可以在里面存储非敏感的东西,比如用户ID。将权限级别之类的东西存储在令牌中可以吗?这样我可以避免数据库调用。