【发布时间】:2017-10-24 17:15:07
【问题描述】:
我想配置我的 spring 拦截器,使得每个请求都应该被调用。
- 我在 API-GATEWAY 中使用拦截器 (Spring-Boot)
- 我正在从 API-GATEWAY 调用其他微服务。
- 从 API-GATEWAY 对其他微服务的调用工作正常。
- 我调用的其他服务是 Node.js 服务,另一方面,我的 API-Gateway 处于 Spring Boot 中。
- 所有服务(Node.js + Spring-Boot)都在 Docker 容器上运行。
我在拦截器中遇到问题。我想以这样一种方式对其进行配置,即每个请求都应该被称为preHandle() 并执行我在其中编写的操作。
我注意到一个问题,我想在这里提一下。
如果我正在调用的服务已停止(未运行),则 Interceptor 正在正常工作并给我一个响应,例如 somename-service not found。 如果此时正在运行相同的服务,则不执行拦截器。
这是我的代码 sn-p
@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);
}
【问题讨论】:
-
你的 TokenValidateInterceptor 是什么样的?
-
我已经更新了我的问题并放入了 TokenValidateInterceptor 代码。
标签: java node.js docker spring-boot docker-compose