java - 子类上的@PreAuthorize

标签 java spring spring-mvc spring-security

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

相关文章:

java - 无法使用 Jackson 创建内部类列表

Spring 规范 - 谓词的结合

java - Oracle 序列可以为空吗?

java - 是否可以在 log4j 中为堆栈跟踪的每一行添加前缀?

java - 我们如何为 android 中的 EditText 定义最小和最大自定义值之间的范围,例如 85 和 110

java - 如果自动提交为真,@Transactional 注释是否有效?

java - Java中重定向到隐藏的url

java - spring-mvc 中未调用 Controller

java - 基本 Spring 应用程序的全局异常处理程序

java - 如何使用 Spring CrudRepository 忽略表上的关系