我的Grails应用程序通过HTTPS运行,并在Config.groovy
中设置:
environments {
development {
grails.serverURL = "https://localhost:8443/foo"
}
}
当我执行grails run-app
以在开发模式下启动应用程序时,控制台上打印的最后一条消息是:
服务器正在运行。浏览到
http://localhost:8082/foo
如果我不小心点击此URL访问该应用程序,由于同源安全策略,我会收到各种错误(因为https://localhost:8443
是与http://localhost:8082
不同的主机。)
为什么当我设置http://localhost:8082/foo
时,Grails会提示我通过grails.serverURL = "https://localhost:8443/foo"
访问我的应用
我将启动命令更改为grails run-app -https
,控制台上打印的最后一条消息现在是:
服务器正在运行。浏览到
http://localhost:8082/foo
或https://localhost:8443/foo
为什么我可以选择HTTP或HTTPS,而不仅仅是后者?此外,我在启动期间遇到此异常:
http11.Http11Protocol Failed to initialize end point associated with ProtocolHandler ["http-bio-8443"]
java.net.BindException: Address already in use <null>:8443
at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:407)
我在运行此命令之前检查了端口8443是否正在使用(它不是),但是服务器似乎启动了,尽管有这个例外,所以这不是主要问题。
答案 0 :(得分:3)
将grails.serverURL替换为以下代码。
可以使用以下system properties设置端口:
grails.server.port = 8082
这应该适用于http和https。仅配置一个:
grails.server.port.https = 8082
答案 1 :(得分:1)
您需要使用--https
参数来运行Grails的app,以便在开发模式下响应HTTPS和HTTP。至少根据documentation。
尝试使用
grails run-app --https
此外,grails.serverURL
通常由taglib和插件使用,而不是我所知道的启动过程。
答案 2 :(得分:1)
您可以在BuildConfig.groovy中通过https设置要运行应用程序的ssl端口。您可以将以下内容添加到BuildConfig.groovy
//You can specify another port here to get rid of your startup exception
grails.server.port.https="8443"
grails.server.host="localhost"
然后尝试 grails run-app -https ,您应该可以在您定义的ssl端口或默认的8080端口上运行您的应用