WebSocketClientAbs
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.ssl.SSLContexts;
import org.java_websocket.client.WebSocketClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.ResourceLoader;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;
import java.util.Map;
public abstract class WebSocketClientAbs {
@Value("${server.ssl.key-store}")
private String cerPath;
@Value("${server.ssl.key-store-password}")
private String cerPwd;
/**
* 创建WebSocket客户端
*
* @param wsUri
* @param httpHeaders
* @return
*/
public abstract WebSocketClient createWebSocketClient(String wsUri, Map<String, String> httpHeaders);
/**
* 客户端连接
*
* @param uri
* @param httpHeaders
* @return
*/
public abstract WebSocketClient connect(String uri, Map<String, String> httpHeaders);
/**
* wss协议证书认证
*
* @param webSocketClient
*/
public void createWebSocketClient(WebSocketClient webSocketClient) {
try {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(resourceLoader(cerPath), cerPwd.toCharArray());
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(keyStore, new TrustSelfSignedStrategy()).build();
SSLSocketFactory sslFactory = sslContext.getSocketFactory();
webSocketClient.setSocketFactory(sslFactory);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 读取文件信息
*
* @param fileFullPath
* @return
* @throws IOException
*/
public InputStream resourceLoader(String fileFullPath) throws IOException {
ResourceLoader resourceLoader = new DefaultResourceLoader();
return resourceLoader.getResource(fileFullPath).getInputStream();
}
}
PlatformWebsocketClient:平台客户端
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
@Component
@Slf4j
@Data
public class PlatformWebsocketClient extends WebSocketClientAbs {
@Resource
private MessageService messageService;
private WebSocketClient wsClient;
// 消息类型
private String type;
// 0:链接断开或者异常;1:代表链接中;2:代表正在连接;
public static int isConnect = 0;
/**
* 获取客户端连接实例
*
* @param wsUri
* @param httpHeaders
* @return
*/
@Override
public WebSocketClient createWebSocketClient(String wsUri, Map<String, String> httpHeaders) {
try {
//创建客户端连接对象
return new WebSocketClient(new URI(wsUri), httpHeaders) {
/**
* 建立连接调用
* @param serverHandshake
*/
@Override
public void onOpen(ServerHandshake serverHandshake) {
isConnect = 1;
}
/**