Camel Rest DSL与jetty组件无法正确填充CORS标题

ubbxdtey  于 2022-12-13  发布在  Apache
关注(0)|答案(1)|浏览(85)

当使用jetty组件作为容器时,我很难弄清楚camelestdsl如何填充CORS响应头。

camel.rest.cors-headers.Access-Control-Allow-Credentials=true
camel.rest.cors-headers.Access-Control-Max-Age=3600
camel.rest.cors-headers.Access-Control-Allow-Methods=GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH
camel.rest.cors-headers.Access-Control-Allow-Headers=Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Accept-Language, Host, Referer, User-Agent, Authorization, x-omit
camel.rest.cors-headers.Access-Control-Allow-Origin=*.example.com,*.example1.com,*.example2.com

但是,它始终返回原点列表,而不是在原点标头中传递的值。
我已经尝试在Jetty组件上启用CORS并编写一个自定义JettyHttpBinding,但是,camel rest仍然以某种方式覆盖了这些值。我期望的结果是,如果原始值在允许的原始值列表中,那么它应该返回Access-Control-Allow-Origin头作为原始值,否则返回一个错误/抛出一个异常。有什么方法可以自定义这个吗?任何帮助都将非常感谢

lndjwyie

lndjwyie1#

我终于能够做到这一点后,得到了一些想法,从以下问题。Add CORSHandler to a camel-jetty component
但是,我必须扩展HandlerWrapper类,而不是AbstractHandler

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.HandlerWrapper;

import javax.servlet.DispatcherType;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CORSHandler extends HandlerWrapper {

    
    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        if (baseRequest.getDispatcherType() == DispatcherType.REQUEST) {
        // Custom code for adding CORS headers - similar to org.eclipse.jetty.servlets.CrossOriginFilter::handle;
        }

        if (this._handler != null) {
            this._handler.handle(target, baseRequest, request, response);
        }

    }

}

相关问题