我正在 glassfish 4.0 中开发一个 websockets 应用程序。不使用 SSL 时一切正常,但使用 SSL 时我无法正常工作。
我使用带注释的 Java 对象作为服务器:
@ServerEndpoint("/websocket/{sessionID}")
public class WebSocketServerEndPoint {...}
在客户端,我使用以下 javascript:
var webSocket = new WebSocket('wss://domain.com:8181/websocketserver/websocket/sessionXXX');
在部署描述符 web.xml 中,我有一些东西可以确保无法通过 ssl 以外的其他方式访问应用程序:
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected resource</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<!-- deny all methods other than GET in all url -->
<security-constraint>
<web-resource-collection>
<web-resource-name>protected</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method-omission>GET</http-method-omission>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
我通过访问 index.html 测试页面测试了 https,它显示正确。
https://domain.com:8181/websocketserver/index.html
关于为什么使用 websockets 时 ssl 不起作用但使用 https 时工作正常的任何想法?