小编Tom*_*wig的帖子

通过SockJS通过STOMP进行安全的WebSocket升级失败,无效升级标头为null

我正在使用一个使用Spring Security和WebSockets的Web应用程序.我可以在没有本地机器问题的情况下使用WebSockets,从嵌入式Tomcat的JAR运行Spring Boot应用程序.但是,当我将相同的JAR /项目上载到CloudFoundry或OpenShift(并将其作为可执行JAR运行)时,建立WebSocket连接时的协议升级失败.

我做了一个小示例项目来演示这个问题(至少当我在我的机器或我的CloudFoundry或OpenShift帐户上尝试它时).它可以在这里找到:https://github.com/shakuzen/spring-stomp-websocket-test

这是一个简单的,简单的例子,但我能够不断重现这个问题.日志中的错误消息是:

2014-10-20T00:46:36.69+0900 [App/0]   OUT 2014-10-19 15:46:36.698 DEBUG 32 --- [io-61088-exec-5] o.s.w.s.s.s.DefaultHandshakeHandler      : Invalid Upgrade header null
Run Code Online (Sandbox Code Playgroud)

默认情况下,DefaultBandshakeHandler的DEBUG日志显示缺少Upgrade标头.但是,如果您查看使用Chrome的开发人员工具(或任何浏览器的等效工具)发送的请求,您会看到请求不同.发送了以下两个请求.

1

GET /hello/info HTTP/1.1
Host: sswss-test.cfapps.io
Connection: keep-alive
Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36
Accept: */*
Referer: http://sswss-test.cfapps.io/message
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ja;q=0.6
Cookie: __VCAP_ID__=693dd6ff1b494f88a2c8567590da500dc44b4818746a45b28dd98a29b2607395; JSESSIONID=C5485065FE0A1DBCDF1F148A63D08FC2
DNT: 1
Run Code Online (Sandbox Code Playgroud)

2

GET ws://sswss-test.cfapps.io/hello/863/olm1kojs/websocket HTTP/1.1
Host: sswss-test.cfapps.io
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Authorization: Basic dGVzdHVzZXI6dGVzdHBhc3M=
Upgrade: websocket
Origin: http://sswss-test.cfapps.io …
Run Code Online (Sandbox Code Playgroud)

stomp spring-security sockjs spring-boot spring-websocket

6
推荐指数
1
解决办法
4589
查看次数