将J2SE端点绑定到HTTPS

时间:2011-01-19 12:17:38

标签: java web-services restful-authentication

我创建了一个基本的REST服务,该服务在通过http连接调用时有效。但是当我尝试在顶部添加SSL时,我遇到了一些问题。

这是服务器创建的代码:

 private HttpContext getHttpContext() {
  HttpsServer server = null;
  try {
   server = HttpsServer.create(new InetSocketAddress("localhost", 443), 5);

   server.setHttpsConfigurator(new HttpsConfigurator(SecureChatSslContextFactory.getServerContext()) {

    public void configure(HttpsParameters params) {
     SSLContext context = getSSLContext();

     // get the default parameters
     SSLParameters sslparams = context.getDefaultSSLParameters();
     params.setSSLParameters(sslparams);
    }
   });

   server.start();

   return server.createContext("/customerservice/customer");
  } catch (IOException e) {
   e.printStackTrace();
  }
  return null;
 } 
    Endpoint e = Endpoint.create(HTTPBinding.HTTP_BINDING, new RestSourcePayloadProvider()); 
    e.publish(getHttpContext());

RestSourcePayloadProvide r具有公共方法调用,但它永远不会被调用。我想这种行为的原因是端点的绑定是HTTPBinding.HTTP_BINDING,而不是HTTPS。但我没有设法找到绑定到https的方法。

如果我在link text上运行测试客户端或浏览器,我会得到相同的答案:

  

500内部服务器错误   没有上下文处理程序

2 个答案:

答案 0 :(得分:1)

我找到了问题的答案。我没有为传入的请求创建处理程序。 我应该使用

return server.createContext("/customerservice/customer", new HttpHandler(...));

而不是

return server.createContext("/customerservice/customer");

接口Endpoint看起来像是由Apache的CFX中的EndpointImpl类实现的。调用publish(address)时,EndpointImpl中调用的方法会创建一个ServerImpl,它将成为服务服务器。如果我调用publish(server context),则没有任何反应,因为EndpointImpl也不会覆盖该方法。

答案 1 :(得分:0)

对于那些想要使用CFX的EndpointImpl和SSL的人试试这个: link text

它使用Jetty Server包创建工作服务器并将其发布到端点。