Spring Security, Spring с JSF проекта отслеживания активности пользователей
Я хотел бы добавить трекер активности пользователя для моего проекта. Проект использует Spring с JSF в качестве представления. Есть идеи, как добавить пружинный AOP в боб JSF?
У меня есть приложение на основе Spring, и в настоящее время я пишу пользовательскую аннотацию для отслеживания действий пользователя, включая время. Я начал с пользовательской аннотации @Timed для отслеживания времени выполнения метода. Ниже приведен фрагмент кода:
Пользовательская аннотация
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}
LoggingAspect
@Aspect
@Component
public class LoggingAspect {
@Around("@annotation(LogExecutionTime)")
public Object logExcecutionTime(ProceedingJoinPoint joinPoint) throws Throwable{
Object value=null;
long currentTimeInMillisec=Instant.now().toEpochMilli();
value=joinPoint.proceed();
Long executionTime=(Instant.now().toEpochMilli())-currentTimeInMillisec;
System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms");
return value;
}
Тестовый основной класс
@Component
public class TestRunAnnotation {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"file:WebContent/WEB-INF/spring-aspect-config.xml");
test();
}
@LogExecutionTime
private static void test() {
for (int i=0;i<5;i++) {
i++;
System.out.println("print value of i"+i);
}
}
}
В конфиге xml
<context:component-scan base-package="...">
</context:component-scan>
<!-- Enable @AspectJ annotation support -->
<aop:aspectj-autoproxy />
<!-- Logging Aspect -->
<bean id="loggingAspect" class="......LoggingAspect" />
<bean id="testRunAnnotation" class="....TestRunAnnotation" />
<aop:aspectj-autoproxy proxy-target-class="true"/>
<tx:annotation-driven/>
</beans>
При выполнении основного метода я не получаю никакого сообщения от перехватчика регистрации, чтобы отслеживать время выполнения.
1 ответ
У меня есть решение, оно работает на меня сейчас.
Проблема в моем коде: в моем коде выше я вызвал аннотацию в закрытом методе, и dint использовал управляемый be an-компонент Spring для вызова этого метода. Я сделал следующие изменения, чтобы он работал,
@Component
public class TestRunAnnotation {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"file:WebContent/WEB-INF/spring-aspect-config.xml");
TestRunAnnotation test=(TestRunAnnotation) context.getBean("testRunAnnotation");
test.test();
}
@LogExecutionTime
public void test() {
for (int i=0;i<6;i++) {
i++;
System.out.println("print value of i"+i);
}
}
}