1
は、私のような方法で、多くの@RestController
秒を持っている:(カスタムBean-Spelで@PreAuthorizeが有効かどうかをテストするには?
@PreAuthorize("@myBean.myMethod(#param1, #param2)")
public void foo(String param1, Long param2) {}
そしてどこか
@Component
public class MyBean {
public boolean myMethod(String param1, Long param2) {
return importantSecurityCheck();
}
}
それは非常によく、私はリファクタリング後の可能な愚かなバグを回避したい作品をなど理由私の考えは、式が有効かどうかをチェックするテストを書くことでした(例えば、パラメータの型が同じで名前が有効な場合など)。
は、私はこのような何かしようとした:@Test
public void checkSecurityExpressions() {
Map<String, Object> beansWithAnnotation = applicationContext.getBeansWithAnnotation(RestController.class);
beansWithAnnotation.forEach((name, bean) -> {
Method[] methods = AopUtils.getTargetClass(bean).getMethods();
for (Method method : methods) {
PreAuthorize annotation = method.getAnnotation(PreAuthorize.class);
if (annotation != null) {
String securityExpression = annotation.value();
System.out.println(securityExpression);
}
}
});
}
うまく表現を見つけたが、私は(冒頭でさえ@
せずに、セキュリティコンテキストのない)単純な表現で仕事を見つけ、すべてExpressionParser
例。
正確性をチェックするにはどうすればよいですか?それとも、この問題に対するより良い解決策がありますか?