gpt4 book ai didi

java - 如何配置spring拦截器以在每个请求中调用

转载 作者:IT老高 更新时间:2023-10-28 21:24:11 25 4
gpt4 key购买 nike

我想配置我的 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。如果此时正在运行相同的服务,则不执行拦截器。

这是我的代码片段

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


}

最佳答案

您必须将此拦截器添加到您的调度程序 xml 文件中:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">


<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" p:interceptors-ref="tokenInterceptor" />

<bean id="tokenInterceptor" class="yourpackage.TokenValidateInterceptor" />

</beans>

这里有几个不错的示例:

关于java - 如何配置spring拦截器以在每个请求中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44157039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com