为什么ContainerResponseFilter不能与Camel Rest组件一起使用?

zsbz8rwp  于 11个月前  发布在  Apache
关注(0)|答案(1)|浏览(85)

我使用Quarkus 2.13Camel 3.18。我设置了rest endpoint,它按预期工作:

restConfiguration()
   .component("platform-http")
   .skipBindingOnErrorCode(false)
   .bindingMode(RestBindingMode.json);

字符串
我确实写了ContainerResponseFilter来修改传出响应的头,但是响应不是通过这个过滤器处理的:

@JBossLog
@Provider
public class CustomContainerResponseFilter implements ContainerResponseFilter {    

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {

        responseContext.getHeaders().add("X-Some-Header", "Hello from Response Filter");
// I want to filter out disallowed-headers
    }
}


过滤器在标准控制器中工作正常,但在platform-http中使用Camel Endpoint时,无法通过ContainerResponseFilter处理响应。

@Path("/hello")
public class HelloController {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String sayHello() {
        return "Hello, Quarkus!";
    }
}


更新:
我的目标是过滤掉disallowed-headers。为此,我创建了我的列表,只想删除不在列表中的标题。

jgzswidk

jgzswidk1#

如果你想设置一个自定义的响应头,那么你可以在你的Camel路由中完成。

public class RestRoutes extends RouteBuilder {
    @Override
    public void configure() {
        rest("/rest")
                .get()
                .to("direct:myRoute");

        from("direct:myRoute")
                .setHeader("my-custom").constant("my-value");
    }
}

字符串
另外,由于platform-http构建在Vert.xWeb上,因此可以使用quarkus-reactive-routes拦截请求并向响应添加自定义头。

@RouteFilter(100)
void myFilter(RoutingContext rc) {
    rc.response().putHeader("my-custom", "my-value");
    rc.next();
}


更多信息可以在这里找到:
https://quarkus.io/guides/reactive-routes#intercepting-http-requests

相关问题