[英]How to expose WSS 'secure websocket' with Java
I'm setting up a new webSocket server using Java, and want to expose it in WSS because my client side app is in HTTPS.我正在使用 Java 设置一个新的 webSocket 服务器,并希望在 WSS 中公开它,因为我的客户端应用程序使用 HTTPS。 Could you help me please
请问你能帮帮我吗
I've tried to modify my web.xml but dosen't work我试图修改我的 web.xml 但不起作用
<web-app>
<display-name>Archetype Created Web Application</display-name>
<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>
<!-- https -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
This is my EndPoint Class这是我的端点类
@ServerEndpoint(value = "/signalisation/{username}", decoders = MessageDecoder.class, encoders = MessageEncoder.class)
public class ChatEndpoint {
private Session session;
private static final Set<ChatEndpoint> chatEndpoints = new CopyOnWriteArraySet<>();
private static HashMap<String, String> users = new HashMap<>();
@OnOpen
public void onOpen(Session session, @PathParam("username") String username) throws IOException, EncodeException {
System.out.println("connected");
this.session = session;
chatEndpoints.add(this);
users.put(session.getId(), username);
Message message = new Message();
message.setFrom(username);
message.setContent("Connected!");
broadcast(message, message.getTo());
}
@OnMessage
public void onMessage(Session session, Message message) throws IOException, EncodeException {
message.setFrom(users.get(session.getId()));
System.out.println("messaged");
}
@OnClose
public void onClose(Session session) throws IOException, EncodeException {
System.out.println("out");
}
@OnError
public void onError(Session session, Throwable throwable) {
// Do error handling here
}
private static void broadcast(Message message, String id) throws IOException, EncodeException {
chatEndpoints.forEach(endpoint -> {
if (endpoint.session.getId().equals(id)){
synchronized (endpoint) {
try {
endpoint.session.getBasicRemote()
.sendObject(message);
} catch (IOException | EncodeException e) {
e.printStackTrace();
}
}
}
});
}
public String getKeyFromMap(HashMap map, String value){
for (Object o : map.keySet()) {
if (map.get(o).equals(value))
return o.toString();
}
return null;
}
}
My Client Side app我的客户端应用程序
var conn = new WebSocket('ws://<IP_ADRESSE>:8080/<PATH>/signalisation/'+c);
conn.onopen = function () {
console.log("Connected to the server");
};
My actual result is :我的实际结果是:
client.js:11 Mixed Content: The page at ' https://IP_ADRESSE:PORT/?user=blabla ' was loaded over HTTPS, but attempted to connect to the insecure WebSocket endpoint 'ws://IP_ADRESSE:8080/PATH/signalisation/blabla'. client.js:11 混合内容:“ https://IP_ADRESSE:PORT/?user=blabla ”页面已通过 HTTPS 加载,但尝试连接到不安全的 WebSocket 端点“ws://IP_ADRESSE:8080/PATH/”信号化/blabla'。 This request has been blocked;
此请求已被阻止; this endpoint must be available over WSS.
此端点必须可通过 WSS 使用。
It was some month ago, but hope it helps someone with the same error.这是一个月前,但希望它可以帮助有同样错误的人。 Change
ws://
to wss://
on the client side app, just before IP_ADRESSE
.在客户端应用程序
IP_ADRESSE
ws://
更改为wss://
,就在IP_ADRESSE
之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.