繁体   English   中英

Java拦截器没有被调用

[英]Java interceptor not getting called

我有一个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();
    }
}

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

谢谢

如果您具有springboot应用程序以拦截对控制器的请求,则必须采用 altogethor的另一种方法

拦截器与Java EE托管类结合使用,以允许开发人员结合方法调用或生命周期事件来调用关联目标类上的拦截器方法。 拦截器的常见用途是日志记录,审核和分析。 参考文件

您正在尝试将Java EE注释与spring一起使用,这将无法正常工作。在spring-boot中,您必须注册拦截器,例如

@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并实现以下方法的类。 从Spring DOCS

所有HandlerMapping实现都支持处理程序拦截器,当您要将特定功能应用于某些请求时(例如,检查主体),该拦截器很有用。 拦截器必须使用三种方法从org.springframework.web.servlet包中实现HandlerInterceptor,这三种方法应提供足够的灵活性来执行各种预处理和后处理:

 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");
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM