java - 在 OSGi 内托管 HTTPS 服务器

标签 java jetty osgi embedded-jetty

我对 HTTPS 还很陌生,我正在尝试从 OSGi 包内托管 Jetty HTTPS 服务器。当我在运行配置中将以下属性作为 VM 参数传递时,一切都很好,但由于这对我来说不是一个选项,因此我使用 System.setProperties() 方法在 Activator 的 start 方法内提供参数。

System.setProperty("org.eclipse.equinox.http.jetty.https.port", "9090");        
System.setProperty("org.eclipse.equinox.http.jetty.https.enabled", "true");
System.setProperty("org.eclipse.equinox.http.jetty.https.host", "0.0.0.0");
System.setProperty("org.eclipse.equinox.http.jetty.ssl.keystore", "/home/https/keystore.jks");
System.setProperty("org.eclipse.equinox.http.jetty.ssl.password", "password");

使用这种方法,端口 9090 上的 HTTPS 服务器工作正常,但存在两个问题,

  1. 相同的网页也在端口 80 上作为 HTTP 提供,但我不想要。即使当我使用时它也在那里:

    System.setProperty("org.eclipse.equinox.http.jetty.http.enabled","false");
    
  2. 由于不需要的 HTTP 网页托管在端口 80(系统端口)上,因此我必须以 root 身份调用该包,否则我会收到 Java.net.SocketException: Permission Denied

由于端口 80 上可能托管有其他页面,因此我不想完全禁用 HTTP 或手动从 bundle 中的端口 80 取消注册服务器。

我真的很感激任何有关如何停止此行为而无需手动修改任何其他端口的指示。

最佳答案

我发现端口 80 上的服务器与设备上另一个 bundle 托管的另一台服务器发生冲突。禁用其他 bundle 后,一切都按预期工作。 我仍在尝试让它们共存,但答案 herehere非常有帮助。

关于java - 在 OSGi 内托管 HTTPS 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37254948/

相关文章:

java - 机器人框架 - 来自谷歌文档的示例不起作用

java - TextMate 大写片段

configuration - 如何在Jetty的web.xml中为静态资源配置缓存?

java - jetty 请求日志轮换 - 基于大小

java - Spring Boot 2.5.0 对于 Jackson Kotlin 类支持,请将 "com.fasterxml.jackson.module: jackson-module-kotlin"添加到类路径

java - ANTLR 异常处理 "$",Java

postgresql - 将停用词从 Postgresql 加载到 Solr6

java - OSGI 传递依赖级别

java - 包含对实现代码的引用的 OSGi 导出 API 安全吗?

java - Apache ServiceMix 7,ScalaDSL,未找到方案 : jetty 的组件