我有一个简单的Restlet应用程序,它使用restlet-jse-2.2.3中的嵌入式org.restlet.Server,它可以很好地与HTTP配合使用。在Restlet书之后,我将其转换为使用HTTPS。但是,在我的ServerResource实例中,getReference()使用HTTP方案返回引用,即使应用程序仅通过HTTPS访问。甚至org.restlet.routing.Redirector也很困惑,它采用了相对目标并返回了一个带有http模式的URI。
这是我的主要()的要点:
Component component = new Component();
Server server = component.getServers().add(Protocol.HTTPS, 8081);
Series<Parameter> parameters = server.getContext().getParameters();
parameters.add("keystorePath", ...);
parameters.add("keystorePassword", ...);
parameters.add("keystoreType", ...);
parameters.add("keyPassword", ...);
component.getDefaultHost().attachDefault(new MyApplication());
component.start();
在MyApplication.createInboundRoot()
中Router router = new Router(getContext());
router.attach("/", new Redirector(getContext(), "/servers",
Redirector.MODE_CLIENT_FOUND));
router.attach(...);
...
我的各种附加的ServerResource实例在作为https://my.host:MYPORT/...
寻址时工作正常,但其getReference()方法返回的Reference实例始终采用http://my.host:MYPORT/...
形式,迫使我将方案覆盖为https到生成
相对链接,点击https://my.host:MYPORT/
会返回重定向到http://my.host:MYPORT/servers
,当然会失败。
我错过了什么导致URI中的传入https方案被重写为http?