rest之Spring Data Rest with Spring Security之按当前用户查找所有

cloudgamer 阅读:38 2024-05-10 16:29:43 评论:0

是否可以使用 Spring Data Rest 和 Spring Security 返回当前用户相关的实体,使用 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(); 
} 

更多详情是 here .


标签:Spring
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号