当前位置: 首页 > 知识库问答 >
问题:

在具有jetty的同一服务器中使用camel创建http和httpsendpoint

邵星河
2023-03-14

我正在尝试在我的一个web服务中创建HTTP和HTTPSendpoint。我想要使用HTTPS的安全endpoint和使用普通HTTP的其他endpoint。

我正在使用下面的代码来做同样的事情。

    public void configure() {
        configureJetty();
        configureHttp4();
        //This works with configuring Jetty
        from("jetty:https://0.0.0.0:8085/sample1/?matchOnUriPrefix=true")
                .to("file://./?fileName=out.csv");
        //This url does not working with the configuring the jetty with configure jetty this works.
        from("jetty:http://0.0.0.0:8084/sample2/?matchOnUriPrefix=true")
                .to("file://./?fileName=out2.csv");
    }

private void configureJetty() {
        KeyStoreParameters ksp = new KeyStoreParameters();
        ksp.setResource("./trustStore.jks");
        ksp.setPassword("someSecretPassword");
        KeyManagersParameters kmp = new KeyManagersParameters();
        kmp.setKeyStore(ksp); kmp.setKeyPassword("someSecretPassword");
        SSLContextParameters scp = new SSLContextParameters();
        scp.setKeyManagers(kmp);
        JettyHttpComponent jettyComponent = getContext().getComponent("jetty", JettyHttpComponent.class);
        jettyComponent.setSslContextParameters(scp);
    }

https在此设置中工作正常,但超文本传输协议endpoint不工作。如果我删除配置Jetty的方法调用,HTTPendpoint就可以工作。如何在同一台服务器中配置两者?我不能使用Spring启动,只能使用普通骆驼组件。

我用示例代码创建了一个github存储库。你可以在这里找到它。示例代码

共有1个答案

鲍国兴
2023-03-14

你可以的

  • 创建jetty组件的两个不同实例,一个用于普通http,另一个用于https
  • 用一个特定的别名(“jetty”和“jettys”)注册它们中的每一个
  • 在endpointURI“from”(“jettys:…”)中使用适当的别名

CDI示例:

@Produces
@ApplicationScoped 
@Named("jetty")
public final JettyHttpComponent createJettyComponent1() {       
    return this.configureJetty(false);
}

@Produces
@ApplicationScoped 
@Named("jettys")
public final JettyHttpComponent createJettyComponent2() {       
    return this.configureJetty(true);
}  

private void configureJetty(boolean ssl) {
   ...
    JettyHttpComponent jettyComponent = new JettyHttpComponent();
    if (ssl) {
        jettyComponent.setSslContextParameters(scp);
    }   
}
 类似资料:
  • 我们在embedded jetty server中部署了一个spring-boot应用程序,监听端口X。现在,我正在通过定义路由将Apache Camel集成到这个现有的应用程序中。目标是将少数restendpoint移动到将被代理到其他服务的骆驼路由。我无法理解以下内容 > 当我使用“jetty:http://localhost:y/myApp”作为路由endpoint之一时。它工作起来没有任何

  • 我想用apache-camel使用Jetty在http://localhost:8080/中并发一个rest服务。但是这段代码不会对API产生任何请求。我是apache-camel的初学者,我想使用不同的微服务。 日志: 此输出不产生LocalHost:8080中API的任何响应,但我认为路由是正确的。我想知道是否有其他方法使用Apache-Camel使用API rest的rest服务。

  • 我想在我的web服务器上运行多个非集群垂直市场。每个verticle由一个单独的进程/命令行启动,并为同一个主机和具有唯一路由的同一个端口创建自己的HTTP服务器(vertx.createHttpServer)。然而,这似乎不起作用,因为在开始一个垂直之后,所有进一步的垂直抛出一个BindException“地址已经在使用中”。 作为Vert. x的新手,我只能想到两种方法来通过这个考试: < l

  • 服务器端(app.js) var app = require('http').createServer(handler) var io = require('socket.io')(app); var fs = require('fs'); app.listen(80); function handler (req, res) { fs.readFile(__dirname + '/ind

  • 我们有许多Jetty超文本传输协议服务器,都位于不同的防火墙后面。超文本传输协议服务器位于客户站点(不受我们的控制)。在这些站点的防火墙中打开端口不是一个选项。目前,这些服务器仅提供JSON文档以响应REST请求。 我们有Web客户端需要根据URL参数或标头值与给定的超文本传输协议服务器交互。 这似乎是一种简单的代理服务器情况——除了防火墙。 我目前正在尝试的方法是: 有一个集中式代理服务器(也基

  • 我使用netbean创建了一个restful Web服务,使用jpa从数据库创建了一个实体类,从实体类创建了一个restful Web服务,但是我使用tomcat作为我的服务器,现在下面的post方法不会将下面的json插入数据库,但是当我使用glassfish作为我的服务器时,它是有效的。你认为我缺少任何依赖关系吗?我如何模仿glassfish? 我正试图插入 我有以下依赖项: javaee-a