我需要做这样的事情
String myVar = "myString";
...
@Preauthorize("customMethod(myVar)")
public void myMethod() {
...
}
但是我失败了。我怎样才能做到这一点?它说它无法解决
编辑:我正在解除少数休息服务,有时我必须在他们之间分享信息
@Value("${my-properties}")
String urlIWantToShare;
...
@PreAuthorize("isValid(#myValue,urlIWantToShare)")
@RequestMapping(value = "**/letsCheckSecurityConfig", method = RequestMethod.GET)
public boolean letsCheckSecurityConfig(@RequestHeader(name = "MY-VALUE") String myValue)) {
return true;
}
这个“isValid”自定义安全方法将调用外部服务,该服务对调用者及其信息一无所知。我需要传输一些信息,我需要从不同的来源获取它们
其中一个来源是我的application.properties
EDIT2:我设法做到了这一点
@PreAuthorize("isValid(#myValue, #myProperty)")
@RequestMapping(value = "**/letsCheckSecurityConfig", method = RequestMethod.GET)
public boolean letsCheckSecurityConfig(@RequestHeader(name = "MY-VALUE") String myValue,
@Value("${my-property-from-app-properties}") String myProperty))
..但我不仅要使用实际的静态属性,还要使用运行时静态属性。有什么帮助吗?
答案 0 :(得分:0)
您可以创建不带参数的包装器方法,这些方法将使用参数调用所需的方法。在注释中,您可以使用不带参数的方法
答案 1 :(得分:0)
如果我误解了你想要做的事情,请道歉,但根据我的理解,你试图在运行时根据变量/ app.properties设置注释,这样你就可以读取这个变量然后执行你的类?
如果是这种情况,您不能单独从注释中执行此操作,因为注释无法读取局部变量,也无法在运行时设置。
但是,您可以选择一个包含您感兴趣的“值”的对象,然后从对象中读取值。
如下所示:
<强> POJO 强>
public class testObject{
@test
private String myVar;
private String myValue;
//Getters and Setters
}
获取对象值
public void getFields (Object obj){
Field fields = obj.getClass().getDeclaredFields();
for (Field f : fields){
test fieldAnnotation = f.getAnnotation(test.Class);
if (fieldAnnotation != null){
f.get(obj);
// Do checks based on this
}
}
}
主类
public static void main(String[] args){
//Create object
testObject test = new testObject();
test.setOne("testOne");
test.setTwo("testTwo");
getFields(test);
}
我根据我必须做的事情来获取这些代码 - 但在我的情况下,我不知道我将要传递的对象类型。您只是使用注释来“标记”要检索的字段,然后从对象中读取值。
如果你处于类似的情况,那么你可以在这里看到我的答案:initial answer
如果我误解了这一点,请告诉我,我可以尝试进一步澄清我的答案。