本地广东中山网站建设wordpress眉顶布局
news/
2025/9/30 17:07:18/
文章来源:
本地广东中山网站建设,wordpress眉顶布局,u钙网logo设计官网,建设网站的企业邮箱网站建设服务1.遇到问题 公司项目是基于ruoyi 框架快速搭建开发#xff0c;使用多线程搜索查询#xff0c;所以以用户区分任务#xff0c;保证可以搜索任务和取消搜索#xff0c;所以我这需要获得用户id#xff0c;使用 SecurityUtils 共工工具类从请求头获取token#xff0c;然后解…1.遇到问题 公司项目是基于ruoyi 框架快速搭建开发使用多线程搜索查询所以以用户区分任务保证可以搜索任务和取消搜索所以我这需要获得用户id使用 SecurityUtils 共工工具类从请求头获取token然后解析得到用户基本信息和权限。在开发的过程中正常使用建立socket连接也正常但是在后续发消息的时候在后续将代码移动websocket 出现获取用户ID 异常的错误其实在获取 loginUser 是空的。
/*** 安全服务工具类* * author trinity*/
public class SecurityUtils
{/*** 用户ID**/public static Long getUserId(){try{return getLoginUser().getUserId();}catch (Exception e){throw new ServiceException(获取用户ID异常, HttpStatus.UNAUTHORIZED);}} 2.解决思路 1.同事告诉我可以采用另外一种方式建立连接的时候将让前端传过来让后将userId和session存放一起以下代码就可以实现。
Slf4j
Component
ServerEndpoint(value /websocket/{userid})
public class SearchSocketServer {OnOpenpublic void onOpen(Session session, PathParam(userid) String userid) {log.info(WebSocket connection opened for userid: {}, userid);// 处理其他逻辑...}
} 上面是基于注解开发实现起来的简单。我也问了前端同事是否可以我传用户id回答也是是。我这人就是最求代码高bi格就使用下面了这种 实现 HandshakeInterceptor 接口 就能在 websocket 三次握手 四次挥手 至于websocket用的什么不清楚因为socket 建立其实发消息其实就不会发请求了也就是我在代码中获取不到用户id的问题所在。所以我只要在建立socket 请求时获取用户id 写到请求头里后面就可以无限使用了。不知道还有没有更好的方式
/*** author LJL* version 1.0* title IdHandshakeInterceptor* date 2023/8/25 9:18* description TODO*/
public class IdHandshakeInterceptor implements HandshakeInterceptor {Overridepublic boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, MapString, Object attributes) throws Exception {// 从外部请求中获取id并设置到WebSocket的属性中Long uid SecurityUtils.getUserId();attributes.put(uid, uid);return true;}Overridepublic void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {// 握手完成后的处理逻辑可选}
}实现了拦截器别忘记添加进去
Configuration
EnableWebSocket
public class SpringSocketConfig implements WebSocketConfigurer {Autowiredprivate SpringSocketHandle springSocketHandle;Autowiredprivate SpringAbstractWebSocketHandler springAbstractWebSocketHandler;Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {registry.addHandler(springSocketHandle, /spring-ws).setAllowedOrigins(*).addHandler(springAbstractWebSocketHandler, /spring-ws1).addInterceptors(new IdHandshakeInterceptor()).setAllowedOrigins(*);}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923085.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!