我在heroku免费dyno上运行Java 8 Spring Boot应用程序。我的应用程序是一个REST API,用于驱动单页应用程序,该应用程序使用JWT通过Auth0进行保护。
这在其他主机(AWS等等)上运行得非常好。但是当我运行应用程序时,在heroku上进行身份验证,并且javascript客户端调用REST api我收到以下错误
Caused by: java.lang.IllegalArgumentException: protocol = https host = null
2018-02-14T13:48:35.702463+00:00 app[web.1]: at sun.net.spi.DefaultProxySelector.select(DefaultProxySelector.java:177) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702464+00:00 app[web.1]: at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1150) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702465+00:00 app[web.1]: at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702466+00:00 app[web.1]: at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702479+00:00 app[web.1]: at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702480+00:00 app[web.1]: at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702481+00:00 app[web.1]: at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702482+00:00 app[web.1]: at java.net.URL.openStream(URL.java:1045) ~[na:1.8.0_161-heroku]
2018-02-14T13:48:35.702484+00:00 app[web.1]: at com.auth0.jwk.UrlJwkProvider.getJwks(UrlJwkProvider.java:58) ~[jwks-rsa-0.2.0.jar!/:na]
我认为这是代理问题。有人能告诉我来自heroku dyno的http请求是否通过代理重定向?如果是这样,我相信我可以通过在我的JVM启动中添加以下标志来解决问题
-Dhttp.proxy=...
我非常坚持这一点,如果没有解决方案,无法在heroku上成功运行我的应用程序。在heroku上运行时有没有其他人经历过类似的事情?
非常感谢。
答案 0 :(得分:0)
是的,Heroku通过自己的路由器发送请求,终止SSL / HTTPS。因此,当请求到达您的应用时,请求在HTTP中。