Spring Data Rest with Spring Security - 按当前用户查找所有内容
Posted
技术标签:
【中文标题】Spring Data Rest with Spring Security - 按当前用户查找所有内容【英文标题】:Spring Data Rest with Spring Security - find all by current user 【发布时间】:2018-04-10 00:56:48 【问题描述】:是否可以使用 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);
【问题讨论】:
【参考方案1】:您可以使用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。
【讨论】:
@Cepr0 不错的答案,但是在这里我们需要做额外的查询,而且我们没有使用 jpa 存储库的全部功能。有没有什么击球手的方式来添加原则。以上是关于Spring Data Rest with Spring Security - 按当前用户查找所有内容的主要内容,如果未能解决你的问题,请参考以下文章
REST Security with JWT using Java and Spring Security