我正在使用Java设置新的webSocket服务器,并希望在WSS中公开它,因为我的客户端应用程序位于HTTPS中。你能帮我吗
我试图修改我的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>
这是我的EndPoint类
@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;
}
}
我的客户端应用
var conn = new WebSocket('ws://<IP_ADRESSE>:8080/<PATH>/signalisation/'+c);
conn.onopen = function () {
console.log("Connected to the server");
};
我的实际结果是:
client.js:11混合的内容:“ https://IP_ADRESSE:PORT/?user=blabla”上的页面已通过HTTPS加载,但试图连接到不安全的WebSocket端点“ ws:// IP_ADRESSE:8080 / PATH / signalisation / blabla” 。该请求已被阻止;该端点必须可以通过WSS使用。
答案 0 :(得分:0)
那是一个月前的事了,但希望它能对有同样错误的人有所帮助。
在客户端应用上将ws://
更改为wss://
,就在IP_ADRESSE
之前。