Java拦截器没有被调用

我有一个 Spring boot 应用程序,我正在实施和拦截器以记录一些数据。问题是没有被调用,我试过:


@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();

    }

}

有人知道我做错了什么吗?


白衣染霜花
浏览 135回答 1
1回答

拉丁的传说

如果你有一个 springboot 应用程序来拦截对控制器的请求,你必须采取不同的方法。拦截器与 Java EE 托管类结合使用,以允许开发人员在关联的目标类上调用拦截器方法,并结合方法调用或生命周期事件。拦截器的常见用途是日志记录、审计和分析。参考文档您正在尝试将 Java EE 注释与 spring 一起使用,这是行不通的。在 spring-boot 中,您必须注册拦截器,例如:@Configurationpublic 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 并实现如下方法的类。来自 Spring文档:所有 HandlerMapping 实现都支持处理程序拦截器,当您想要将特定功能应用于某些请求时,这些拦截器很有用——例如,检查主体。拦截器必须使用 org.springframework.web.servlet 包中的三个方法实现 HandlerInterceptor,这三个方法应该提供足够的灵活性来进行各种预处理和后处理:preHandle(..): Before the actual handler is executedpostHandle(..): After the handler is executedafterCompletion(..): After the complete request has finished@Componentpublic 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"); }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java