Interface TokenRepository

All Superinterfaces:
org.springframework.data.repository.CrudRepository<TokenEntity,Long>, org.springframework.data.jpa.repository.JpaRepository<TokenEntity,Long>, org.springframework.data.jpa.repository.JpaSpecificationExecutor<TokenEntity>, org.springframework.data.repository.ListCrudRepository<TokenEntity,Long>, org.springframework.data.repository.ListPagingAndSortingRepository<TokenEntity,Long>, org.springframework.data.repository.PagingAndSortingRepository<TokenEntity,Long>, org.springframework.data.repository.query.QueryByExampleExecutor<TokenEntity>, org.springframework.data.repository.Repository<TokenEntity,Long>

public interface TokenRepository extends org.springframework.data.jpa.repository.JpaRepository<TokenEntity,Long>, org.springframework.data.jpa.repository.JpaSpecificationExecutor<TokenEntity>
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.springframework.data.jpa.repository.JpaSpecificationExecutor

    org.springframework.data.jpa.repository.JpaSpecificationExecutor.SpecificationFluentQuery<T extends Object>
  • Method Summary

    Modifier and Type
    Method
    Description
     
    通过用户UID、类型、未撤销、未删除和过期时间查询有效令牌
    通过访问令牌查找Token实体
    int
    原子更新 lastActiveAt(仅当超过阈值才更新),避免在高并发鉴权场景下对 detached entity 执行 merge 导致乐观锁异常。

    Methods inherited from interface org.springframework.data.repository.CrudRepository

    count, delete, deleteAll, deleteAll, deleteAllById, deleteById, existsById, findById, save

    Methods inherited from interface org.springframework.data.jpa.repository.JpaRepository

    deleteAllByIdInBatch, deleteAllInBatch, deleteAllInBatch, deleteInBatch, findAll, findAll, flush, getById, getOne, getReferenceById, saveAllAndFlush, saveAndFlush

    Methods inherited from interface org.springframework.data.jpa.repository.JpaSpecificationExecutor

    count, delete, exists, findAll, findAll, findAll, findAll, findBy, findOne

    Methods inherited from interface org.springframework.data.repository.ListCrudRepository

    findAll, findAllById, saveAll

    Methods inherited from interface org.springframework.data.repository.ListPagingAndSortingRepository

    findAll

    Methods inherited from interface org.springframework.data.repository.PagingAndSortingRepository

    findAll

    Methods inherited from interface org.springframework.data.repository.query.QueryByExampleExecutor

    count, exists, findAll, findBy, findOne
  • Method Details

    • findByUid

      Optional<TokenEntity> findByUid(String uid)
    • findFirstByAccessTokenAndRevokedFalseAndDeletedFalse

      Optional<TokenEntity> findFirstByAccessTokenAndRevokedFalseAndDeletedFalse(String accessToken)
      通过访问令牌查找Token实体
      Parameters:
      accessToken - 访问令牌
      Returns:
      Optional<TokenEntity&amp;gt;
    • findByUserUidAndTypeAndRevokedFalseAndDeletedFalseAndExpiresAtAfter

      List<TokenEntity> findByUserUidAndTypeAndRevokedFalseAndDeletedFalseAndExpiresAtAfter(String userUid, String type, ZonedDateTime now)
      通过用户UID、类型、未撤销、未删除和过期时间查询有效令牌
      Parameters:
      userUid - 用户UID
      type - 令牌类型
      now - 当前时间
      Returns:
      有效令牌列表
    • updateLastActiveAtIfDue

      @Transactional @Modifying @Query("update TokenEntity t\n set t.lastActiveAt = :now\n where t.id = :id\n and t.revoked = false\n and t.deleted = false\n and (t.lastActiveAt is null or t.lastActiveAt <= :threshold)\n") int updateLastActiveAtIfDue(@Param("id") Long id, @Param("now") ZonedDateTime now, @Param("threshold") ZonedDateTime threshold)
      原子更新 lastActiveAt(仅当超过阈值才更新),避免在高并发鉴权场景下对 detached entity 执行 merge 导致乐观锁异常。 注意:JPQL bulk update 会绕过 @Version 机制(不会递增 version),这里是刻意为之。