gpt4 book ai didi

java - 子类上的@PreAuthorize

转载 作者:行者123 更新时间:2023-12-01 13:21:43 26 4
gpt4 key购买 nike

我有以下类(class)

public abstract class BaseCotroller {

@RequestMapping("/m")
public String m() {
...
}

@RequestMapping("/n")
public String n() {
...
}
}

@PreAuthorize("hasRole('ROLE_ADMIN')")
@RequestMapping("/a")
public class ACotroller extends BaseController {
@PreAuthorize("hasRole('ROLE_ADMIN')")
@Override
public String m() {
return super.m();
}
}

@PreAuthorize 应用于 m,但不适用于 n,尽管它应该在类级别指定 @PreAuthorize。或者我错过了什么?

最佳答案

如果您对此想得更多一点,@PreAuthorize 不在您的父重写方法上工作是完全有道理的。您为整个类添加了此注释,并将其应用于其所有公共(public)方法,在本例中为 ACotroller.m()。根据 Spring 的说法,你的方法已经过验证。同样,您可以在 m() 中调用,而不是在 super.m() 中调用,而是在其他 bean 中定义的方法。使用 @PreAuthorize 并不意味着来自您的方法的调用也应该得到验证。为了详细了解其工作原理,您可以查看 PrePostAnnotationSecurityMetadataSource.getAttributes() 方法。

现在回答您的问题 - 您必须使用 @PreAuthorize 注释基本 Controller 类以确保其方法的安全。

关于java - 子类上的@PreAuthorize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21976897/

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