gpt4 book ai didi

java - 如何使用 Spring Boot 嵌入式 ldap 服务器向 LDIF 文件添加条目

转载 作者:行者123 更新时间:2023-12-04 13:42:03 33 4
gpt4 key购买 nike

我使用 unboundid 作为嵌入式 ldap 服务器构建了一个带有 LDAP 身份验证的 Spring Boot REST 应用程序。身份验证基于简单的 LDIF 文件,现在我需要能够向该文件中添加新条目,以便稍后进行身份验证。如何将新条目直接保存到 LDIF?

我曾尝试使用 LdapTemplate 来做到这一点,但它仅适用于应用程序的一个 session (据我了解,LdapTemplate 向某些“内部、单 session ”LDAP 添加了新条目)并且当应用程序停止时,LDIF 文件保持不变。

这是我的 application.properties 文件

#LDAP config
spring.ldap.embedded.base-dn=dc=time-tracking-service,dc=com
spring.ldap.embedded.credential.username=uid=admin
spring.ldap.embedded.credential.password=pass1
spring.ldap.embedded.ldif=classpath:users.ldif
spring.ldap.embedded.validation.enabled=false
spring.ldap.embedded.port=8389
ldap.url=ldap://localhost:8389/

这是我的 入门级

@Entry(
objectClasses = {"inetOrgPerson", "organizationalPerson", "person", "top"}
)
@Data
@NoArgsConstructor
@AllArgsConstructor
public final class LdapPerson{

@Id
private Name dn;

@DnAttribute(value = "uid", index = 1)
private String uid;

@DnAttribute(value = "ou", index = 0)
@Transient
private String group;

@Attribute(name = "cn")
private String fullName;

@Attribute(name = "sn")
private String lastName;

@Attribute(name = "userPassword")
private String password;

public LdapPerson(String uid, String fullName, String lastName, String group, String password) {
this.dn = LdapNameBuilder.newInstance("uid=" + uid + ",ou=" + group).build();
this.uid = uid;
this.fullName = fullName;
this.lastName = lastName;
this.group = group;
this.password = password;
}

还有我的 LdapConfig

@Configuration
@PropertySource("classpath:application.properties")
@EnableLdapRepositories
public class LdapConfig {

@Autowired
private Environment env;

@Bean
public LdapContextSource contextSource() {
LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl(env.getProperty("ldap.url"));
contextSource.setBase(env.getRequiredProperty("spring.ldap.embedded.base-dn"));
contextSource.setUserDn(env.getRequiredProperty("spring.ldap.embedded.credential.username"));
contextSource.setPassword(env.getRequiredProperty("spring.ldap.embedded.credential.password"));
contextSource.afterPropertiesSet();
return contextSource;
}

@Bean
public LdapTemplate ldapTemplate() {
return new LdapTemplate(contextSource());
}
}

我添加条目只是使用

ldapTemplate.create(ldapPerson);

我预计使用 LdapTemplate我将能够向 LDIF 文件添加新条目,但它不起作用,所以我需要帮助解决这个问题。

最佳答案

as I understood, LdapTemplate adds new entry to some "internal, one-session-living" LDAP


有点晚了,但您是对的,Spring 的嵌入式 LDAP 在保存时不会更改 LDIF 文件的内容(并且几乎没有 LDAP 实现) ldapTemplate.create(ldapPerson);只需在上面初始化的内存 LDAP 实例中创建一个新记录。当您终止应用程序时,一切都会丢失。
如果你想持久化数据,你必须集成一个 LDAP implementations .此外 LdapTemplate可通过 org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration 在 Spring Boot 上进行配置

关于java - 如何使用 Spring Boot 嵌入式 ldap 服务器向 LDIF 文件添加条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55725808/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com