Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spring安全数据模型_Spring_Authentication_Spring Security_Datamodel - Fatal编程技术网

spring安全数据模型

spring安全数据模型,spring,authentication,spring-security,datamodel,Spring,Authentication,Spring Security,Datamodel,我目前正在使用spring安全库,我问自己以下问题:我应该如何将我的数据库模型与spring安全表结合起来 正如您所知,spring安全性需要两个表(用户和权限)来定义数据库中的身份验证管理器。从我的pov来看,现在有两种可能性可以存储我的附加用户信息(如电子邮件、姓氏、上次登录等) 我可以有一个用于身份验证的普通用户表,另一个用于其余的用户表(通过用户名链接) 我使用必要的属性扩展了spring security的用户表 从你的角度来看,什么是最好的设计?你的经历是什么 Lomu我创建了一个P

我目前正在使用spring安全库,我问自己以下问题:我应该如何将我的数据库模型与spring安全表结合起来

正如您所知,spring安全性需要两个表(用户和权限)来定义数据库中的身份验证管理器。从我的pov来看,现在有两种可能性可以存储我的附加用户信息(如电子邮件、姓氏、上次登录等)

  • 我可以有一个用于身份验证的普通用户表,另一个用于其余的用户表(通过用户名链接)

  • 我使用必要的属性扩展了spring security的用户表

  • 从你的角度来看,什么是最好的设计?你的经历是什么


    Lomu

    我创建了一个POJO
    User
    ,它代表了Spring安全库所设想的用户实体,其次我创建了一个POJO
    ProfiledUser
    来代表我的应用程序的一种特殊类型的用户。它被称为ProfiledUser,因为我需要一个与概要文件关联的用户。当然,类似的方法可以应用于您需要表示的每种类型的用户。基本上,如果您需要不止一种类型的用户,您可以创建类来扩展用户POJO。 在下面的示例中,您可以找到带有JPA注释的类

    @Entity
    @Table(name="USERS")
    @Inheritance(strategy=InheritanceType.JOINED)
    public class User implements UserDetails {
    
        private static final long serialVersionUID = 1L;
        private long id;
        private String username;
        private String password;
        private boolean enabled = true;
        Set<Authority> authorities = new HashSet<Authority>();  
        //...getters & setters
        }
    
    @Entity
    @Table(name="PROFILED_USERS")
    public class ProfiledUser extends User{
    
        private static final long serialVersionUID = 1L;
        //some custom attributes
        private PersonalData personalData;
        private ContactData contactData;
        private AddressData addressData;
        //...getters & setters
    
        }
    
    @实体
    @表(name=“USERS”)
    @继承(策略=InheritanceType.JOINED)
    公共类用户实现UserDetails{
    私有静态最终长serialVersionUID=1L;
    私人长id;
    私有字符串用户名;
    私有字符串密码;
    私有布尔启用=真;
    Set authorities=new HashSet();
    //…接受者和接受者
    }
    @实体
    @表(name=“PROFILED_用户”)
    公共类ProfiledUser扩展了用户{
    私有静态最终长serialVersionUID=1L;
    //一些自定义属性
    个人资料;
    私人联系人数据联系人数据;
    专用地址数据地址数据;
    //…接受者和接受者
    }
    

    如果您只需要表示一种类型的用户,我认为应该向
    user
    类添加属性。但是,我更喜欢将Spring安全框架定义的用户抽象概念与业务逻辑分开。因此,我建议您实现自己的
    SomethingUser
    并扩展
    User
    类。

    人就是人,您应该有一个代表人的类/表†

    用户是一个用户,与人不同(因此是两个不同的词),您应该有一个表示用户的类/表

    一个人可以没有用户而存在吗?对

    没有人的用户能生存吗?不,用户名属于某人

    @Entity
    abstract class Party {
    
      @Id
      Long id;
    
      String name;
    
      @OneToMany
      List<User> usernames = new ArrayList<>();
    }
    
    @Entity
    class Individual extends Party {
      DateTime dateOfBirth;
    }
    
    @Entity
    class User {
    
      @ManyToOne
      Party party;
    
      String username;
    
      String password; //you better use BCrypt/Blowfish hashing!
    
      Boolean enabled = true;
    }
    
    @实体
    抽象阶级政党{
    @身份证
    长id;
    字符串名;
    @独身癖
    List usernames=new ArrayList();
    }
    @实体
    阶级个人延伸党{
    出生日期时间;
    }
    @实体
    类用户{
    @许多酮
    政党;
    字符串用户名;
    字符串密码;//最好使用BCrypt/Blowfish哈希!
    布尔启用=真;
    }
    
    如果每一方只需要一个用户名,则可以使用@OneToOne关系


    †实际上,您应该有一个更抽象的类/表来代表一个合法当事人。

    我创建了派生类来代表不同类型的用户。例如,
    ProfiledUser扩展了User
    。您是否在hibernate中为此创建了一个“User”pojo和一个ProfiledUser pojo?我需要更多的空间,所以我发布了我的答案。