0

我打算使用 Spring AOP 使用 Spring Security。对于控制器类上的所有公共方法,它将有自己的切入点。这些方法将由类名和公共方法挑选出来,也许是部分参数签名。

我还想封装检查标头、良好 json、良好 json 请求对象和身份验证的代码,并将其插入控制器类的公共方法中。由于我将同时拥有 JSON-RPC 和 JSON-REST,因此访问上述公共方法的共有三个切入点。

Spring Security 将在所有方法上插入建议,JSON-RPC 切入点将处理该控制器类,而 JSON-REST 切入点将处理其控制器类。

如何保证两条建议的运行顺序?我希望安全的东西首先运行。

4

2 回答 2

1

您可以使用@Order注释

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/core/annotation/Order.html

您尚未提供有关如何设置 aop 的更多信息,以准确指出如何在您的结构中使用它。

您可以实现 Ordered 接口,然后通过 xml 配置传递订单,例如 -

<bean id="xyz" class="com.abc.XYZ">
     <property name="order" value="34"/>  
</bean>
于 2013-04-15T04:47:42.120 回答
0

一个很好的答案链接: aspect ADK 1.5 Notebook

我想引用的另一个链接: 回答

要声明方面优先级,可以使用特殊关键字

declare precedence : <Type1Pattern>,<Type2Pattern>…&lt;TypeNPattern>;

在上面的例子中,aspect1 优先于aspect2,aspect2 又优先于aspect3 等等,直到aspectN。

“优先于”,我们的意思是“在之前执行”。通常,最高的方面首先执行。执行顺序还取决于通知的类型。

the aspect with highest precedence kicks in before the lowest precedence aspect for before() advice
the aspect with highest precedence kicks in after the lowest precedence aspect for after() advice
the aspect with highest precedence wraps around the lowest precedence aspect for around() advice

AspectJ 中的一个最佳实践是声明一个特殊方面,其任务只是声明其他方面的优先级。

示例:公共方面 MyAspectsOrdering { 声明优先级:around1, around2, before3, before4, after5; 声明优先级:Transactional*, around4; 声明优先级:*, before2; }

于 2013-04-16T03:32:54.283 回答