我在我的应用程序中使用@PreAuthorize
注释注释了一些服务方法。这些注释使用hasAuthority
,hasRole
等,将来可能包含其他有效的构造。
例如:
@PreAuthorize("hasAuthority('Customer.Get')")
public Customer getCustomer(String name);
我想反过来收集所有PreAuthorize
注释中使用的所有权限,例如Customer.Get
等。
PreAuthorize pre = (PreAuthorize) m.getAnnotation(PreAuthorize.class);
String expr = pre.value();
我正在寻找各种各样的东西:
List<HasAuthority> h = SpringXYZ.getHasAuthorities(expr);
并从h.get(0)....
这可能吗?由于我需要在应用程序初始化期间执行此检索,因此当时没有可用的身份验证对象。
任何建议都表示赞赏。
答案 0 :(得分:1)
将在运行时评估此hasAuthority('Customer.Get')
之类的SPeL表达式。在加载时,所有框架必须知道的是应用了@PreAuthorize(以及相应的参数作为字符串)。所有工作都将在运行时由SPeL解析器/运行时环境完成。所以我认为没有帮助类可以帮助你。
如果您想避免解析,请尝试使用@Secured annotations:
@Secured("ROLE_Customer.Get")
public Customer getCustomer(String name);
可以删除 ROLE_
前缀(一些额外的conf):
@Secured("Customer.Get")
public Customer getCustomer(String name);
或JSR-250 @RolesAllowed:
@RolesAllowed("Customer.Get")
public Customer getCustomer(String name);
从安全角度来看,它的灵活性会降低,但对于pasing来说则更为简单。