Jos*_*osh 9 java playframework playframework-2.0
我是Play Framework的新手,只是尝试使用Java 8上的2.4.2首次使用HTTPS.我可以使用默认密钥库但不能使用我自己的密钥库.我在以下位置配置了工作默认密钥库build.sbt:
javaOptions ++= Seq(
"-Dhttps.port=9443"
)
Run Code Online (Sandbox Code Playgroud)
然后,配置您自己的密钥库的官方文档对我来说有点过于抽象.它提到了配置application.conf但没有说明如何,或者在命令行上,而不是在Java示例中.谷歌搜索显示了一些Scala示例,但我不能哄骗他们,因为他们使用的东西devSettings似乎没有看到Java世界,或者至少我不理解Play和Scala足以控制它们.
据我所知,我似乎在使用自己独特的配置build.sbt:
javaOptions ++= Seq(
"-Dhttps.port=9443",
"-Dhttps.keyStore.path=keystore.jks",
"-Dhttps.keyStore.password=password")
Run Code Online (Sandbox Code Playgroud)
它构建并运行正常:
p.c.s.NettyServer - Listening for HTTPS on port /0:0:0:0:0:0:0:0:9443
play.api.Play - Application started (Dev)
Run Code Online (Sandbox Code Playgroud)
但是在第一个https://访问中,我在Actuator UI中获得了无限的堆栈跟踪:
play.core.server.NettyServer$PlayPipelineFactory - cannot load SSL context
java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_45]
...
play.core.server.netty.PlayDefaultUpstreamHandler - Exception caught in Netty
java.lang.IllegalArgumentException: empty text
at org.jboss.netty.handler.codec.http.HttpVersion.<init>(HttpVersion.java:89) ~[netty-3.10.3.Final.jar:na]
...
Run Code Online (Sandbox Code Playgroud)
我的第一个想法是我没有正确配置它,但我还没有设法找到Play 2.4的权威指南.我真的开始质疑我的谷歌搜索权力.我发现很多对前端代理的引用并避免在Play中使用SSL终止,但是我没有开发一个公共网站并发现这种方法有点过分.
我不知道它是不是红鲱鱼,但Netty项目在org.jboss.netty很久以前就已经放弃了,现在又用了io.netty.我看到整个堆栈跟踪org.jboss.netty和Play 2.4.2似乎都在使用Netty 3.10.3.Final这是非常古老的.我碰巧熟悉Netty并且在生产中使用了4.x,而5.x目前在Alpha中.为什么Play在这里被困?我应该担心吗?
我发现这似乎密切相关的,如几个问题在播放2.2.x中的错误,并在AHC的错误(这Play使用),但都出现播放2.4.2,我使用之前已经固定好.不过我尝试了修复,例如升级async-http-client依赖项,从async-http-client中排除org.jboss.netty传递依赖项并升级到Netty 3.10.4.Final.
所以现在我被卡住了,但我觉得我只是错过了入门指南.也许所有这些依赖性问题和相关的错误只是浪费时间?
在发布问题后5分钟我发现了...我的配置密钥错误,密钥库路径需要绝对或相对于项目根目录(即添加conf /如果它在您的conf文件夹中):
javaOptions ++= Seq(
"-Dhttps.port=9443",
"-Dhttps.keyStore=conf/keystore.jks",
"-Dhttps.keyStorePassword=password")
Run Code Online (Sandbox Code Playgroud)
我对密钥的错误是根据文档使用点:
https.keyStore.path
https.keyStore.password
Run Code Online (Sandbox Code Playgroud)
代替:
https.keyStore
https.keyStorePassword
Run Code Online (Sandbox Code Playgroud)
我不确定如何从dot.notation到camelCase,甚至我在这里配置的是什么.这些参数更像是标准的JVM参数javax.net.ssl.keyStore和javax.net.ssl.keyStorePassword,但又不完全.我觉得我在这里错过了一招.如果Play报告它找不到密钥库而不是NPE也会很好,但是因为我似乎正在配置JVM,所以除非有另一种方法来配置这些东西,否则Play无法做到这一点.有良好的文件!
| 归档时间: |
|
| 查看次数: |
2958 次 |
| 最近记录: |