2013-04-15 2 views
0

스프링 AOP를 사용하여 스프링 보안을 사용할 계획입니다. 그것은 컨트롤러 클래스에 대한 모든 public 메소드에 대해 자체의 포인트 컷을 가질 것입니다. 메소드는 클래스 이름 및 공용 메소드 (아마도 부분 인수 서명)에 의해 선택됩니다.Aspectj와 AOP에서 동일한 조인 포인트와 일치하는 두 포인트 컷에 대한 주문 조언을 보장하는 방법

헤더, 양호한 json, 좋은 json 요청 객체 및 인증을 확인하는 코드를 캡슐화하여 컨트롤러 클래스의 공용 메소드에 삽입하려고합니다. JSON-RPC와 JSON-REST를 둘 다 갖기 때문에 위에 설명 된 공용 메소드에 액세스하는 총 세 개의 Point Cuts가있게됩니다.

스프링 보안은 모든 메소드에 대한 조언을 삽입하고 JSON-RPC 포인트 컷은 해당 컨트롤러 클래스를 처리하며 JSON-REST 포인트 컷은 컨트롤러 클래스를 처리합니다.

두 가지 조언의 작동 순서를 어떻게 보장 할 수 있습니까? 나는 보안 물건을 먼저 실행하고 싶다.

답변

1

당신은 @Order 주석 당신은 이것이 당신의 구조에서 사용할 수있는 방법을 정확하게 지적하는 당신의 AOP 설정을 가지고 방법에 대한 자세한 정보를 제공하지 않은

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

을 사용할 수 있습니다.

주문 인터페이스를 구현 한 다음 xml 구성을 통해 주문을 전달할 수 있습니다. 예 : -

<bean id="xyz" class="com.abc.XYZ"> 
    <property name="order" value="34"/> 
</bean> 
+0

귀하의 링크에서 읽은 것, 즉 주석 기반 포인트 인하입니다. 필자는이를 피하기 위해 프로그래머가 걱정할 필요없이 자동으로 조언을 듣기를 바랍니다. 주석없이 주문하는 방법이 있는지 알고 있습니까? – Dennis

0

답변과 함께 좋은 링크 : aspect ADK 1.5 Notebook

내가 인용하고자하는 또 다른 링크 : answer

는 측면의 우선 순위를 선언하려면, 당신은 특별한 키워드를 사용할 수 있습니다

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

위의 예제에서 aspect1은 aspect2보다 우선하며, 에서 aspectN보다 aspect3보다 우선 순위가 높습니다.

"우선 순위가 있음"은 "전에 실행되었습니다"라는 의미입니다. 일반적으로 가장 높은 실행 우선 순위 인 이 먼저 실행됩니다. 실행 순서는 조언의 유형에 따라 에 달려 있습니다. AspectJ의에서

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 

한 가장 좋은 방법은 그 작업 단순히 다른 측면에 대한 우선 순위를 선언 구성 특수한 측면을 선언하는 것입니다.

예 : 공용 측면 MyAspectsOrdering { 선행 선언 : around1, around2, before3, before4, after5; 우선 순위 선언 : Transactional *, around4; 우선 순위 선언 : *, before2; }