gpt4 book ai didi

java - 使用 Grizzly 和 Jersey 的 SSL

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:03 25 4
gpt4 key购买 nike

我正在尝试让 grizzly 使用 SSL 加密并且仍然可以在 Jersey 上正常工作。我浏览了整个 Internet,发现了各种不同的 SSL 尝试,包括 Grizzly 和 Jersey。根据您使用的版本以及您决定如何实现它,似乎有不同的方法可以做到这一点。我还没有得到任何示例来使用我的代码。

这是我启动服务器的方式:

static HttpServer startSecureServer() throws IOException{
ResourceConfig rc=new PackagesResourceConfig("server.grizzlyresources");
SSLContextConfigurator sslCon=new SSLContextConfigurator();

sslCon.setKeyStoreFile(ConfigLoader.getKeystoreLocation()); // contains server keypair
sslCon.setKeyStorePass(ConfigLoader.getKeystorePassword());

System.out.println("Starting server on port "+ConfigLoader.getHttpsServerPort());
HttpServer secure=GrizzlyServerFactory.createHttpServer(BASE_URI_SECURED, rc);
secure.stop();

HashSet<NetworkListener> lists=new HashSet<NetworkListener>(secure.getListeners());
for (NetworkListener listener : lists){
listener.setSecure(true);
SSLEngineConfigurator ssle=new SSLEngineConfigurator(sslCon);
listener.setSSLEngineConfig(ssle);
secure.addListener(listener);
System.out.println(listener);
}

secure.start();
return secure;
}

private static URI getBaseURISecured(){
return UriBuilder.fromUri("https://0.0.0.0/").port(ConfigLoader.getHttpsServerPort()).build();
}

private static final URI BASE_URI_SECURED = getBaseURISecured();

ConfigLoader 从配置文件加载信息。当我运行这段代码时,它会启动服务器,它会在 server.grizzlyresources 包中找到资源,而且效果很好!除了一件事。服务器不安全。我可以远程登录到它并以纯文本形式为我的资源之一发送 HTTP 请求,它会返回它。所以代码可以启动服务器,但它的整个 SSL 部分都被绕过了。有什么想法可以解决这个问题或为什么会这样吗?

这是我运行时控制台的输出:

Starting server on port 9999
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
server.grizzlyresources
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class server.grizzlyresources.SessionResource
class server.grizzlyresources.LoginResource
Jan 13, 2014 9:51:08 AM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
Jan 13, 2014 9:51:08 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.12 02/15/2012 04:51 PM'
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [0.0.0.0:9999]
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.NetworkListener stop
INFO: Stopped listener bound to [0.0.0.0:9999]
NetworkListener{name='grizzly', host='0.0.0.0', port=9999, secure=true}
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [0.0.0.0:9999]
Jan 13, 2014 9:51:09 AM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.

我使用的是 Grizzly 2.2.1 和 Jersey 1.12。

非常感谢!

最佳答案

很抱歉花了这么长时间才把它贴在这里。 Alexey 的回答使我找到了可行的解决方案,它很像 Wolfgang Fahl 的代码。这是我最终得到的结果:

static HttpServer startSecureServer() throws IOException
{
System.out.println("Starting server on port " + ConfigLoader.getHttpsServerPort());
ResourceConfig rc = new PackagesResourceConfig("com.kinpoint.server.grizzlyresources");

SSLContextConfigurator sslCon = new SSLContextConfigurator();

sslCon.setKeyStoreFile(ConfigLoader.getKeystoreLocation()); // contains server keypair
sslCon.setKeyStorePass(ConfigLoader.getKeystorePassword());

HttpHandler hand = ContainerFactory.createContainer(HttpHandler.class, rc);

HttpServer secure = GrizzlyServerFactory.createHttpServer(BASE_URI_SECURED, hand, true,
new SSLEngineConfigurator(sslCon, false, false, false));

return secure;
}

SSLEngineConfigurator 中的第二个参数告诉它不要使用客户端模式。那就是把我搞得一团糟的原因。感谢您的帮助。

关于java - 使用 Grizzly 和 Jersey 的 SSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21098105/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com