若依框架接入WebSocket(附带吐槽)
当你向ai询问,java如何接入websocket时,ai会甩给你一套@ServerEndPoint的组合拳。
当你库库库使用注解轻松完成了websocket的接入时,可能会洋洋得意😊:这注解也太好用了,这么轻松就能完成接入,甚至不需要实现接口!
可是,当你开始运行程序的时候,突然发现:卧槽!我好像没有添加鉴权!
于是当你库库加了一堆的Bean,企图使用这些Bean来解析token,然后一顿操作,将token解析完毕,觉得自己的操作无比帅气😎。
可是,当你开始运行的时候,突然发现:?
Bean注入失效?
开什么玩笑?

然后疯狂拷打ai,可是ai的狗嘴里吐不出象牙来,只能给你幻觉答案。
迫不得已,只好求助度娘。
得到了一下答案:
=============================== 正文 ==========================================
@ServerEndPoint那一套是过时做法,是Java官方自带的web组件
而Spring则提供了一套附属于Spring的组件:
一、Configuration
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private WebSocketUtil webSocketUtil;
@Autowired
private WebSocketInterceptor webSocketInterceptor;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(webSocketUtil, "/ws")//设置连接路径和处理
.setAllowedOrigins("*")
.addInterceptors(webSocketInterceptor);//设置拦截器,没有多种websocket,不需要添加这种玩意
}
}
二、WebSocketHandler,需要实现WebSocketHandler接口
@Slf4j
@Component
public class WebSocketUtil implements WebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
}
@Override
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
}
@Override
public boolean supportsPartialMessages() {
return false;
}
@Override
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
}
}
在这个handler中,我们可以尽情的进行注入Bean,不用害怕发生Bean注入失效的问题。
ok,后端的问题解决了,我们应该如何在前端给请求添加上token呢?
如果此时,你去问ai,ai会给你倒出大便方式:添加ws依赖,然后使用ws中的WebSocket类即可添加请求头。
如果你信了,然后去一顿操作,就可以得到一个报错:
Error in mounted hook: "Error: ws does not work in the browser. Browser clients must use the native WebSocket object"
浏览器只支持原生的WebSocket对象,引入的ws瞬间变成了一个小丑🤡
疯狂拷打ai,他也只会让你在使用ws和删掉ws之间疯狂横跳
正确的方法其实应该是,直接给ws的连接请求路径中,添加参数:
ws_url = ws_url + "?token=Bearer " + getToken();
这样,只需要在后端的WebSocketSession中获取URI,然后就可以轻松解析了。
作者血泪的教训告诉我们,有的时候不能依赖ai,😭

浙公网安备 33010602011771号