Spring Security 学习之LDAP认证

简介:

一、前言

LDAP:轻型目录访问协议,即Lightweight Directory Access Protocol (LDAP)是一个访问在线目录服务的协议,最典型例子的就是黄页、电话簿等,主要用于读极多并且写极少的场景。


LDAP服务器:


二、Spring配置

  1. ldap-server:


    目标LDAP配置,即协议、IP、端口、用户名、密码等,如:

    1
    < security:ldap-server  url = "ldap://localhost:10389/o=apple"  manager-dn = "uid=admin,ou=system"  manager-password = "secret"  />


    Spring支持内嵌的LDAP测试服务器配置,ADS有提供相关的jar,内嵌LDAP服务器只需要指定root和ldif文件即可,不需要协议IP端口等配置,ldif文件可以使用ADS开发工具编辑,如:

    1
    < security:ldap-server  root = "o=apple"  ldif = "classpath:apple.ldif" />


  2. ldap-authentication-provider:

    用户认证授权相关配置,主要是用户配置用户组合用户过滤规则,方便快速从LDAP服务器定位到用户信息,如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    < 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 >

    wKioL1MK57KiW7jkAADS-65MRbs628.jpg


user-dn-pattern: 用户dn过滤规则,如user-dn-pattern="uid={0},ou=people", uid={0}表示过滤uid属性

user-search-base: 指定从哪个分支开始查找用户,如user-search-base="ou=people",默认从root开始

user-search-filter: 用户过滤规则,如user-search-filter="(uid={0})" ,与user-dn-pattern类似,使用一个即可

group-search-base: 指定从哪个分支开始查找用户用户组,如group-search-base="ou=groups"

group-search-filter: 用户组过滤规则,如group-search-filter="(uniqueMember={0})"表示使用uniqueMember属性过滤

group-role-attribute: 用户组中Role映射属性,默认为cn,验证时会自动增加role前缀

role-prefix : role前缀, 默认为"ROLE_",即role-prefix="ROLE_"


通过以上基本的配置即可支持LDAP认证授权。


三、高级配置

Spring强大的功能之一就是在提供简便配置的同时支持自己定制,而定制最基础的就是bean配置,通过替换bean的实现可以替换掉spring原先提供的默认实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
< bean  id = "contextSource"
         class = "org.springframework.security.ldap.DefaultSpringSecurityContextSource" >
   < constructor-arg  value = "ldap://monkeymachine:389/dc=springframework,dc=org" />
   < property  name = "userDn"  value = "cn=manager,dc=springframework,dc=org" />
   < property  name = "password"  value = "password" />
</ bean >
< bean  id = "ldapAuthProvider"
     class = "org.springframework.security.ldap.authentication.LdapAuthenticationProvider" >
  < constructor-arg >
    < bean  class = "org.springframework.security.ldap.authentication.BindAuthenticator" >
      < constructor-arg  ref = "contextSource" />
      < property  name = "userDnPatterns" >
        < list >< value >uid={0},ou=people</ value ></ list >
      </ property >
    </ bean >
  </ constructor-arg >
  < constructor-arg >
    < bean
      class = "org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator" >
      < constructor-arg  ref = "contextSource" />
      < constructor-arg  value = "ou=groups" />
      < property  name = "groupRoleAttribute"  value = "ou" />
    </ bean >
  </ constructor-arg >
</ bean >
< bean  id = "userSearch"
     class = "org.springframework.security.ldap.search.FilterBasedLdapUserSearch" >
   < constructor-arg  index = "0"  value = "" />
   < constructor-arg  index = "1"  value = "(uid={0})" />
   < constructor-arg  index = "2"  ref = "contextSource"  />
</ bean >


Spring已经提供对LDAP认证的强大支持,一般情况下不需要自己定制。




     本文转自sarchitect 51CTO博客,原文链接:http://blog.51cto.com/stevex/1362706,如需转载请自行联系原作者




相关文章
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
2636 5
|
10月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
安全 Java Apache
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
706 0
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
610 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
2105 3
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
361 20
|
Java 应用服务中间件 Scala
Spring Boot 实现通用 Auth 认证的 4 种方式
本文介绍了在Spring Boot中实现通用Auth的四种方式:传统AOP、拦截器(Interceptor)、参数解析器(ArgumentResolver)和过滤器(Filter)。每种方式都通过实例代码详细说明了实现步骤,并总结了它们的执行顺序。首先,Filter作为Servlet规范的一部分最先被调用;接着是Interceptor,它可以在Controller方法执行前后进行处理;然后是ArgumentResolver,在参数传递给Controller之前解析并验证参数
416 1
|
安全 Java 数据安全/隐私保护
基于内存认证的 Spring Security
通过本文的介绍,希望您能够深入理解基于内存认证的Spring Security配置与使用方法,并能够在实际开发中灵活应用这一技术,提升应用的安全性和用户体验。
352 9
|
JSON 安全 算法
Spring Boot 应用如何实现 JWT 认证?
Spring Boot 应用如何实现 JWT 认证?
2087 8
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
680 9