Spring Data Integration

Spring Security提供了Spring数据集成,允许在查询中引用当前用户。将用户包括在查询中以支持分页结果不仅有用,而且是必要的,因为之后过滤结果将不会扩展。

38. Spring Data & Spring Security Configuration

要使用这种支持,请提供一个类型为SecurityEvaluationContextExtension的bean。在Java配置中,这看起来像:

1 @Bean
2 public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
3     return new SecurityEvaluationContextExtension();
4 }

xml配置如下:

1 <bean class="org.springframework.security.data.repository.query.SecurityEvaluationContextExtension"/>

39. Security Expressions within @Query

现在可以在您的查询中使用Spring Security了。例如:

1 @Repository
2 public interface MessageRepository extends PagingAndSortingRepository<Message,Long> {
3     @Query("select m from Message m where m.to.id = ?#{ principal?.id }")
4     Page<Message> findInbox(Pageable pageable);
5 }

这将检查 Authentication.getPrincipal().getId() 等于邮件的收件人。请注意,此示例假设您已经将主体自定义为具有id属性的对象。通过公开安全性评估上下文扩展SecurityEvaluationContextExtension bean,所有通用安全性表达式都可以在查询中使用。

posted @ 2020-08-15 20:46  节日快乐  阅读(201)  评论(0编辑  收藏  举报