我正在尝试解决这个问题:如何通过REST控制器用Spring(引导)重写URL?通过创建某种类型的“过滤器”来应用于每个传入的HTTP请求。
这个问题包含了一些答案,比如这个问题:Spring Boot添加了Http请求拦截器,但接口HandlerInterceptor
处理的是Javax'HttpServletRequest
和HttpServletResponse
,它们不如Spring引入的新类实用,即ServerWebExchange
(请参阅下面代码中setLocation()
)出现在一个名称听起来很有前途的接口org.springframework.web.server.webfilter
:
所以我的结尾是这样的:
@Component
public class LegacyRestRedirectWebFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
URI origin = exchange.getRequest().getURI();
String path = origin.getPath();
if (path.startsWith("/api/")) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
URI location = UriComponentsBuilder.fromUri(origin).replacePath(path.replaceFirst("/api/", "/rest/")).build().toUri();
response.getHeaders().setLocation(location);
}
return chain.filter(exchange);
}
}
...就像人们在做类似的事情一样:
问题是:我不是在“webflux”上下文中(与上面的问题相反),因为:
>
当类路径中有spring-boot-starter-web依赖项(但没有确定答案)时,反应式Webfilter无法工作;标记的副本:don't spring-boot-starter-web和spring-boot-starter-webflux一起工作吗?
具有传统Web安全性的Spring WebFlux(我的pom.xml
中有“传统”spring-boot-starter-security
依赖项,加上一个扩展WebSecurityConfigurerAdapter
的@configuration
类-但不愿意将其迁移到...顺便说一下?)
我也不明白为什么我需要在WebFlux上下文中,因为org.springframework.web.server.webfilter
既不处理reactive
也不处理WebFlux
?..还是真的?这在Javadoc中不是很清楚。
事实上,我没有在非WebFlux上下文中工作webfilter
,但我可以成功实现这样的过滤器,它既实现了javax.servlet.filter
(非反应性),又实现了org.springframework.web.server.webfilter
(反应性)。
下面是我对另一个相关问题的回答:https://stackoverflow.com/A/63780659/666414
我遇到的问题是filter方法永远不会执行,并且上下文也没有设置。我已经确认Webfilter是在启动时加载的。还有什么需要让过滤器工作吗?
我想实现一个WebFilter,它读取传入请求的特定头,用这个头的值调用一个GET请求到另一个反应RESTendpoint,然后用GET响应的值修改原始请求。 我想在WebFilter中实现这一点,因为我不想将此函数调用添加到我的中的每个函数中。 目前我有这个: 这显然现在不起作用。我的网络客户端正在返回单声道,所以我不能在我的调用中直接使用它,因为这需要一个字符串。出于显而易见的原因,我也不能真
我确实看到字符串按规则间隔打印(println(it))。 我正在使用以下卷曲:
我正在评估使用Spring Webflux,但我们必须支持期望Application/JSON,而不是Application/Stream+JSON的客户机。我不清楚Spring WebFlux如何在需要Application/JSON的客户机的情况下处理Flux的序列化。 如果一个Flux序列化为application/json,而不是application/stream+json,这是一个阻塞
通过调用直接创建通量并在的lambada表达式中使用接收器,与使用提供的接收器有什么区别? 在一个Flux只发出几个事件的最小示例中,我可以 与使用 为了澄清一下:我知道我可以在这里使用,但我的用例实际上是在Spring的和Spring WebFlux之间建立一个桥梁,在这里我想为每个传入的特定资源SSE请求创建一个Flux,然后将事件发布到这个Flux。 另一方面,它有不能处理背压的局限性。因此
问题内容: 我正在评估使用Spring Webflux,但我们必须支持期望使用application / json而不是application / stream + json的客户端。我不清楚在需要application / json的客户端中,Spring WebFlux如何处理序列化Flux。 如果将Flux序列化为application / json而不是application / stre