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