浅谈Spring Security LDAP简介

 更新时间:2019年05月23日 14:33:41   作者:程序猿Knight  
这篇文章主要介绍了浅谈Spring Security LDAP简介,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.概述

在本快速教程中,我们将学习如何设置Spring Security LDAP。

在我们开始之前,了解一下LDAP是什么? - 它代表轻量级目录访问协议。它是一种开放的,与供应商无关的协议,用于通过网络访问目录服务。

2. Maven Dependency

首先,让我们看看我们需要的maven依赖项:

<dependency>
  <groupId>org.springframework.security</groupId>
  <artifactId>spring-security-ldap</artifactId>
</dependency>
 
<dependency>
  <groupId>org.apache.directory.server</groupId>
  <artifactId>apacheds-server-jndi</artifactId>
  <version>1.5.5</version>
</dependency>

注意:我们使用ApacheDS作为LDAP服务器,它是一个可扩展和可嵌入的目录服务器。

3. Java Configuration

接下来,我们来讨论我们的Spring Security Java配置:

public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.ldapAuthentication()
      .userSearchBase("ou=people")
      .userSearchFilter("(uid={0})")
      .groupSearchBase("ou=groups")
      .groupSearchFilter("member={0}")
      .contextSource()
      .root("dc=baeldung,dc=com")
      .ldif("classpath:users.ldif");
  }
}

这当然只是配置的LDAP相关部分 - 可以在此处找到完整的Java配置

4. XML Configuration

现在,我们来看看相应的XML配置:

<authentication-manager>
  <ldap-authentication-provider
   user-search-base="ou=people"
   user-search-filter="(uid={0})"
   group-search-base="ou=groups"
   group-search-filter="(member={0})">
  </ldap-authentication-provider>
</authentication-manager>
  
<ldap-server root="dc=baeldung,dc=com" ldif="users.ldif"/>

同样,这只是配置的一部分 - 与LDAP相关的部分;完整的XML配置可以在这里找到。

5. LDAP数据交换格式

LDAP数据可以使用LDAP数据交换格式(LDIF)表示 - 这是我们的用户数据的示例:

dn: ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: organizationalUnit
ou: groups
 
dn: ou=people,dc=baeldung,dc=com
objectclass: top
objectclass: organizationalUnit
ou: people
 
dn: uid=baeldung,ou=people,dc=baeldung,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Jim Beam
sn: Beam
uid: baeldung
userPassword: password
 
dn: cn=admin,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: admin
member: uid=baeldung,ou=people,dc=baeldung,dc=com
 
dn: cn=user,ou=groups,dc=baeldung,dc=com
objectclass: top
objectclass: groupOfNames
cn: user
member: uid=baeldung,ou=people,dc=baeldung,dc=com

6. The Application

最后,这是我们的简单应用:

@Controller
public class MyController {
 
  @RequestMapping("/secure")
  public String secure(Map<String, Object> model, Principal principal) {
    model.put("title", "SECURE AREA");
    model.put("message", "Only Authorized Users Can See This Page");
    return "home";
  }
}

7.总结

在这本使用LDAP的Spring Security快速指南中,我们学习了如何使用LDIF配置基本系统并在spring security配置LDAP。

可以在github项目中找到本教程的完整实现 - 这是一个基于Eclipse的项目,因此它应该很容易导入和运行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • VSCode+Gradle搭建Java开发环境实现

    VSCode+Gradle搭建Java开发环境实现

    这篇文章主要介绍了VSCode+Gradle搭建Java开发环境实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Java synchronized重量级锁实现过程浅析

    Java synchronized重量级锁实现过程浅析

    这篇文章主要介绍了Java synchronized重量级锁实现过程,synchronized是Java里的一个关键字,起到的一个效果是"监视器锁",它的功能就是保证操作的原子性,同时禁止指令重排序和保证内存的可见性
    2023-02-02
  • SpringBoot详细探究讲解默认组件扫描

    SpringBoot详细探究讲解默认组件扫描

    在项目中我们创建了Controller,这个Controller是如何被spring自动加载的呢?为什么Controller必须放在启动类的同级目录下呢
    2022-06-06
  • Spring中byName和byType的区别及说明

    Spring中byName和byType的区别及说明

    这篇文章主要介绍了Spring中byName和byType的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Java如何自定义类数组的创建和初始化

    Java如何自定义类数组的创建和初始化

    这篇文章主要介绍了Java如何自定义类数组的创建和初始化,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Eclipse自定义启动画面和图标的方法介绍

    Eclipse自定义启动画面和图标的方法介绍

    这篇文章主要介绍了Eclipse自定义启动画面和图标的方法介绍,以及一些eclipse的快捷键,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • JavaGUI模仿QQ聊天功能完整版

    JavaGUI模仿QQ聊天功能完整版

    这篇文章主要为大家详细介绍了JavaGUI模仿QQ聊天功能完整版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • SpringMVC如何获取表单数据(radio和checkbox)

    SpringMVC如何获取表单数据(radio和checkbox)

    这篇文章主要介绍了SpringMVC如何获取表单数据(radio和checkbox)的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Lombok基本注解之@SneakyThrows的作用

    Lombok基本注解之@SneakyThrows的作用

    @SneakyThrows注解是由lombok为咱们封装的,它能够为咱们的代码生成一个try...catch块,并把异常向上抛出来,下面这篇文章主要给大家介绍了关于Lombok基本注解之@SneakyThrows作用的相关资料,需要的朋友可以参考下
    2022-01-01
  • SpringBoot+ThreadLocal+AbstractRoutingDataSource实现动态切换数据源

    SpringBoot+ThreadLocal+AbstractRoutingDataSource实现动态切换数据源

    最近在做业务需求时,需要从不同的数据库中获取数据然后写入到当前数据库中,因此涉及到切换数据源问题,所以本文采用ThreadLocal+AbstractRoutingDataSource来模拟实现dynamic-datasource-spring-boot-starter中线程数据源切换,需要的朋友可以参考下
    2023-08-08

最新评论