我想以这样一种方式配置我的spring拦截器,即每次请求都应该调用它。
我在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);
}
答案 0 :(得分:0)
您必须将此拦截器添加到调度程序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>
这里有很多不错的样品:
答案 1 :(得分:0)
首先制作一个如下所示的WebMvc Config类
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
通过扩展HandlerInterceptorAdapter创建请求拦截器,即MyInterceptor
public class MyInterceptor extends HandlerInterceptorAdapter{
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
......Write your business logic here...........}
}
有关更多信息,您可以参考here
答案 2 :(得分:0)
在这种情况下,我认为您应该使用HttpFilter,它具有doFilter方法,只需重写该方法并执行您的代码即可。