我想以这样一种方式配置我的spring拦截器,即每次请求都应该调用它.
>我在API-GATEWAY中使用拦截器(Spring-Boot)
>从API-GATEWAY我打电话给其他微服务.
>来自API-GATEWAY的其他微服务的调用工作正常.
>我调用的其他服务是Node.js服务,另一方面,我的API-Gateway处于弹簧启动状态.
>所有服务(Node.js Spring-Boot)都在Docker Container上运行.
我在Interceptor中面临一个问题.我想以这样的方式配置它:每次请求都应该调用preHandle()并执行我在其中编写的操作.
我注意到一个问题,我想在这里提一下.
如果我正在调用的服务已停止(未运行),Interceptor正在正常工作,并给我一个响应,如somename-service not found.
如果此时正在运行相同的服务,则不会执行Interceptor.
这是我的代码片段
@EnableEurekaClient
@SpringBootApplication
@EnableZuulProxy
@Configuration
public class Application extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
@Autowired
private TokenValidateInterceptor tokenValidateInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(tokenValidateInterceptor).addPathPatterns("/**");
}
拦截器
@Component
public class TokenValidateInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) {
LOG.info("#### Starting TokenValidateInterceptor.preHandle ####");
String apiKey = null;
try {
apiKey = request.getHeader("apikey");
LOG.info("The request come with apikey ======" + apiKey);
LOG.info("Actual apikey ======" + azureApikey);
}