Spring boot 如何从SpEL调用反应bean方法?

Spring boot 如何从SpEL调用反应bean方法?,spring-boot,spring-security,Spring Boot,Spring Security,我有一个这样的豆子: @Configuration class ActionsSecurity(val actionRepository: ActionRepository) { @Bean fun actionsPermissions(): ActionsSecurity { return this } @Suppress("unused") // used in SpEL fun ownsAction(actionId: Long, use

我有一个这样的豆子:

@Configuration
class ActionsSecurity(val actionRepository: ActionRepository) {

  @Bean
  fun actionsPermissions(): ActionsSecurity {
    return this
  }

  @Suppress("unused") // used in SpEL
  fun ownsAction(actionId: Long, user: CurrentUser): Boolean {
    return runBlocking { actionRepository.findById(actionId)?.userId == user.id }
  }

}
它运行一个阻塞DB操作,以查找当前用户是否拥有该操作。它用于服务方法:

@PreAuthorize("@actionsPermissions.ownsAction(#actionId[0], authentication)")
suspend fun delete(actionId: Long)
这正如预期的那样有效。当然,阻止线程不是好主意因此我尝试使
自己的操作
挂起

@Suppress("unused") // used in SpEL
suspend fun ownsAction(actionId: Long, user: CurrentUser): Boolean {
  return actionRepository.findById(actionId)?.userId == user.id
} 
但这在以下方面失败:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method ownsAction(java.lang.Long,com.example.core.CurrentUser) cannot be found on type com.example.actions.ActionsSecurity$$EnhancerBySpringCGLIB$$e99c9096
我知道我可以在SpEL上下文本身上实现一个扩展,但是不能在bean上使用反应式方法感觉很麻烦?我们真的不能吗

更新

不可能,自2017年以来存在一个未决问题: