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,所有通用安全性表达式都可以在查询中使用。