【问题标题】:Interceptor not getting invoke拦截器没有被调用
【发布时间】:2020-06-14 11:16:48
【问题描述】:

基于一些业务逻辑,我需要在请求到达控制器之前将查询参数添加到请求中。为了实现这一点,我使用了 HandlerInterceptorAdapter 来拦截请求。 我有一个公共库,我在其中定义了一个拦截器,并且依赖项目具有控制器。 拦截器正在注册,但是当我调用任何 api 调用时,它不会被调用。

公共库中的拦截器



@Component
public class RequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, java.lang.Object handler)
            throws ServletException, IOException {
         request.setAttribute("id", "123"); // this would be populated based on logic

        return true;
    }
}

依赖


@Configuration
public class Resolver implements WebMvcConfigurer {

@Autowired
RequestInterceptor interceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor);
    }

}


【问题讨论】:

  • 你的Resolver配置真的在启动时被调用了吗?
  • 是的,它正在被调用。

标签: java spring-boot


【解决方案1】:

您不必注释RequestInterceptor。请从 RequestInterceptor@Autowired 类中删除 @Component 注释从 Resolver 类到此依赖项。 请不要注入,而是通过默认构造函数实例化它。

public class RequestInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, java.lang.Object handler)
            throws ServletException, IOException {
         request.setAttribute("id", "123"); // this would be populated based on logic

        return true;
    }
}

@Configuration
@EnableWebMvc
public class Resolver implements WebMvcConfigurer {


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestInterceptor());
    }

}

【讨论】:

  • 我以前也尝试过,但没有成功。
  • 您是否还包括了@EnableWebMvc 注释,就像我的示例中一样?请同时提供项目的依赖管理。
  • 通过使用@EnableWebMvc,您将失去 Spring Boot 自动配置。
  • 正如@mentallurg 提到的,我不想放松自动配置,因为它在我的项目中扮演着重要的角色。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2020-05-23
相关资源
最近更新 更多