2014-02-24 222 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註解基礎控制器類來保證它的方法安全。