diff --git a/spring-boot-demo-ldap/README.md b/spring-boot-demo-ldap/README.md
index 95b91c4..1233e20 100644
--- a/spring-boot-demo-ldap/README.md
+++ b/spring-boot-demo-ldap/README.md
@@ -1,6 +1,6 @@
# spring-boot-demo-ldap
-> 此 demo 主要演示了 Spring Boot 如何集成 `spring-boot-starter-data-ldap` 完成对 Ldap 的基本CURD操作, 并给出以登录为实战的api 示例
+> 此 demo 主要演示了 Spring Boot 如何集成 `spring-boot-starter-data-ldap` 完成对 Ldap 的基本 CURD操作, 并给出以登录为实战的 API 示例
## docker openldap 安装步骤
@@ -18,7 +18,7 @@
## pom.xml
-```
+```xml
+```
+
+## application.yml
+```yaml
+spring:
+ ldap:
+ urls: ldap://localhost:389
+ base: dc=example,dc=org
+ username: cn=admin,dc=example,dc=org
+ password: admin
```
## Person.java
> 实体类
> @Entry 注解 映射ldap对象关系
-```
-package com.xkcoding.ldap.entity;
-
-import lombok.Data;
-import org.springframework.ldap.odm.annotations.Attribute;
-import org.springframework.ldap.odm.annotations.DnAttribute;
-import org.springframework.ldap.odm.annotations.Entry;
-import org.springframework.ldap.odm.annotations.Id;
-
-import javax.naming.Name;
-import java.io.Serializable;
-
+```java
/**
* People
*
@@ -158,20 +157,11 @@ public class Person implements Serializable {
*/
private String loginShell;
}
-
```
## PersonRepository.java
> person 数据持久层
-```
-package com.xkcoding.ldap.repository;
-
-import com.xkcoding.ldap.entity.Person;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.stereotype.Repository;
-
-import javax.naming.Name;
-
+```java
/**
* PersonRepository
*
@@ -189,42 +179,12 @@ public interface PersonRepository extends CrudRepository {
* @return com.xkcoding.ldap.entity.Person
*/
Person findByUid(String uid);
-
- /**
- * 查询全部
- * @return
- */
- @Override
- Iterable findAll();
-
- /**
- * 保存
- * @param s
- * @param
- * @return
- */
- @Override
- S save(S s);
-
- /**
- * 删除
- * @param person
- */
- @Override
- void delete(Person person);
}
-
```
## PersonService.java
> 数据操作服务
-```
-package com.xkcoding.ldap.service;
-
-import com.xkcoding.ldap.entity.Person;
-import com.xkcoding.ldap.entity.Result;
-import com.xkcoding.ldap.request.LoginRequest;
-
+```java
/**
* PersonService
*
@@ -236,54 +196,40 @@ public interface PersonService {
/**
* 登录
- * @param request com.xkcoding.ldap.request.LoginRequest
- * @return com.xkcoding.ldap.entity.Result
+ *
+ * @param request {@link LoginRequest}
+ * @return {@link Result}
*/
Result login(LoginRequest request);
/**
* 查询全部
- * @return com.xkcoding.ldap.entity.Result
+ *
+ * @return {@link Result}
*/
Result listAllPerson();
/**
* 保存
- * @param person com.xkcoding.ldap.entity.Person
+ *
+ * @param person {@link Person}
*/
void save(Person person);
/**
* 删除
- * @param person com.xkcoding.ldap.entity.Person
+ *
+ * @param person {@link Person}
*/
void delete(Person person);
-}
+}
```
## PersonServiceImpl.java
> person数据操作服务具体逻辑实现类
-```
-package com.xkcoding.ldap.service.impl;
-
-import com.xkcoding.ldap.entity.Person;
-import com.xkcoding.ldap.entity.Result;
-import com.xkcoding.ldap.exception.ServiceException;
-import com.xkcoding.ldap.repository.PersonRepository;
-import com.xkcoding.ldap.request.LoginRequest;
-import com.xkcoding.ldap.service.PersonService;
-import com.xkcoding.ldap.util.LdapUtils;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
-
-import javax.annotation.Resource;
-import java.security.NoSuchAlgorithmException;
-import java.util.List;
-
+```java
/**
* PersonServiceImpl
*
@@ -293,20 +239,24 @@ import java.util.List;
*/
@Slf4j
@Service
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class PersonServiceImpl implements PersonService {
+ private final PersonRepository personRepository;
- @Resource
- private PersonRepository personRepository;
-
+ /**
+ * 登录
+ *
+ * @param request {@link LoginRequest}
+ * @return {@link Result}
+ */
@Override
public Result login(LoginRequest request) {
-
log.info("IN LDAP auth");
Person user = personRepository.findByUid(request.getUsername());
try {
- if(ObjectUtils.isEmpty(user)) {
+ if (ObjectUtils.isEmpty(user)) {
throw new ServiceException("用户名或密码错误,请重新尝试");
} else {
user.setUserPassword(LdapUtils.asciiToString(user.getUserPassword()));
@@ -322,46 +272,46 @@ public class PersonServiceImpl implements PersonService {
return Result.success(user);
}
+ /**
+ * 查询全部
+ *
+ * @return {@link Result}
+ */
@Override
public Result listAllPerson() {
Iterable personList = personRepository.findAll();
- personList.forEach(person -> {
- person.setUserPassword(LdapUtils.asciiToString(person.getUserPassword()));
- });
+ personList.forEach(person -> person.setUserPassword(LdapUtils.asciiToString(person.getUserPassword())));
return Result.success(personList);
}
+ /**
+ * 保存
+ *
+ * @param person {@link Person}
+ */
@Override
public void save(Person person) {
Person p = personRepository.save(person);
log.info("用户{}保存成功", p.getUid());
}
+ /**
+ * 删除
+ *
+ * @param person {@link Person}
+ */
@Override
public void delete(Person person) {
personRepository.delete(person);
log.info("删除用户{}成功", person.getUid());
}
+
}
-
```
## LdapDemoApplicationTests.java
> 测试
-```
-package com.xkcoding.ldap;
-
-import com.xkcoding.ldap.entity.Person;
-import com.xkcoding.ldap.entity.Result;
-import com.xkcoding.ldap.request.LoginRequest;
-import com.xkcoding.ldap.service.PersonService;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import javax.annotation.Resource;
-
+```java
/**
* LdapDemoApplicationTest
*
@@ -380,6 +330,9 @@ public class LdapDemoApplicationTests {
public void contextLoads() {
}
+ /**
+ * 测试查询单个
+ */
@Test
public void loginTest() {
LoginRequest loginRequest = LoginRequest.builder().username("wangwu").password("123456").build();
@@ -387,12 +340,18 @@ public class LdapDemoApplicationTests {
System.out.println(login);
}
+ /**
+ * 测试查询列表
+ */
@Test
public void listAllPersonTest() {
Result result = personService.listAllPerson();
System.out.println(result);
}
+ /**
+ * 测试保存
+ */
@Test
public void saveTest() {
Person person = new Person();
@@ -413,7 +372,9 @@ public class LdapDemoApplicationTests {
personService.save(person);
}
-
+ /**
+ * 测试删除
+ */
@Test
public void deleteTest() {
Person person = new Person();
@@ -421,8 +382,12 @@ public class LdapDemoApplicationTests {
personService.delete(person);
}
+
}
```
+## 其余代码参见本 demo
+
## 参考
+
spring-data-ldap 官方文档: https://docs.spring.io/spring-data/ldap/docs/2.1.10.RELEASE/reference/html/
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/entity/Result.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/api/Result.java
similarity index 97%
rename from spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/entity/Result.java
rename to spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/api/Result.java
index 00c203e..0e8aa40 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/entity/Result.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/api/Result.java
@@ -1,4 +1,4 @@
-package com.xkcoding.ldap.entity;
+package com.xkcoding.ldap.api;
import lombok.Data;
import org.springframework.lang.Nullable;
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/entity/ResultCode.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/api/ResultCode.java
similarity index 93%
rename from spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/entity/ResultCode.java
rename to spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/api/ResultCode.java
index 4072345..621e875 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/entity/ResultCode.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/api/ResultCode.java
@@ -1,4 +1,4 @@
-package com.xkcoding.ldap.entity;
+package com.xkcoding.ldap.api;
import lombok.AllArgsConstructor;
import lombok.Getter;
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/exception/ServiceException.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/exception/ServiceException.java
index 581c53c..a600b20 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/exception/ServiceException.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/exception/ServiceException.java
@@ -1,6 +1,6 @@
package com.xkcoding.ldap.exception;
-import com.xkcoding.ldap.entity.ResultCode;
+import com.xkcoding.ldap.api.ResultCode;
import lombok.Getter;
/**
@@ -15,7 +15,6 @@ public class ServiceException extends RuntimeException {
@Getter
private int errcode;
- @SuppressWarnings("NullableProblems")
@Getter
private String errmsg;
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/repository/PersonRepository.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/repository/PersonRepository.java
index 8703b17..89799f0 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/repository/PersonRepository.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/repository/PersonRepository.java
@@ -23,27 +23,4 @@ public interface PersonRepository extends CrudRepository {
* @return com.xkcoding.ldap.entity.Person
*/
Person findByUid(String uid);
-
- /**
- * 查询全部
- * @return
- */
- @Override
- Iterable findAll();
-
- /**
- * 保存
- * @param s
- * @param
- * @return
- */
- @Override
- S save(S s);
-
- /**
- * 删除
- * @param person
- */
- @Override
- void delete(Person person);
}
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/PersonService.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/PersonService.java
index 6b31851..bb45632 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/PersonService.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/PersonService.java
@@ -1,7 +1,7 @@
package com.xkcoding.ldap.service;
+import com.xkcoding.ldap.api.Result;
import com.xkcoding.ldap.entity.Person;
-import com.xkcoding.ldap.entity.Result;
import com.xkcoding.ldap.request.LoginRequest;
/**
@@ -15,26 +15,30 @@ public interface PersonService {
/**
* 登录
- * @param request com.xkcoding.ldap.request.LoginRequest
- * @return com.xkcoding.ldap.entity.Result
+ *
+ * @param request {@link LoginRequest}
+ * @return {@link Result}
*/
Result login(LoginRequest request);
/**
* 查询全部
- * @return com.xkcoding.ldap.entity.Result
+ *
+ * @return {@link Result}
*/
Result listAllPerson();
/**
* 保存
- * @param person com.xkcoding.ldap.entity.Person
+ *
+ * @param person {@link Person}
*/
void save(Person person);
/**
* 删除
- * @param person com.xkcoding.ldap.entity.Person
+ *
+ * @param person {@link Person}
*/
void delete(Person person);
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/impl/PersonServiceImpl.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/impl/PersonServiceImpl.java
index 5687f44..363f65e 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/impl/PersonServiceImpl.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/service/impl/PersonServiceImpl.java
@@ -1,20 +1,19 @@
package com.xkcoding.ldap.service.impl;
+import com.xkcoding.ldap.api.Result;
import com.xkcoding.ldap.entity.Person;
-import com.xkcoding.ldap.entity.Result;
import com.xkcoding.ldap.exception.ServiceException;
import com.xkcoding.ldap.repository.PersonRepository;
import com.xkcoding.ldap.request.LoginRequest;
import com.xkcoding.ldap.service.PersonService;
import com.xkcoding.ldap.util.LdapUtils;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
-import org.springframework.util.StringUtils;
-import javax.annotation.Resource;
import java.security.NoSuchAlgorithmException;
-import java.util.List;
/**
* PersonServiceImpl
@@ -25,20 +24,24 @@ import java.util.List;
*/
@Slf4j
@Service
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class PersonServiceImpl implements PersonService {
+ private final PersonRepository personRepository;
- @Resource
- private PersonRepository personRepository;
-
+ /**
+ * 登录
+ *
+ * @param request {@link LoginRequest}
+ * @return {@link Result}
+ */
@Override
public Result login(LoginRequest request) {
-
log.info("IN LDAP auth");
Person user = personRepository.findByUid(request.getUsername());
try {
- if(ObjectUtils.isEmpty(user)) {
+ if (ObjectUtils.isEmpty(user)) {
throw new ServiceException("用户名或密码错误,请重新尝试");
} else {
user.setUserPassword(LdapUtils.asciiToString(user.getUserPassword()));
@@ -54,24 +57,38 @@ public class PersonServiceImpl implements PersonService {
return Result.success(user);
}
+ /**
+ * 查询全部
+ *
+ * @return {@link Result}
+ */
@Override
public Result listAllPerson() {
Iterable personList = personRepository.findAll();
- personList.forEach(person -> {
- person.setUserPassword(LdapUtils.asciiToString(person.getUserPassword()));
- });
+ personList.forEach(person -> person.setUserPassword(LdapUtils.asciiToString(person.getUserPassword())));
return Result.success(personList);
}
+ /**
+ * 保存
+ *
+ * @param person {@link Person}
+ */
@Override
public void save(Person person) {
Person p = personRepository.save(person);
log.info("用户{}保存成功", p.getUid());
}
+ /**
+ * 删除
+ *
+ * @param person {@link Person}
+ */
@Override
public void delete(Person person) {
personRepository.delete(person);
log.info("删除用户{}成功", person.getUid());
}
+
}
diff --git a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/util/LdapUtils.java b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/util/LdapUtils.java
index 645ec71..606a5a8 100644
--- a/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/util/LdapUtils.java
+++ b/spring-boot-demo-ldap/src/main/java/com/xkcoding/ldap/util/LdapUtils.java
@@ -16,54 +16,55 @@ public class LdapUtils {
/**
* 校验密码
- * @param ldappw ldap 加密密码
- * @param inputpw 用户输入
+ *
+ * @param ldapPassword ldap 加密密码
+ * @param inputPassword 用户输入
* @return boolean
- * @throws NoSuchAlgorithmException
+ * @throws NoSuchAlgorithmException 加解密异常
*/
- public static boolean verify(String ldappw, String inputpw)
- throws NoSuchAlgorithmException {
+ public static boolean verify(String ldapPassword, String inputPassword) throws NoSuchAlgorithmException {
// MessageDigest 提供了消息摘要算法,如 MD5 或 SHA,的功能,这里LDAP使用的是SHA-1
MessageDigest md = MessageDigest.getInstance("SHA-1");
// 取出加密字符
- if (ldappw.startsWith("{SSHA}")) {
- ldappw = ldappw.substring(6);
- } else if (ldappw.startsWith("{SHA}")) {
- ldappw = ldappw.substring(5);
+ if (ldapPassword.startsWith("{SSHA}")) {
+ ldapPassword = ldapPassword.substring(6);
+ } else if (ldapPassword.startsWith("{SHA}")) {
+ ldapPassword = ldapPassword.substring(5);
}
// 解码BASE64
- byte[] ldappwbyte = Base64.decode(ldappw);
- byte[] shacode;
+ byte[] ldapPasswordByte = Base64.decode(ldapPassword);
+ byte[] shaCode;
byte[] salt;
// 前20位是SHA-1加密段,20位后是最初加密时的随机明文
- if (ldappwbyte.length <= 20) {
- shacode = ldappwbyte;
+ if (ldapPasswordByte.length <= 20) {
+ shaCode = ldapPasswordByte;
salt = new byte[0];
} else {
- shacode = new byte[20];
- salt = new byte[ldappwbyte.length - 20];
- System.arraycopy(ldappwbyte, 0, shacode, 0, 20);
- System.arraycopy(ldappwbyte, 20, salt, 0, salt.length);
+ shaCode = new byte[20];
+ salt = new byte[ldapPasswordByte.length - 20];
+ System.arraycopy(ldapPasswordByte, 0, shaCode, 0, 20);
+ System.arraycopy(ldapPasswordByte, 20, salt, 0, salt.length);
}
// 把用户输入的密码添加到摘要计算信息
- md.update(inputpw.getBytes());
+ md.update(inputPassword.getBytes());
// 把随机明文添加到摘要计算信息
md.update(salt);
// 按SSHA把当前用户密码进行计算
- byte[] inputpwbyte = md.digest();
+ byte[] inputPasswordByte = md.digest();
// 返回校验结果
- return MessageDigest.isEqual(shacode, inputpwbyte);
+ return MessageDigest.isEqual(shaCode, inputPasswordByte);
}
/**
* Ascii转换为字符串
- * @param value
- * @return
+ *
+ * @param value Ascii串
+ * @return 字符串
*/
public static String asciiToString(String value) {
StringBuilder sbu = new StringBuilder();
diff --git a/spring-boot-demo-ldap/src/test/java/com/xkcoding/ldap/LdapDemoApplicationTests.java b/spring-boot-demo-ldap/src/test/java/com/xkcoding/ldap/LdapDemoApplicationTests.java
index b951777..847e8bb 100644
--- a/spring-boot-demo-ldap/src/test/java/com/xkcoding/ldap/LdapDemoApplicationTests.java
+++ b/spring-boot-demo-ldap/src/test/java/com/xkcoding/ldap/LdapDemoApplicationTests.java
@@ -1,7 +1,7 @@
package com.xkcoding.ldap;
+import com.xkcoding.ldap.api.Result;
import com.xkcoding.ldap.entity.Person;
-import com.xkcoding.ldap.entity.Result;
import com.xkcoding.ldap.request.LoginRequest;
import com.xkcoding.ldap.service.PersonService;
import org.junit.Test;
@@ -29,6 +29,9 @@ public class LdapDemoApplicationTests {
public void contextLoads() {
}
+ /**
+ * 测试查询单个
+ */
@Test
public void loginTest() {
LoginRequest loginRequest = LoginRequest.builder().username("wangwu").password("123456").build();
@@ -36,12 +39,18 @@ public class LdapDemoApplicationTests {
System.out.println(login);
}
+ /**
+ * 测试查询列表
+ */
@Test
public void listAllPersonTest() {
Result result = personService.listAllPerson();
System.out.println(result);
}
+ /**
+ * 测试保存
+ */
@Test
public void saveTest() {
Person person = new Person();
@@ -62,7 +71,9 @@ public class LdapDemoApplicationTests {
personService.save(person);
}
-
+ /**
+ * 测试删除
+ */
@Test
public void deleteTest() {
Person person = new Person();
@@ -71,7 +82,4 @@ public class LdapDemoApplicationTests {
personService.delete(person);
}
-
-
-
}