Java перехватчик не вызывается - PullRequest
0 голосов
/ 28 июня 2019

У меня есть загрузочное приложение Spring, и я внедряю и перехватчик для регистрации некоторых данных.Проблема в том, что не вызывается, я попытался:

@Interceptor
public class LoggerInterceptor{

    @AroundInvoke
    public Object collectBasicLoggingInformation(InvocationContext context) throws Exception {
        Logger logger = LoggerFactory.getLogger(context.getClass());
        logger.info("Method Called: " + context.getMethod()
                .getName());
        logger.info("Parameters: " + Arrays.toString(context.getParameters()));
        return context.proceed();
    }
}

А потом я применил к методам или классам, и в обоих из них не работает:

@GetMapping
@Interceptors(LoggerInterceptor.class)
public List getAllFilingNumber(){
    logger.info("This is a test");
    return filingNumberService.findAll();
}

Или

@RestController
@RequestMapping(FilingNumberController.BASE_URL)
@Interceptors(LoggerInterceptor.class)
public class FilingNumberController{

    @GetMapping
    public List getAllFilingNumber(){
        logger.info("This is a test");
        return filingNumberService.findAll();
    }
}

Кто-то знает, что я делаю не так?

Спасибо

1 Ответ

2 голосов
/ 28 июня 2019

Если у вас есть приложение подпружинной загрузки , чтобы перехватить запрос к контроллеру, вы должны использовать другой подход altogethor.

Перехватчики используются вместе с управляемыми классами Java EE для позволяют разработчикам вызывать методы-перехватчики для связанной цели класс, в сочетании с вызовами методов или событиями жизненного цикла. Распространенными видами использования перехватчиков являются регистрация, аудит и профилирование. Справочник Документ

Вы пытаетесь использовать аннотацию Java EE с пружиной, которая не будет работать. При весенней загрузке вам нужно будет зарегистрировать перехватчики как :

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LocaleChangeInterceptor());
        registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");
    }
}

Сам перехватчик должен быть классом, который расширяет HandlerInterceptorAdapter и реализует методы следующим образом. С весны DOCS :

Все реализации HandlerMapping поддерживают перехватчики обработчиков, которые полезны, когда вы хотите применить определенные функции к определенным запросы - например, проверка принципала. Перехватчики должны реализовать HandlerInterceptor из org.springframework.web.servlet пакет с тремя методами, которые должны обеспечить достаточную гибкость делать все виды предварительной обработки и последующей обработки:

preHandle(..): Before the actual handler is executed

postHandle(..): After the handler is executed

afterCompletion(..): After the complete request has finished
@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {

 @Override
 public boolean preHandle(HttpServletRequest request, 
        HttpServletResponse response, Object object) throws Exception {
    System.out.println("we are Intercepting the Request");
    return true;
 }

 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, 
        Object object, ModelAndView model)
        throws Exception {
    System.out.println("request processing "
            + "completed by @RestController");

 }

 @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
        Object object, Exception arg3)
        throws Exception {
    System.out.println("afterCompletion Request Completed");
 }
}
...