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

带Spring的LDAP

麻超
2023-03-14

我想在我的应用程序中使用LDAP,以便进行身份验证

在前面的配置中,我使用数据库进行身份验证

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/security 
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/test/**" access="hasRole('ADMIN')" />
        <intercept-url pattern="/test1/**" access="hasRole('USER')" />



         <form-login login-page="/index.htm" authentication-success-handler-ref="authenticationSuccessRedirecthandler"
          default-target-url = "/test/MainHealthCertificat.htm"
            authentication-failure-url="/index.htm?error=1"/>
        <logout logout-success-url="/index.htm" />


    </http>


    <beans:bean class="com..CustomAuthenticationHandler" id="authenticationSuccessRedirecthandler"></beans:bean>

    <authentication-manager>
        <authentication-provider>

                <jdbc-user-service data-source-ref="dataSource" 
                                        users-by-username-query="select username, password, enabled from users where username=?"  
                    authorities-by-username-query="select u.username, ur.authority from users u, user_roles ur where u.user_id = ur.user_id and u.username =?  " 
                />

        </authentication-provider>
    </authentication-manager>
</beans:beans>
public class CustomAuthenticationHandler extends SimpleUrlAuthenticationSuccessHandler {

 @Override
 public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {

      String adminTargetUrl = "/test/mypage.htm";


      Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());


      if (roles.contains("ADMIN")) {  
         getRedirectStrategy().sendRedirect(request, response, adminTargetUrl);
      }else {
         super.onAuthenticationSuccess(request, response, authentication);
         return;
      }
   }
}

不,我想使用ldap进行身份验证

我修改了security-app-context.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
        xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security 
                        http://www.springframework.org/schema/security/spring-security-3.1.xsd">

        <http auto-config="true" use-expressions="true">
            <intercept-url pattern="/test/**" access="hasRole('ADMIN')" />
            <intercept-url pattern="/test1/**" access="hasRole('USER')" />



             <form-login login-page="/index.htm" authentication-success-handler-ref="authenticationSuccessRedirecthandler"
              default-target-url = "/test/MainHealthCertificat.htm"
                authentication-failure-url="/index.htm?error=1"/>
            <logout logout-success-url="/index.htm" />


        </http>


        <beans:bean class="com..CustomAuthenticationHandler" id="authenticationSuccessRedirecthandler"></beans:bean>

         <security:authentication-manager>
         <security:ldap-authentication-provider 
           user-search-filter="(uid={0})"
           user-search-base="ou=users"
           group-search-filter="(uniqueMember={0})"
           group-search-base="ou=groups"
           group-role-attribute="cn"
           role-prefix="ROLE_">
         </security:ldap-authentication-provider>
 </security:authentication-manager>

 <security:ldap-server url="ldap://192.168.0.88:389" manager-dn="uid=admin,ou=system" manager-password="secret" />
    </beans:beans>

但是当我测试时,我有这样一个错误:

Caused by: org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db0

LDAP://192.168.0.88:389

基本DN

DC=部长,DC=FR

身份验证搜索筛选器

(&(objectclass=person)(mail=@email_address@))

导入搜索筛选器

用户密码

电子邮件地址

邮件

纪文纳

中间名

米德勒纳姆

姓氏

CN

描述

SamAccountName

DN DC=部长,DC=FR组

共有1个答案

韶云瀚
2023-03-14

错误代码数据52e表示提供的凭据无效。

请尝试删除下面的manager-dn=“uid=admin,ou=system”manager-password=“secret”属性。

<security:ldap-server url="ldap://192.168.0.88:389" manager-dn="uid=admin,ou=system" manager-password="secret" />

再试一次。这些是LDAP管理凭据,用户身份验证不需要这些凭据。用户身份验证是使用登录期间提供的值完成的,默认情况下,spring尝试使用提供的详细信息绑定到LDAP。

还要尝试通过在security-app-context.xml中包含 标记来启用debug,并添加log4j.properties。这将为调试提供大量有用的信息。

 类似资料:
  • 问题内容: 我已经了解到,如果在Spring上下文中使用EJB,我将获得与在“纯” EJB3环境中使用EJB一样的所有好处,这是真的吗?我已经用谷歌搜索,但是找不到明确的答案。 例如,假设我有一个会话Bean,它会更新数据库中的某些表,并引发系统异常。在“纯” EJB3环境中,事务将回滚。例如,如果我使用Spring使用@Autowire这个bean,那么Spring是否像EJB3容器一样处理事务

  • 我使用的是spring hateoas:0.18.0。使用Spring防尘套释放:1.2.5。发布 调用我的Web服务并通过HAL链接,我使用Traverson Client(受Traverson JavaScript库启发的客户端服务遍历API) 使用Hypermedia和HateoasRest是新的 我的问题是什么时候需要使用PagedResources和Resource? 我在这里找到的示例

  • 我一直在从事一个用spring initialzr初始化的spring boot项目。生成的包没有目录,因此必须添加 或< code > mvn clean package spring-boot:run 运行时,目录树中显示的< code>\target目录没有来自< code>\WEB-INF\views\的< code>index.jsp(事实上,目标目录根本没有< code>WEB-INF

  • 我是Spring Boot和MongoDb的新手。尝试使用Mongo存储库和Spring Boot的一些示例。但在浏览了一些文档后发现,Mongo模板是一个更好的选择。无法使用Mongo模板示例获得正确的Spring Boot。 > 有人能帮我举个同样的例子吗? 在尝试Mongo模板时,我们是否需要创建用户定义的存储库界面并扩展存储库或CRUD存储库?

  • 我正在使用jasypt spring boot starter:1.14和spring-boot-2.0.0。M2 如果application.properties在类路径(src/main/资源)中可用,它工作得非常好 即使应用程序运行正常,Spring boot也能正常工作。属性放在运行spring boot jar的文件夹中(默认情况下,它在当前文件夹中查找application.prope

  • 我正在尝试将vaadin与spring(没有Spring Boot)和基于java注释的spring部分配置结合起来。 自动连接似乎适用于vaadin ui部分,但不适用于“自定义ui类”(例如,“公共类LoginScreen扩展自定义组件”)。我在SysOut上得到一个NPE或一个空对象。 此外,我注意到“@ComponentScan(base Packages={"net.myapp"})”没