class 的 SpEL 引用实例变量

SpEL reference instance variable of class

我正在为我的 spring 安全预授权注释使用自定义方法,我需要传递一长串权限。我想在外部存储该列表,因为它在几个地方使用,但我可以' 似乎弄清楚如何引用所述列表。它似乎总是以空值出现。

@RestController
@RequestMapping("/example")
public class MyController  {

...constructor/other stuff
public List<String> perms_I_want_to_reference = Arrays.asList("super","long","list")

@PreAuthorizze("@securityService.MyCustomMethod(principal, *this where I want to reference perms*)
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<?>doSomethingTopSecret(){
}

}

我已经尝试 # 并将列表设为静态并使用 T 但到目前为止没有任何效果。

从注释访问您的字段的唯一方法是通过反射。为此,Spring 需要访问 class 的字段。我还没有听说过在计算表达式时获取对当前 class 的引用的方法,但是执行您想要的操作的一种方法是引用 bean 本身并访问字段:

public List<String> perms_I_want_to_reference = Arrays.asList("super","long","list");

@PreAuthorizze("@securityService.MyCustomMethod(principal, @myController.perms_I_want_to_reference)")
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<?>doSomethingTopSecret(){ }