我目前正在使用 spring-security 库,我问自己以下问题:我应该如何将我的数据库模型与 spring-security 表结合起来?
如您所知,spring-security 需要两个表(用户和权限)来在数据库中定义身份验证管理器。从我的角度来看,现在有两种可能性可以存储我的附加用户信息(例如电子邮件、姓氏、上次登录......)
我可以有一个普通的用户表用于身份验证目的,另一个用于其余部分(通过用户名链接)
我使用必要的属性扩展了 spring-security 的用户表。
从您的角度来看,最好的设计是什么?您有哪些经验?
洛穆
最佳答案
我创建了一个 POJO User
来表示 Spring Security 库所设想的 User 实体,其次我创建了一个 POJO ProfiledUser
来表示特定类型的用户我的应用程序。它被称为 ProfiledUser,因为我需要一个与配置文件关联的用户。当然,类似的方法可以应用于您需要代表的每种类型的用户。基本上,如果您需要不止一种类型的用户,您可以创建类来扩展 User 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
}
如果您只需要表示一种类型的用户,我认为向 User
类添加属性应该可行。然而,我更喜欢将 Spring Security 框架定义的用户抽象概念与我的业务逻辑分开。因此,我建议实现您自己的 SomethingUser
并扩展 User
类。
关于Spring安全数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794144/