gpt4 book ai didi

spring-boot - 如何在 Spring Boot 2.0 中使用 Redis 作为数据库映射两个实体之间的关系?

转载 作者:可可西里 更新时间:2023-11-01 10:52:37 26 4
gpt4 key购买 nike

我有两个实体,即 UserAuthenticationToken。我为每个用户生成一个 JWT token ,我想将其存储在 Redis 缓存中以进行 session 管理。我如何映射它,我应该将用户 user_id 作为键并将 token 对象作为值吗?我还将为一个用户设置多个 token (最多 2 个),一个用于网络,一个用于移动设备,因此将 user_id 保留为 key 并不是一个好的解决方案。在 Redis 中映射这个的正确方法是什么?

最佳答案

我觉得,根据您的要求,您可以使用 user_id 和 token 类型 的组合作为键,并将 AuthenticationToken 对象 作为值。

要生成 key ,您可以附加 user_id 和 token 类型,如下所示:

用户 ID ==> 10
token_type ==> 网络/移动

因此 key 将为 10_web/10_mobile

我不太清楚你在 AuthenticationToken 对象中有什么。如果您需要任何与 User 实体相关的东西,您可以在保存在 Redis 中时在 AuthenticationToken 对象中添加该详细信息,方法是附加一个属性或将整个 User 对象作为带有注释的属性 @Transient 到它(如果你没有链接到 AuthenticationToken 对象的用户实体)

更新:我正在为 UserAuthenticationToken 添加示例实体关系,它可以帮助您理解我想说的.

用户实体

import javax.persistence.*;
import java.io.Serializable;

@Entity(name = "user")
public class User implements Serializable {

@Id
@GeneratedValue
private Long userID;

//Getters, Setters and other properties
}

token 类型枚举(区分网络/移动 token )

public enum TokenType {
MOBILE, WEB
}

AuthenticationToken 实体

1. 如果您还想在数据库中存储UserAuthenticationToken 的链接,那么您可以使用以下实体:

import javax.persistence.*;
import java.io.Serializable;

@Entity(name = "authenticationtoken")
public class AuthenticationToken implements Serializable {

@Id
@GeneratedValue
private Long id;

@Column(unique = true)
private String jwtToken;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user", referencedColumnName = "userID")
private User user;

@Column
@Enumerated(EnumType.STRING)
private TokenType tokenType;

// Getters, Setters and other properties

}

2. 如果您不想在数据库中存储UserAuthenticationToken 的链接并且更喜欢要在 JWT token 中获取详细信息,则可以使用以下实体:

import javax.persistence.*;
import java.io.Serializable;

@Entity(name = "authenticationtoken")
public class AuthenticationToken implements Serializable {

@Id
@GeneratedValue
private Long id;

@Column(unique = true)
private String jwtToken;

@Transient
private User user;

@Column
@Enumerated(EnumType.STRING)
private TokenType tokenType;

// Getters, Setters and other properties

}

因此,如果您想为用户维护最多 2 个 token (一个用于网络,一个用于移动),您可以在生成新 token 之前以及在验证时按用户和 token 类型在 Redis/数据库中获取。

希望对你有帮助:)

关于spring-boot - 如何在 Spring Boot 2.0 中使用 Redis 作为数据库映射两个实体之间的关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com