2014-02-24 221 views
0

我有以下类@PreAuthorize儿童类

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被应用于米,但不是为N,但它应该是在类级别指定@PreAuthorize。 还是我错过了沉重的打击?

回答

0

如果您对此有更多想法,那么@PreAuthorize对您的父代重写方法不起作用是非常有意义的。对于整个班级您都有此注释,并将其应用于所有公开方法,在此情况下为ACotroller.m()。根据Spring,你的方法已经被验证。你可以在m()而不是super.m()中调用,但在其他bean中定义的方法相同。拥有@PreAuthorize并不意味着你的方法的调用也应该被验证。为了理解这是如何工作的详细信息,您可以看到PrePostAnnotationSecurityMetadataSource.getAttributes()方法。 现在要回答你的问题 - 你必须使用@PreAuthorize注解基础控制器类来保证它的方法安全。