2009-06-19 2 views
3

다음과 같은 작업을 수행 할 수 있습니까? AOP 주석을 사용하여 봄에 코드를 삽입 할 수 있습니까?

public void doStuff(@RequirePrivilege("foo") User user) { 
    // ... 
} 

다음과 같이 효과적으로 실행합니까?

public void doStuff(User user) { 
    if(!user.hasPrivilege("foo")) 
     throw new UserHasInsufficientPrivileges(); // this is a RuntimeException 
    // ... 
} 

스프링에는 다양한 종류의 AOP 지원이 있지만 가장 좋은 점은 주석을 달아 AOP 코드가 특정 메서드 앞이나 뒤에 실행된다는 것입니다. 나는 inverse를 수행하고 변경되어야하는 코드에 주석을 달고 싶다.

궁극적으로 위의 검사를 메소드 내에서 수행 할 수 있지만 주석을 사용하는 방법은 사용자가 코드와 동기화 된 문서를 보관하지 않고도 특정 권한을 필요로한다는 것을 분명히하는 추가 문서를 제공합니다.

답변

1

어노테이션에서 일치하므로 AspectJ를 사용하여 볼 수있다. 그런 다음 주위면을 사용하여 사용자가이 방법을 사용하기위한 요구 사항을 충족하는지 여부를 결정할 수 있습니다.

스프링을 사용하면 AspectJ를 사용할 수 있습니다. 가능한 경우 런타임에이 작업을 수행하지 말고 컴파일 할 때마다이 aspect를 사용하는 데 비용을 지불 할 이유가 없으므로 제안합니다. 신청. 하지만 실행 시간에해야한다면 그 일을 할 수 있습니다. 가능한 한 컴파일 시간을 사용하려고 노력합니다.

현재 작업에서 AspectJ를 (http://www.manning.com/laddad2/)을보고 할 수 있지만, 거기에서 예입니다 서명 패턴 :

* *(@RequestParam 
(@Sensitive *)) 

설명

*Any method with one parameter marked with the @RequestParam annotations and the parameter’s type is marked with the @Sensitive annotation.* 

void create(@RequestParam 
MedicalRecord mr), assuming 
MedicalRecord carries the 
@Sensitive annotation. 
1

"충분하지 않은 권한"예제는 Spring AOP으로 수행 할 수 있습니다. 스프링 보안이 작동하기 때문입니다. 주위의 조언과 AspectJ로 매우 정교한 일을 할 수있다.

관련 문제