spring-security プロジェクトを使用して、OAuth2 サーバーの実装を試しています。https://github.com/SpringSource/spring-security-oauthから git プロジェクトを複製しました。
この例は、文書化されているとおりに機能しています。フローをトレースするために、AOP を使用して既存のコードに関数の開始/終了を追加します。このために、次の変更を行いました。
- クラス「Watcher.java」を追加しました(以下のコード)
pom.xml に AspectJ の依存関係を追加
<dependency> <groupId>aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.5.3</version> </dependency> <dependency> <groupId>aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.5.3</version> </dependency>
プロジェクトのビルドと実行
- ただし、各関数の AspectJ マーカーは表示されません
元のコードをあまり変更せずに、この方法で関数の入口/出口のログを追加することは可能ですか?
Watcher.java:
package org.springframework.security.oauth.examples.sparklr;
import java.util.Arrays;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@Aspect
public class Watcher {
@Pointcut("execution(* *(..))")
public void watch() {
}
@Before("watch()")
public void preWatch(JoinPoint joinPoint) {
if (joinPoint.getArgs().length > 0) {
String[] args = new String[joinPoint.getArgs().length];
System.arraycopy(joinPoint.getArgs(), 0, args, 0,
joinPoint.getArgs().length);
System.out.println("-> " + joinPoint.toShortString()
+ Arrays.toString(joinPoint.getArgs()));
} else {
System.out.println("-> " + joinPoint.toShortString());
}
System.out.println("Args: " + joinPoint.getArgs().length);
}
@AfterReturning("watch()")
public void postWatch(JoinPoint joinPoint) {
System.out.println("<- " + joinPoint.toShortString());
}
}