被调用的方法未获得Spring安全授权

时间:2015-03-15 13:49:21

标签: java spring

我在我的MovieService中使用了Spring security和我的2种方法 -

@PreAuthorize("hasRole('ROLE_DIRECTOR')")
public Map<String, Movie> getAllMovies() {
.......
.......
}

另一种方法是 -

public Movie getMovieByMovieCode(String movieCode) {
        Map<String, Movie> movies = getAllMovies();
        Movie movie = movies.get(movieCode);
        return movie;
}

如代码所示,我在getAllMovies()方法中调用getMovieByMovieCode()方法。因此,如果执行 NOT 的用户具有ROLE_DIRECTOR角色,则会尝试访问getMovieByMovieCode()方法,并且在此方法中,还会访问getAllMovies()方法。

但预期的行为是该用户不应该访问getAllMovies()方法,因为该用户没有角色ROLE_DIRECTOR。

我该如何实现这种行为?我是否需要在过滤器映射中使用<dispatcher>

1 个答案:

答案 0 :(得分:0)

使用注释的Spring安全授权是使用Spring AOP代理实现的。除其他外,这意味着无论何时在当前对象上调用方法,都要引用对象本身,而不是代理。这就是未进行身份验证的原因。简单的解决方法是使用@PreAuthorize注释来注释getMovieByMovieCode。

以下是对AOP代理的一些有用的阅读:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-understanding-aop-proxies