243 lines
5.9 KiB
Markdown
243 lines
5.9 KiB
Markdown
# LDAP管理系统
|
||
|
||
一个基于Spring Boot的LDAP目录管理系统,提供用户和组的完整管理功能。
|
||
|
||
## 功能特性
|
||
|
||
### 用户管理
|
||
- ✅ 创建、查看、编辑、删除用户
|
||
- ✅ 用户密码管理
|
||
- ✅ 用户信息搜索
|
||
- ✅ 批量用户操作
|
||
- ✅ 用户统计信息
|
||
|
||
### 组管理
|
||
- ✅ 创建、查看、编辑、删除组
|
||
- ✅ 组成员管理(添加/移除用户)
|
||
- ✅ 批量成员操作
|
||
- ✅ 组搜索功能
|
||
- ✅ 组统计信息
|
||
|
||
### Web界面
|
||
- ✅ 现代化的响应式Web UI
|
||
- ✅ 用户友好的操作界面
|
||
- ✅ 实时数据更新
|
||
- ✅ 错误处理和用户反馈
|
||
|
||
### REST API
|
||
- ✅ 完整的RESTful API接口
|
||
- ✅ 统一的响应格式
|
||
- ✅ 全局异常处理
|
||
- ✅ API文档和示例
|
||
|
||
## 技术栈
|
||
|
||
- **后端框架**: Spring Boot 3.2.0
|
||
- **LDAP集成**: Spring LDAP, Spring Security LDAP
|
||
- **Web框架**: Spring MVC
|
||
- **模板引擎**: Thymeleaf
|
||
- **前端**: Bootstrap 5 + Font Awesome
|
||
- **构建工具**: Maven
|
||
- **Java版本**: 17
|
||
|
||
## 快速开始
|
||
|
||
### 1. 环境要求
|
||
|
||
- Java 17+
|
||
- Maven 3.6+
|
||
- LDAP服务器(如OpenLDAP、Active Directory等)
|
||
|
||
### 2. 配置LDAP连接
|
||
|
||
编辑 `src/main/resources/application.yml` 文件:
|
||
|
||
```yaml
|
||
spring:
|
||
ldap:
|
||
urls: ldap://localhost:389 # 您的LDAP服务器地址
|
||
base: dc=example,dc=com # LDAP基础DN
|
||
username: cn=admin,dc=example,dc=com # 管理员DN
|
||
password: admin # 管理员密码
|
||
|
||
ldap:
|
||
config:
|
||
user-search-base: ou=people # 用户搜索基础
|
||
group-search-base: ou=groups # 组搜索基础
|
||
# 其他LDAP配置...
|
||
```
|
||
|
||
### 3. 构建和运行
|
||
|
||
```bash
|
||
# 克隆项目
|
||
git clone <repository-url>
|
||
cd ldap-demo
|
||
|
||
# 构建项目
|
||
mvn clean compile
|
||
|
||
# 运行项目
|
||
mvn spring-boot:run
|
||
```
|
||
|
||
### 4. 访问应用
|
||
|
||
- **Web界面**: http://localhost:8080/ldap-demo/web/
|
||
- **API接口**: http://localhost:8080/ldap-demo/api/
|
||
|
||
## API接口文档
|
||
|
||
### 用户管理 API
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/api/users` | 获取所有用户 |
|
||
| GET | `/api/users/{username}` | 获取指定用户 |
|
||
| POST | `/api/users` | 创建新用户 |
|
||
| PUT | `/api/users/{username}` | 更新用户信息 |
|
||
| DELETE | `/api/users/{username}` | 删除用户 |
|
||
| GET | `/api/users/search?keyword={keyword}` | 搜索用户 |
|
||
| PUT | `/api/users/{username}/password` | 更新用户密码 |
|
||
| POST | `/api/users/{username}/validate` | 验证用户密码 |
|
||
| POST | `/api/users/batch` | 批量创建用户 |
|
||
| GET | `/api/users/statistics` | 获取用户统计 |
|
||
|
||
### 组管理 API
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/api/groups` | 获取所有组 |
|
||
| GET | `/api/groups/{groupName}` | 获取指定组 |
|
||
| POST | `/api/groups` | 创建新组 |
|
||
| PUT | `/api/groups/{groupName}` | 更新组信息 |
|
||
| DELETE | `/api/groups/{groupName}` | 删除组 |
|
||
| GET | `/api/groups/search?keyword={keyword}` | 搜索组 |
|
||
| POST | `/api/groups/{groupName}/members/{username}` | 添加用户到组 |
|
||
| DELETE | `/api/groups/{groupName}/members/{username}` | 从组中移除用户 |
|
||
| GET | `/api/groups/{groupName}/members` | 获取组成员 |
|
||
| GET | `/api/groups/user/{username}` | 获取用户所属组 |
|
||
| POST | `/api/groups/{groupName}/members/batch` | 批量添加用户到组 |
|
||
| DELETE | `/api/groups/{groupName}/members/batch` | 批量从组中移除用户 |
|
||
| GET | `/api/groups/statistics` | 获取组统计 |
|
||
|
||
### API请求示例
|
||
|
||
#### 创建用户
|
||
```bash
|
||
curl -X POST http://localhost:8080/ldap-demo/api/users \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"username": "john.doe",
|
||
"password": "password123",
|
||
"commonName": "John Doe",
|
||
"surname": "Doe",
|
||
"givenName": "John",
|
||
"email": "john.doe@example.com",
|
||
"department": "IT",
|
||
"title": "Software Engineer"
|
||
}'
|
||
```
|
||
|
||
#### 创建组
|
||
```bash
|
||
curl -X POST http://localhost:8080/ldap-demo/api/groups \
|
||
-H "Content-Type: application/json" \
|
||
-d '{
|
||
"name": "developers",
|
||
"description": "Software Development Team",
|
||
"category": "department"
|
||
}'
|
||
```
|
||
|
||
#### 添加用户到组
|
||
```bash
|
||
curl -X POST http://localhost:8080/ldap-demo/api/groups/developers/members/john.doe
|
||
```
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
src/
|
||
├── main/
|
||
│ ├── java/com/example/ldap/
|
||
│ │ ├── config/ # 配置类
|
||
│ │ ├── controller/ # 控制器
|
||
│ │ ├── dto/ # 数据传输对象
|
||
│ │ ├── entity/ # 实体类
|
||
│ │ ├── exception/ # 异常处理
|
||
│ │ └── service/ # 服务层
|
||
│ └── resources/
|
||
│ ├── templates/ # Thymeleaf模板
|
||
│ └── application.yml # 配置文件
|
||
└── test/ # 测试代码
|
||
```
|
||
|
||
## 自定义配置
|
||
|
||
### LDAP对象类配置
|
||
|
||
如果您的LDAP服务器使用不同的对象类,可以在配置文件中修改:
|
||
|
||
```yaml
|
||
ldap:
|
||
config:
|
||
user-object-class: inetOrgPerson # 用户对象类
|
||
group-object-class: groupOfNames # 组对象类
|
||
```
|
||
|
||
### 属性映射配置
|
||
|
||
可以根据您的LDAP架构调整属性映射:
|
||
|
||
```yaml
|
||
ldap:
|
||
config:
|
||
group-member-attribute: member # 组成员属性
|
||
group-role-attribute: cn # 组角色属性
|
||
```
|
||
|
||
## 安全考虑
|
||
|
||
1. **密码加密**: 用户密码使用BCrypt加密存储
|
||
2. **LDAP连接**: 支持LDAP连接池配置
|
||
3. **API安全**: 可以集成Spring Security进行API认证
|
||
4. **输入验证**: 所有输入都经过验证和清理
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **连接LDAP失败**
|
||
- 检查LDAP服务器地址和端口
|
||
- 验证管理员凭据
|
||
- 确认网络连接
|
||
|
||
2. **用户创建失败**
|
||
- 检查用户DN格式
|
||
- 验证必填字段
|
||
- 确认LDAP权限
|
||
|
||
3. **组管理错误**
|
||
- 验证组对象类配置
|
||
- 检查成员属性设置
|
||
|
||
### 日志配置
|
||
|
||
在 `application.yml` 中启用详细日志:
|
||
|
||
```yaml
|
||
logging:
|
||
level:
|
||
com.example.ldap: DEBUG
|
||
org.springframework.ldap: DEBUG
|
||
```
|
||
|
||
## 贡献
|
||
|
||
欢迎提交问题和功能请求!
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证。
|