我有spring bean,其中有两种方法
@Secured({"ROLE_ADMIN"})
public void update(Person person) {
if(person.isActive())
changeData(person);
}
@PreAuthorize("hasPermission(#person,CHANGE_PERSON_FULL)")
public void changeData(Person person) {
...
}
我已经添加了我的自定义MethodSecurityExpressionHandler
。我有设置@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
。@PreAuthorize
当注释在上面时,一切正常update(Person person)
。我需要对 changeData 执行 PreAuthorize。它与代理有关吗?我是否需要使用方法 changeData 创建单独的 bean?是否可以强制弹簧检查嵌套方法的安全性?
当您
changeData()
直接从调用时update()
,您不会通过代理。只有代理调用通过带注释的行为得到增强。您可以将该方法移动到另一个 bean,但您也可以在同一个 bean 中调用它,但通过代理使用如下所示: