Spring 数据休息 Spring 安全 - 按当前用户查找所有

Spring Data Rest with Spring Security - find all by current user

是否可以使用 Spring Data Rest 和 Spring Security 到 return 当前用户相关实体,使用 findAll() 方法而不在 GET 查询参数中指定此用户?

我唯一的解决方案是将用户作为参数传递,但也许这是从 SpringSecurityContext

获取他的另一种选择
public interface InvoiceRepository extends CrudRepository<Invoice, Long> {
@RestResource
@PreAuthorize("hasRole('ROLE_ADMIN') or user?.username == authentication.name")
List<Invoice> findAllByUser(@Param("user") User user);

您可以使用 SpEL EvaluationContext extension 使安全属性和表达式在 @Query 注释的 SpEL 表达式中可用。这允许您仅获取与当前用户相关的那些业务对象:

interface SecureBusinessObjectRepository extends Repository<BusinessObject, Long> {

    @Query("select o from BusinessObject o where o.owner.emailAddress like ?#{hasRole('ROLE_ADMIN') ? '%' : principal.emailAddress}")
    List<BusinessObject> findBusinessObjectsForCurrentUser();
}

更多详情