【发布时间】:2020-05-03 17:07:55
【问题描述】:
我希望能够拦截客户端向我的端点发出的第一个请求,以便能够以 101(已建立 websocket)回答或拒绝它。
有没有我可以使用的拦截器?我尝试注册一个过滤器 bean,但它似乎只是被跳过了,我想是因为我在一个 webflux 应用程序中......
@Bean
public FilterRegistrationBean<ContextFilter> initialFilter() {
FilterRegistrationBean<ContextFilter> registrationBean
= new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(1);
return registrationBean;
}
和
public class MyFilter extends OncePerRequestFilter{
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
log.info("You know, for filtering");
filterChain.doFilter(request, response);
}
【问题讨论】:
-
您不应该使用过滤器来解决此问题,因为 websockets 不是 HTTP,因此过滤器无法拦截,而且您选择的过滤器不是 webflux 过滤器。只是想让你知道。
OncePerRequestFilter未在 webflux 中使用。如果你想在 webflux 中使用 HTTP 过滤器,你必须使用WebFilter类。你可以在这里阅读更多关于它的信息baeldung.com/spring-webflux-filters -
我知道,但我想根据一些标头值阻止初始 http 请求,即包含切换协议请求的请求。从 websocket 上可以不再拦截任何东西
标签: spring-boot spring-webflux rsocket