Weblogic 12.1.3/12.2.1.3建立websocket连接报404错误问题咨询
Weblogic 12.1.3/12.2.1.3 下Spring STOMP + SockJS WebSocket 404 排查解决方案
Tyrus是Weblogic内置的JSR-356标准WebSocket实现,Upgrade状态返回NOT_AVAILABLE本质是容器的WebSocket引擎未识别到端点请求,未执行升级逻辑,可按以下步骤排查修复:
排查修复步骤
- 校验Weblogic域WebSocket开关
登录Weblogic域控制台,依次进入「配置」-「Web应用程序」,确认启用WebSocket复选框已勾选,修改后需重启域生效。Weblogic 12.1.3版本存在已知开关失效bug,需额外在域启动参数中添加-Dweblogic.websocket.server.enabled=true强制开启引擎。 - 排查WebSocket实现依赖冲突
Spring默认传递引入Tomcat的WebSocket实现包,会和Weblogic内置的Tyrus实现冲突,导致端点注册失效。Maven项目需在spring-boot-starter-websocket依赖中排除Tomcat WebSocket包:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> <exclusions> <exclusion> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> </exclusion> </exclusions> </dependency> - 修正weblogic.xml类加载优先级配置
在项目WEB-INF/weblogic.xml中添加以下配置,让容器优先加载自带的WebSocket相关类,避免应用内依赖覆盖容器实现:<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.7/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>javax.websocket.*</package-name> <package-name>org.glassfish.tyrus.*</package-name> </prefer-application-packages> </container-descriptor> </weblogic-web-app> - 校验Spring STOMP端点配置
请勿为STOMP端点添加@ServerEndpoint注解(该注解会让Tyrus直接接管,和Spring的STOMP代理逻辑冲突),正确配置示例如下:@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // 端点路径需和前端SockJS连接路径完全匹配 registry.addEndpoint("/ws-stomp") .setAllowedOriginPatterns("*") .withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic", "/queue"); config.setApplicationDestinationPrefixes("/app"); } }
验证方法
部署修改后的应用,直接访问SockJS信息端点http://<服务地址>/<应用上下文路径>/ws-stomp/info,若返回如下格式JSON则说明端点注册成功,可正常发起WebSocket连接:
{"entropy":123456,"origins":["*:*"],"cookie_needed":true,"websocket":true}
内容的提问来源于stack exchange,提问作者user4768793
相关产品推荐
相关产品推荐

