Spring安全数据模型

标签 spring authentication spring-security datamodel

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

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

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

  2. 我使用必要的属性扩展了 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/

相关文章:

java - Spring SseEmitter.complete() 是否应该触发 EventSource 重新连接 - 如何关闭服务器端连接

amazon-web-services - 使用 AWS 认知联合身份设置 Azure AD 和 GSuite

authentication - 如何将 Windows 身份验证与 Identity Server 3 结合使用?

spring-boot - 我是否应该明确发送刷新 token 以获取新的访问 token - JWT

spring-mvc - 自己的Spring OAuth2服务器以及3rdparty OAuth提供程序

java - 具有不同 UsernamePasswordAuthToken 的多个 AuthenticationProvider 可以在没有回退身份验证的情况下对不同的登录表单进行身份验证

java - 如何在两场不同的 war 中构建一个 Spring 框架 Web 应用程序,一场用于前端(jsp),另一场用于业务逻辑?

java - 如何从 . Cucumber-jvm 步骤类中的属性文件

azure - 使用 Connect-AzAccount 保存 ClientId 和 ClientSecret 以向 Azure 进行身份验证的安全方法

java - 已解决 [org.springframework.web.HttpRequestMethodNotSupportedException : Request method 'POST' not supported]