我有以下类(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/