1
zj
2024-08-09 bd3128deee35126344bc4d14a1749409859f9c4f
1
10 files modified
78 ■■■■ changed files
.idea/misc.xml 1 ●●●● patch | view | raw | blame | history
bitgetsClient/src/main/java/org/example/bitgetsclient/util/RedisUtil.java 2 ●●● patch | view | raw | blame | history
geteClient/src/main/java/org/example/geteclient/util/RedisUtil.java 2 ●●● patch | view | raw | blame | history
kucoinClient/src/main/java/org/example/kucoinclient/util/RedisUtil.java 2 ●●● patch | view | raw | blame | history
mexcClient/src/main/java/org/example/mexcclient/util/RedisUtil.java 3 ●●●● patch | view | raw | blame | history
websocketSerivce/src/main/java/org/example/controller/UserController.java 5 ●●●●● patch | view | raw | blame | history
websocketSerivce/src/main/java/org/example/pojo/bo/WsBo.java 2 ●●●●● patch | view | raw | blame | history
websocketSerivce/src/main/java/org/example/util/JwtUtil.java 3 ●●●●● patch | view | raw | blame | history
websocketSerivce/src/main/java/org/example/util/LoginInterceptor.java 18 ●●●● patch | view | raw | blame | history
websocketSerivce/src/main/java/org/example/websocket/server/WsServer.java 40 ●●●●● patch | view | raw | blame | history
.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());