Spring security 在@Query中使用hasPermission

Spring security 在@Query中使用hasPermission,spring-security,spring-data,spring-data-jpa,spring-el,Spring Security,Spring Data,Spring Data Jpa,Spring El,我试图用一个定制的@Query注释对Spring数据存储库findAll方法进行注释。我想在where子句中使用Spring安全性hasPermission表达式 我已经初始化了SecurityEvaluationContextension bean,以允许在SpEL中使用常见的内置安全表达式 @豆子 公共安全性评估Contextension安全性评估Contextension{ 返回新的SecurityEvaluationContextExtension; } 我正在使用自定义Permissi

我试图用一个定制的@Query注释对Spring数据存储库findAll方法进行注释。我想在where子句中使用Spring安全性hasPermission表达式

我已经初始化了SecurityEvaluationContextension bean,以允许在SpEL中使用常见的内置安全表达式

@豆子 公共安全性评估Contextension安全性评估Contextension{ 返回新的SecurityEvaluationContextExtension; } 我正在使用自定义PermissionEvaluator实现

@查询从{entityName}t中选择t,其中1=?{hasPermissionfilterObject,'read'?1:0} 页面findAllPageable可分页; 我得到以下例外。由于某种原因,似乎无法访问hasPermission。hasRole很好用

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E: Property or field 'filterObject' cannot be found on object of type 'java.lang.Object[]' - maybe not public?
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:226)
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94)
    at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:81)
    at org.springframework.expression.spel.ast.MethodReference.getArguments(MethodReference.java:155)
    at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:85)
    at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:171)
    at org.springframework.expression.spel.ast.Ternary.getValueInternal(Ternary.java:51)
    at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:132)
    at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:297)
    at org.springframework.data.jpa.repository.query.SpelExpressionStringQueryParameterBinder.evaluateExpression(SpelExpressionStringQueryParameterBinder.java:139)

在@Query中的SpEL表达式中使用hasPermission的正确方法是什么?

这里的问题是filterObject实际上是存储库方法返回的页面实例

为了能够使用它,应该做一些类似的事情

@Query("select t from #{#entityName} t where 1=?#{hasPermission(entity, 'read') ? 1 : 0}")
Page<Stream> findAll(Pageable pageable);
其中实体等于查询返回的实例

遗憾的是,目前看来这不可能。我还在找