一、方法一
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.5.2</version>
</dependency>

package com.neo.websoket;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft;
import org.java_websocket.handshake.ServerHandshake;
import javax.net.ssl.*;
import java.net.Socket;
import java.net.URI;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
*构建SSLWebSocket客户端,忽略证书
*/
public class SSLWebSocketClient extends WebSocketClient {
public static void main(String[] args) throws Exception {
URI serverURI = new URI("wss://124.193.181.178:9781/bvcsp/v1/ws/gpsdata?token=_c9g7HJwCXIYpDq18gcsM03vrB87ZSvJ40HvhXuzlDFv01dQUXEK2kpRm6FnMjR2uDUmt5xZrx9iqqzEi27NxBSTmyME8Y6_GDd3WHJU8kw61uHP1LBj2pAYa67Jgga6F");
WebSocketClient client = new SSLWebSocketClient(serverURI);
client.connect();
}
//构造方法
public SSLWebSocketClient(URI serverURI) {
super(serverURI);
if(serverURI.toString().contains("wss://")){
trustAllHosts(this);
//this.send(message);
}
}
public SSLWebSocketClient(URI serverURI,Draft draft) {
super(serverURI,draft);
if(serverURI.toString().contains("wss://"))
trustAllHosts(this);
}
@Override
public void onOpen(ServerHandshake handshakedata) {
System.out.println("Connected to server");
// 连接建立后发送消息
send("{\"all\":true}");
}
@Override
public void onMessage(String message) {
System.out.println("Received message from server: " + message);
}
@Override
public void onClose(int code, String reason, boolean remote) {
System.out.println("Connection closed, code: " + code + ", reason: " + reason);
// 连接关闭时尝试重新连接
reconnect();
}
@Override
public void onError(Exception ex) {
System.err.println("Error occurred: " + ex.getMessage());
// 出现错误时尝试重新连接
reconnect();
}
/**
*忽略证书
*@paramclient
*/
void trustAllHosts(SSLWebSocketClient client) {
TrustManager[] trustAllCerts = new TrustManager[]{new X509ExtendedTrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
// return new java.security.cert.X509Certificate[]{};
// System.out.println("getAcceptedIssuers");
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
System.out.println("checkClientTrusted");
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
System.out.println("checkServerTrusted");
}
}};
try {
SSLContext ssl = SSLContext.getInstance("SSL");
ssl.init(null, trustAllCerts, new java.security.SecureRandom());
SSLSocketFactory socketFactory = ssl.getSocketFactory();
this.setSocketFactory(socketFactory);
} catch (Exception e) {
e.printStackTrace();
}
}
}

二、方法二(Spring boot)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

package cc.oyz.websocket.client;
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
import javax.net.ssl.*;
import java.net.Socket;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class CustomWebSocketClient extends StandardWebSocketClient {
public CustomWebSocketClient() {
super();
TrustManager[] trustAllCerts = new TrustManager[]{new X509ExtendedTrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
}
@Override
public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
}
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
// return new java.security.cert.X509Certificate[]{};
// System.out.println("getAcceptedIssuers");
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
System.out.println("checkClientTrusted");
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
System.out.println("checkServerTrusted");
}
}};
try {
SSLContext ssl = SSLContext.getInstance("SSL");
ssl.init(null, trustAllCerts, new java.security.SecureRandom());
this.getUserProperties().put(SSLContext.class.getName(),ssl);
} catch (Exception e) {
e.printStackTrace();
}
}
}

/**
* 位置订阅
*
* @return
*/
@Bean(name = "GpsDataCloudConnectionManager")
public WebSocketConnectionManager GpsDataCloudConnectionManager() throws Exception {
WebSocketClient webSocketClient = new CustomWebSocketClient();
WebSocketConnectionManager manager = new WebSocketConnectionManager(webSocketClient, myWebSocketClientHandler,
oyzLiveYsConfig.getWebSocketUrl() + "/bvcsp/v1/ws/gpsdata?" + "token=" + ysDeviceService.getYsToken());
manager.setAutoStartup(true);
return manager;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性