我有以下课程
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。 还是我错过了声音?
答案 0 :(得分:0)
如果您对此有所了解,那么@PreAuthorize不会对您的父重写方法起作用是完全合理的。你有整个类的这个注释,它适用于它的所有公共方法,在这种情况下是ACotroller.m()。根据Spring,您的方法已经过验证。你可以在m()中调用的方式不是super.m(),而是在其他bean中定义的方法。拥有@PreAuthorize并不意味着您的方法的调用也应该被验证。为了了解其工作原理,您可以看到PrePostAnnotationSecurityMetadataSource.getAttributes()方法。 现在回答您的问题 - 您必须使用@PreAuthorize注释基本控制器类以确保其方法安全。