首页 > 解决方案 > 自定义拦截器未注册

问题描述

全部,

我正在尝试使用我在下面粘贴的代码为基于 SOAP 的 Web 服务注册一个自定义拦截器。

在我的日志中,我没有看到任何调用这些类的证据。

我将不胜感激任何人对如何解决此问题的任何想法。

谢谢,鲷鱼爸爸

public class InquiryServiceInterceptor extends HandlerInterceptorAdapter {

     private static Logger rollingFileLogger = LogManager.getLogger(InquiryServiceInterceptor.class);

     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

         rollingFileLogger.debug("Entered preHandle");

         return true;
     }

     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

         rollingFileLogger.debug("Entered postHandle");
     }

     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) throws Exception {

         rollingFileLogger.debug("Entered afterCompletion");

     }

}

@Component
public class InquiryServiceInterceptorAppConfig extends WebMvcConfigurerAdapter {

    private static Logger rollingFileLogger = LogManager.getLogger(InquiryServiceInterceptorAppConfig.class);

    @Autowired
    InquiryServiceInterceptor inquiryServiceInterceptor;

     @Override
     public void addInterceptors(InterceptorRegistry registry) {

         rollingFileLogger.debug("Adding interceptor 'inquiryServiceInterceptor'...");

         registry.addInterceptor(inquiryServiceInterceptor);

     }

}


标签: spring-boot

解决方案


终于找到了解决办法!

1) 将以下内容添加到 spring-ws-servlet.xml 文件中

<!-- Intercept all requests -->
<sws:interceptors>
    <bean class="xxx.xxxxxxx.xxx.xxx.InquiryServiceInterceptor"/>
</sws:interceptors>

请参阅:https : //docs.spring.io/autorepo/docs/spring-ws/2.2.0.RELEASE/reference/htmlsingle/ 5.5.2 拦截请求 - EndpointInterceptor 接口了解更多详情

2)删除尝试通过Java类添加拦截器,(见上文)InquiryServiceInterceptorAppConfig extends WebMvcConfigurerAdapter

3) 更新拦截器类。请查看新版本(注意:实现 EndpointInterceptor)

public class InquiryServiceInterceptor implements EndpointInterceptor  {

     private static Logger rollingFileLogger = LogManager.getLogger(InquiryServiceInterceptor.class);


     @Override
    public boolean handleRequest(MessageContext messageContext, Object endpoint) throws Exception {

         rollingFileLogger.debug("Entered handleRequest");

         return true;
    }

    @Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint) throws Exception {

        rollingFileLogger.debug("Entered handleResponse");

        return false;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint) throws Exception {

        rollingFileLogger.debug("Entered handleFault");

        return false;
    }

    @Override
    public void afterCompletion(MessageContext messageContext, Object endpoint, Exception ex) throws Exception {

        rollingFileLogger.debug("Entered afterCompletion");

    }

}```

推荐阅读