@PreAuthorize关于子类

时间:2014-02-24 00:46:02

标签: java spring spring-mvc spring-security

我有以下课程

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。 还是我错过了声音?

1 个答案:

答案 0 :(得分:0)

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