我正在开发一个网站.
前端(SPA/vue.js)<;->;REST后端(Spring Boot 3.2.1,Java 21)
我为授权服务器 Select 了密钥罩IDP,这样就不会从头开始编写注册和授权的定制实现.这是我第一次使用 keys 斗篷.
我使用了spring-addons软件,并根据实例实现了BFF的设计.
前端<;->;Spring Gateway(客户端ouath2)<;->;Spring REST后端(OAuth2资源服务器)
我面临着一个问题,我不知道如何将用户从键盘斗篷绑定到我的Hibernate 实体.
简单的例子:
@Entity(name = "post")
public class Post {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Access(AccessType.PROPERTY)
private Integer id;
// another fields
@Column(name = "content")
private String content;
@Column(name = "author_id", insertable = false, updatable = false)
private Integer authorId; // how to ??? Keycloak user id is GUID...
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private KeycloakUser author; // how to ??? KeycloakUser - example
// constructors / getters / setters omitted
}
问题是我如何将它们的作者分配给我的实体,以便稍后使用JPA可以根据请求提取它们,例如findById
?
Ifound a solution因为我需要维护我的应用程序的用户的单独数据库,有两个实现选项:
-
过滤器,其判断当前授权用户的存在,如果他没有在应用数据库中注册,则注册他;
-
SPI是一个事件系统,可用于拦截新的用户注册事件并将其添加到应用程序的用户数据库中.
到目前为止,这两种 Select 在我个人看来都是可疑的,如果可能的话,我想了解一下解决这种问题的最佳实践,并举例说明.