gpt4 book ai didi

java - Spring Controller 中嵌套方法的@PreAuthorize

转载 作者:行者123 更新时间:2023-11-30 03:35:09 25 4
gpt4 key购买 nike

我有 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 吗?是否可以强制 spring 检查嵌套方法的安全性?

最佳答案

当您直接从 update() 调用 changeData() 时,您不会通过代理。只有代理调用才能通过带注释的行为得到增强。

您可以将该方法移至另一个 bean,但您也可以在同一个 bean 中调用它,但使用如下所示的代理:

@Secured({"ROLE_ADMIN"})
public void update(Person person) {
if(person.isActive()) {
context.getBean(MyBean.class).changeData(person);
}
}

关于java - Spring Controller 中嵌套方法的@PreAuthorize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com