Spring Security, Spring с JSF проекта отслеживания активности пользователей - PullRequest
0 голосов
/ 27 июня 2018

Я хотел бы добавить трекер активности пользователя для моего проекта. Проект использует 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 config

    <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 Ответ

0 голосов
/ 03 июля 2018

У меня есть решение, оно работает на меня сейчас.

Проблема в моем коде: в приведенном выше коде я вызвал аннотацию в закрытом методе, и dint использовал управляемый bean-компонент 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);
        }

    }

}
...