Java 将LdapUser和AppUserModel组合以创建全局用户

Java 将LdapUser和AppUserModel组合以创建全局用户,java,structure,Java,Structure,我必须为我的企业制作一个应用程序,通过Active Directory(ldap)提供身份验证。 我的应用程序可以包含没有ldap帐户的用户(临时用户,如临时用户),因此我们可以在我的应用程序数据库中创建自定义用户 LdapUser.java UserModel.java 所以,使用ldap的用户在数据库中不会有密码,而其他用户会 当有人试图连接到我的应用程序时,我首先从ldap检索LdapUser对象。如果用户不存在,我将按用户名/密码加载UserModel。如果用户存在,我将按用户名加载 编

我必须为我的企业制作一个应用程序,通过Active Directory(ldap)提供身份验证。 我的应用程序可以包含没有ldap帐户的用户(临时用户,如临时用户),因此我们可以在我的应用程序数据库中创建自定义用户

LdapUser.java

UserModel.java

所以,使用ldap的用户在数据库中不会有密码,而其他用户会

当有人试图连接到我的应用程序时,我首先从ldap检索
LdapUser
对象。如果用户不存在,我将按用户名/密码加载
UserModel
。如果用户存在,我将按用户名加载

编辑:此时,请确保您了解ldapUser在数据库中也有信息。也就是说,ldapUser在数据库中也会有与应用程序相关的信息,而非ldap用户不会有ldapUser类信息(逻辑)

现在我的问题我想知道一种更干净的方法,将
UserModel
LdapUser
结合起来,创建一个
authenticated用户
,它可以有一个可为空的
LdapUser
和所有
UserModel
方法

我首先尝试使用以下模板

@Getter
public final class AuthenticatedUser extends UserModel {
    private final Optional<LdapUser> ldap;

    public static AuthenticatedUser of(@Nullable LdapUser ldapUser, UserModel user) {
        AuthenticatedUser auth = new AuthenticatedUser(ldapUser);
        auth.setId(user.getId());
        auth.setUsername(user.getUsername());
        auth.setPassword(user.getPassword());
        auth.setData(user.getData());
        return auth;
    }

    private AuthenticatedUser(LdapUser ldapUser)
    {
        this.ldap = Optional.ofNullable(ldapUser);
    }
}
@Getter
公共最终类AuthenticatedUser扩展UserModel{
私有最终可选ldap;
的公共静态AuthenticatedUser(@Nullable LdapUser LdapUser,UserModel user){
AuthenticatedUser auth=新的AuthenticatedUser(ldapUser);
auth.setId(user.getId());
auth.setUsername(user.getUsername());
auth.setPassword(user.getPassword());
auth.setData(user.getData());
返回auth;
}
私有身份验证用户(LdapUser LdapUser)
{
this.ldap=Optional.ofNullable(ldapUser);
}
}
我想知道这种方式是否不好,因为对
UserModel
的每次修改都会迫使我更新(@Nullable-usilizateur-ldapUser,User-User)的静态方法
AuthenticatedUser。通过这种方式,我们从第一个实例创建了
UserModel
的第二个实例,我觉得它没有那么干净。你…吗?是否有任何已知的模式,或任何改进的想法

@Entity
@Data
public class UserModel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String username;
    private String password;
    private String data;
}
@Getter
public final class AuthenticatedUser extends UserModel {
    private final Optional<LdapUser> ldap;

    public static AuthenticatedUser of(@Nullable LdapUser ldapUser, UserModel user) {
        AuthenticatedUser auth = new AuthenticatedUser(ldapUser);
        auth.setId(user.getId());
        auth.setUsername(user.getUsername());
        auth.setPassword(user.getPassword());
        auth.setData(user.getData());
        return auth;
    }

    private AuthenticatedUser(LdapUser ldapUser)
    {
        this.ldap = Optional.ofNullable(ldapUser);
    }
}