当前位置: 首页 > 知识库问答 >
问题:

如何删除用户和引用该用户的刷新令牌?

余阳秋
2023-03-14
@Entity
@Table( name = "users", 
    uniqueConstraints = { 
        @UniqueConstraint(columnNames = "username"),
        @UniqueConstraint(columnNames = "email") 
    })
    public class User implements Serializable {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;

        @NotBlank
        @Size(max = 20)
        private String username;

        @NotBlank
        @Size(max = 50)
        @Email
        private String email;

        @NotBlank
        @Size(max = 120)
        private String password;

        @ManyToMany(fetch = FetchType.LAZY)
        @JoinTable( name = "user_roles", 
            joinColumns = @JoinColumn(name = "user_id"), 
            inverseJoinColumns = @JoinColumn(name = "role_id"))
        private Set<Role> roles = new HashSet<>();
@Entity(name = "refreshtoken")
public class RefreshToken {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @OneToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;

    @Column(nullable = false, unique = true)
    private String token;

    @Column(nullable = false)
    private Instant expiryDate;

    //getters and setters

如果有人能帮忙,我将不胜感激。

共有1个答案

冯卓
2023-03-14

通过在用户中添加refreshToken,并使用cascadetype.all来建立双向关系。

示例:


@Entity
@Table( name = "users", 
    uniqueConstraints = { 
        @UniqueConstraint(columnNames = "username"),
        @UniqueConstraint(columnNames = "email") 
    })
    public class User implements Serializable {
        ....
        @OneToOne(mappedBy = "user")
        private RefreshToken refreshToken;
        ....
   }

refreshToken实体中:

java prettyprint-override">
@Entity(name = "refreshtoken")
public class RefreshToken {
   
        ....
        @OneToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "user_id", referencedColumnName = "id")
        private User user;
        ....
    }
 类似资料:
  • 我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam

  • 我第一次获取FCM并将其保存到我的用户默认值。现在当用户注销时,我如何再次刷新FCM令牌?我搜索了文档和许多其他问题,但没有找到更好的解决方案。 提前谢谢。

  • 我的webapp使用amazon cognito托管UI进行登录页面。因此,在成功登录后,cognito将用户重定向到我的webapp,我的webapp收到jwt令牌,其中包含id令牌、访问令牌、过期时间等。现在这个令牌有过期时间,我希望在我的令牌过期之前获得新的id令牌,以保持用户会话继续进行。 我已经在amazon cognito sdk上搜索了下面URL上的预认证场景。https://doc

  • 我在我的Google-drive API中有刷新令牌和访问令牌。但是我不想每次用户使用我的API时都请求一个新的访问令牌,因为我存储了我的刷新令牌。如何从刷新令牌中获取新访问令牌

  • groupdel 命令用于删除用户组(群组),此命令基本格式为: [root@localhost ~]#groupdel 组名 通过前面的学习不难猜测出,使用 groupdel 命令删除群组,其实就是删除 /etc/gourp 文件和 /etc/gshadow 文件中有关目标群组的数据信息。 例如,删除前面章节中用 groupadd 命令创建的群组 group1,执行命令如下: [root@loc

  • 在 MySQL 数据库中,可以使用 DROP USER 语句删除用户,也可以直接在 mysql.user 表中删除用户以及相关权限。 1. 使用 DROP USER 语句删除普通用户 使用 DROP USER 语句删除用户的语法格式如下: DROP USER <用户1> [ , <用户2> ]… 其中,用户用来指定需要删除的用户账号。 使用 DROP USER 语句应注意以下几点: DROP US