【发布时间】:2012-01-14 05:05:51
【问题描述】:
我正在使用 spring 的 @Around 注释来提供 DAO 调用的缓存,并使用 spring security 的 @PostFilter 来限制某些记录的查看。但是我担心缓存可能会绕过 PostFilter 并带来安全问题。
我如何知道@PostFilter 和@Around 包裹目标对象的顺序?
【问题讨论】:
标签: spring spring-security aop
我正在使用 spring 的 @Around 注释来提供 DAO 调用的缓存,并使用 spring security 的 @PostFilter 来限制某些记录的查看。但是我担心缓存可能会绕过 PostFilter 并带来安全问题。
我如何知道@PostFilter 和@Around 包裹目标对象的顺序?
【问题讨论】:
标签: spring spring-security aop
您可以通过设置<security:global-method-security> 的order 属性来指定Spring Security 方面的顺序(我猜它默认为零)。
您还可以指定您自己的方面的顺序,如7.2.4.7 Advice ordering 中所述:
最高优先级的通知首先运行“在途中”(因此给定两条之前的通知,具有最高优先级的一条首先运行)。从连接点“退出”时,优先级最高的建议最后运行(因此,给定两条后建议,优先级最高的一条将运行在第二条)。
...
您可以通过指定优先级来控制执行顺序。这是通过在切面类中实现 org.springframework.core.Ordered 接口或使用 Order 注释以普通 Spring 方式完成的。给定两个方面,从 Ordered.getValue()(或注释值)返回较低值的方面具有较高的优先级。
【讨论】: