.idea/misc.xml
@@ -1,4 +1,3 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="FrameworkDetectionExcludesConfiguration"> bitgetsClient/src/main/java/org/example/bitgetsclient/util/RedisUtil.java
@@ -11,7 +11,7 @@ private static JedisPool jedisPool; static { jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 63790,0, "123456"); jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 6379); } // 私有构造方法,防止实例化 geteClient/src/main/java/org/example/geteclient/util/RedisUtil.java
@@ -11,7 +11,7 @@ private static JedisPool jedisPool; static { jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 63790,0, "123456"); jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 6379); } // 私有构造方法,防止实例化 kucoinClient/src/main/java/org/example/kucoinclient/util/RedisUtil.java
@@ -11,7 +11,7 @@ private static JedisPool jedisPool; static { jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 63790,0, "123456"); jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 6379); } // 私有构造方法,防止实例化 mexcClient/src/main/java/org/example/mexcclient/util/RedisUtil.java
@@ -11,8 +11,7 @@ private static JedisPool jedisPool; static { JedisPoolConfig poolConfig = new JedisPoolConfig(); jedisPool = new JedisPool(poolConfig, "107.148.40.10", 6379, 0, "123456"); jedisPool = new JedisPool(new JedisPoolConfig(), "localhost", 6379); } // 私有构造方法,防止实例化 websocketSerivce/src/main/java/org/example/controller/UserController.java
@@ -73,6 +73,7 @@ map.put("user",user); map.put("menu",menus); extracted(account, request); RedisUtil.set(user.getId().toString(),token); return ServerResponse.createBySuccess(map); } @@ -92,8 +93,7 @@ List<Menu> menuList = menus.stream().filter(f -> f.getIsRoot() == 0).collect(Collectors.toList()); map.put("menu",menuList); map.put("user",user); String key = "user_"; RedisUtil.set(key+user.getId(),token); RedisUtil.set(user.getId().toString(),token); extracted(account, request); return ServerResponse.createBySuccess(map); @@ -259,6 +259,7 @@ } @GetMapping("/deleteMark") @ResponseBody public ServerResponse deleteMark(@RequestParam(value = "favorites") String favorites, HttpServletRequest request) { String token = request.getHeader("token"); websocketSerivce/src/main/java/org/example/pojo/bo/WsBo.java
@@ -40,6 +40,8 @@ //过滤数据 private String buyAndSell; private String uuid; //当前页 private Integer current = 1; websocketSerivce/src/main/java/org/example/util/JwtUtil.java
@@ -8,6 +8,8 @@ import lombok.extern.slf4j.Slf4j; import org.example.pojo.User; import java.util.Date; /** * @program: demo * @description: @@ -35,6 +37,7 @@ .withClaim("account", userInfo.getAccount()) .withClaim("id", userInfo.getId()) .withClaim("isRoot",userInfo.getIsRoot()) .withClaim("time",new Date().getTime()) .sign(algorithm); log.info("用户{}的token生成成功:{}",userInfo.getId(),jwtToken); return jwtToken; websocketSerivce/src/main/java/org/example/util/LoginInterceptor.java
@@ -2,6 +2,7 @@ import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.apache.commons.lang3.StringUtils; import org.example.pojo.User; import org.example.server.UserService; import org.example.server.impl.UserServiceImpl; @@ -35,7 +36,7 @@ }else { token = request.getHeader("token"); } if(null == token){ if(StringUtils.isEmpty(token)){ // 未登录,返回未授权错误码或重定向到登录页 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 返回 401 未授权状态码 response.setCharacterEncoding("UTF-8"); @@ -43,24 +44,15 @@ return false; } User user = JwtUtil.verify(token); if(null == user){ String s = RedisUtil.get(user.getId().toString()); if(StringUtils.isEmpty(s) && s.equals(token)){ // 未登录,返回未授权错误码或重定向到登录页 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 返回 401 未授权状态码 response.setCharacterEncoding("UTF-8"); response.getWriter().write("请登录"); return false; } if (user.getIsRoot() == 1) { // 已登录,允许请求继续 return true; } else { // 未登录,返回未授权错误码或重定向到登录页 response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); // 返回 401 未授权状态码 response.setCharacterEncoding("UTF-8"); response.getWriter().write("请登录"); return false; } return true; } @Override websocketSerivce/src/main/java/org/example/websocket/server/WsServer.java
@@ -86,15 +86,21 @@ private boolean hasReceivedSubscription(Session session) { WsBo wsBo = getWsBoForSession(session.getId()); String s = RedisUtil.get("user_" + wsBo.getUserId()); if(null == s || s.isEmpty() && !wsBo.getToken().equals(s)){ String s = RedisUtil.get(wsBo.getUserId().toString()); if(StringUtils.isEmpty(s) || !wsBo.getToken().equals(s)){ closeSession(session, "用户未登录"); Map<String,Integer> map = new HashMap<>(); map.put("status",1); pushMessage(session,JSONUtil.toJsonStr(map)); return false; } return wsBo != null; } @OnError public void onError(Session session, @NonNull Throwable throwable) { threadLocalData.remove(session.getId()); wsServers.remove(this); log.error("连接发生报错: {}", throwable.getMessage()); throwable.printStackTrace(); } @@ -102,6 +108,7 @@ @OnClose public void onClose() { int count = onlineCount.decrementAndGet(); threadLocalData.remove(session.getId()); wsServers.remove(this); cancelScheduledTasks(); // 取消定时任务 log.info("服务端断开连接,当前连接的客户端数量为:{}", count); @@ -119,6 +126,16 @@ try { if(!message.equals("ping")){ WsBo bean = JSONUtil.toBean(message, WsBo.class); if(null == bean){ closeSession(session,"没有订阅消息"); } String s = RedisUtil.get(bean.getUserId().toString()); if(StringUtils.isEmpty(s)){ Map<String,Integer> map = new HashMap<>(); map.put("status",1); pushMessage(session,JSONUtil.toJsonStr(map)); closeSession(session,"没有订阅消息"); } threadLocalData.put(session.getId(), bean); } }catch (Exception e){ @@ -152,6 +169,7 @@ sessionLock.unlock(); } } else { closeSession(session, "会话不存在或已关闭"); log.error("会话不存在或已关闭,无法发送消息"); } } catch (Exception e) { @@ -172,7 +190,18 @@ private void schedulePushMessage(Session session, String message) throws JsonProcessingException { WsBo wsBo = getWsBoForSession(session.getId()); if (wsBo != null) { String s = RedisUtil.get(wsBo.getUserId().toString()); if(StringUtils.isEmpty(s) || !s.equals(wsBo.getToken())){ Map<String,Integer> map = new HashMap<>(); map.put("status",1); pushMessage(session,JSONUtil.toJsonStr(map)); closeSession(session,"登录状态失效"); } long currentTime = System.currentTimeMillis(); long lastMessageTime = lastMessageTimeMap.getOrDefault(session, 0L); int time = wsBo.getTime(); @@ -186,6 +215,11 @@ // 时间间隔未达到,不发送消息,可以记录日志或者其他操作 // log.info("距离上次发送消息时间未达到指定间隔,不发送消息。"); } }else{ Map<String,Integer> map = new HashMap<>(); map.put("status",1); pushMessage(session,JSONUtil.toJsonStr(map)); closeSession(session,"没有订阅消息"); } } private static final Gson gson = new Gson(); @@ -246,6 +280,7 @@ .filter(data -> list.contains(data.getBuyAndSell())) .forEach(data -> data.setMarker(true)); } map.put("uuid",wsBo.getUuid()); map.put("current",wsBo.getCurrent()); map.put("sizes",wsBo.getSizes()); map.put("total",redisValueMap.size()); @@ -322,6 +357,7 @@ // 关闭会话的方法 private void closeSession(Session session, String reason) { try { threadLocalData.remove(session.getId()); session.close(new CloseReason(CloseReason.CloseCodes.UNEXPECTED_CONDITION, reason)); } catch (IOException e) { log.error("强制断开连接----异常: {}", e.getMessage());