SpringBoot之data操作Apache DS完成对用户操作
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot之data操作Apache DS完成对用户操作相关的知识,希望对你有一定的参考价值。
当前版本:jdk1.8
、apacheds-2.0.0.AM26
1. 声明
当前内容主要为使用SpringBootData方式操作Apache DS,实现对用户的操作
主要内容:
- 手动创建一个组织并添加一个成员
- 使用springbootdata方式对成员进行操作
- 切换不同用户登录
当前pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.3</version>
<relativePath />
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2. 使用Studio进行数据添加操作
这里创建一个ou=software的组织
,然后在该组织中添加成员并设置密码
此时一个名称为:ou=software
的组织就创建好了
接下来就是在下面创建一个用户
开始设置密码
这里密码设置为:123456
此时用户添加完毕
3. 开始使用springbootdata对ldap进行操作
该内容参考:官方文档
配置类:
@Configuration
@EnableLdapRepositories(basePackages = "com.hy.springboot.ldap.dao")
public class AppConfig
@Bean
public ContextSource contextSource()
LdapContextSource ldapContextSource = new LdapContextSource();
//ldapContextSource.setUserDn("uid=admin,ou=system");
//ldapContextSource.setPassword("secret");
ldapContextSource.setUserDn("uid=admin,ou=software,dc=example,dc=com");
ldapContextSource.setPassword("123456");
ldapContextSource.setUrl("ldap://192.168.1.101:10389");
return ldapContextSource;
@Bean
public LdapTemplate ldapTemplate(ContextSource contextSource)
return new LdapTemplate(contextSource);
2.entity层
@Entry(objectClasses = "inetOrgPerson", "organizationalPerson", "person",
"top" , base = "ou=software,dc=example,dc=com")
public final class Person
@Id
private Name dn;
@Attribute(name = "uid")
@DnAttribute(value = "uid", index = 0)
private String loginName;
@Attribute(name = "userPassword")
// @DnAttribute(value = "userPassword")
private String loginPwd;
@Attribute(name = "cn")
private String fullName;
@Attribute(name = "sn")
private String firstName;
public String getLoginPwd()
return loginPwd;
public void setLoginPwd(byte[] loginPwd) throws UnsupportedEncodingException
this.loginPwd = new String(loginPwd, "utf-8");
// 省略其他get\\set、toString等方法
这里:@DnAttribute(value = "uid", index = 0)就是在添加的时候回将uid=XXX设置为rdn中的开头部分
(index=0)
密码应该使用字符串写入,但是读取出来的却是byte[]
,会自动加密
3.dao层
@Repository
public interface PersonDao extends LdapRepository<Person>
4.controller层
@RestController
public class PersonController
@Autowired
private PersonDao personDao;
/**
*
* @author hy
* @createTime 2022-02-06 15:14:10
* @description 实现删除用户数据的操作
* @param uid
* @return
* @throws UnsupportedEncodingException
*
*/
@RequestMapping(value = "/deleteById", method = RequestMethod.GET)
public Object deleteById(String uid) throws UnsupportedEncodingException
String model="uid=%s,ou=software,dc=example,dc=com";
String format = String.format(model, uid);
try
personDao.deleteById(new LdapName(format));
return "OK";
catch (InvalidNameException e)
// TODO Auto-generated catch block
e.printStackTrace();
return "ERROR";
@RequestMapping(value = "/add", method = RequestMethod.GET)
public Object add(Person p,String password) throws UnsupportedEncodingException
p.setLoginPwd(password.getBytes("utf-8"));
Person save = personDao.save(p);
return "OK";
@RequestMapping(value = "/findAll", method = RequestMethod.GET)
public Object findAll()
List<Person> findAll = personDao.findAll();
return findAll.toString();
@RequestMapping(value = "/login", method = RequestMethod.GET)
public Object login(String username, String password)
ContainerCriteria containerCriteria = LdapQueryBuilder.query()
.where("uid").is(username)
// 对应密码123456的SSHA 加盐的SHA加密,通过面板获取的
.and("userPassword").is("SSHAM5yGHC2aiR2EETjz0MGC0CCL8kO0IVlV1WnZZw==") ;
boolean loginSuccess =false;
/*
* Iterable<Person> findAll = personDao.findAll(containerCriteria);
* Iterator<Person> iterator = findAll.iterator();
* while(iterator.hasNext()) Person next = iterator.next();
* System.out.println(next);
*/
Optional<Person> findOne = personDao.findOne(containerCriteria);
loginSuccess = findOne.isPresent();
if (loginSuccess)
return "login success!";
return "login failed!";
4. 测试
对于不同的添加的成员之后,就可以切换用户进行操作了
以上是关于SpringBoot之data操作Apache DS完成对用户操作的主要内容,如果未能解决你的问题,请参考以下文章
springboot检索之整合elasticsearch并使用spring-data操作