По вашему требованию вы можете использовать комбинацию user_id и типа токена в качестве ключа и указать AuthenticationToken объект в качестве значения.
Для генерации ключа вы можете добавить user_id и тип токена, как показано ниже:
user_id ==> 10
token_type ==> web / mobile
Итак, ключ будет 10_web / 10_mobile .
Я не очень понимаю, что вы имеете в объекте AuthenticationToken. Если вам нужна какая-либо вещь, связанная с сущностью User, вы можете добавить эту деталь в объект AuthenticationToken при сохранении в Redis
, прикрепив свойство или весь объект User как свойство с аннотацией @Transient
(если у вас нет сущности User связан с объектом AuthenticationToken)
Обновлено: Я добавляю пример отношения сущностей для User
и AuthenticationToken
, это может помочь вам понять, что я пытаюсь сказать.
Пользовательский объект
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
}
Тип токена Enum (для разграничения между веб-токеном и мобильным токеном)
public enum TokenType {
MOBILE, WEB
}
AuthenticationToken Entity
1. Если вы также хотите сохранить ссылку User
и AuthenticationToken
в базе данных, вы можете использовать следующую сущность:
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. Если вы не хотите хранить ссылку User
и AuthenticationToken
в базе данных и предпочитаете, чтобы данные были указаны в токене JWT, то вы можете использовать ниже сущности:
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 токена (один для веб-сайта и один для мобильного) для пользователя, вы можете получить данные по типу пользователя и токена в Redis / Database перед созданием нового токена, а также во время проверки.
Надеюсь, это поможет вам:)