OWL ITS + 탐지시스템(인터넷 진흥원)
jhjang
2021-10-14 d680ff9fa4298ad3c0cd12f5f9d87f6c51110480
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package kr.wisestone.owl.config.websocket;
 
import com.google.gson.Gson;
import kr.wisestone.owl.util.MapUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.listener.ChannelTopic;
import org.springframework.stereotype.Service;
 
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
 
@Service
public class WebSocketService {
 
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
 
    @Autowired
    private RedisPublisher redisPublisher;
 
    @Value("${redis.common.topic}")
    private String redisCommonTopic;
 
    public void checkActiveUser() {
        Map<String, Object> totalActiveUserMap = this.checkExpireWebSocketSession();
        Gson gson = new Gson();
        Map<String, Object> responseMap = new HashMap<>();
 
        responseMap.put("url", "/session/user-list");
        responseMap.put("message", gson.toJson(totalActiveUserMap));
        ChannelTopic channelTopic = new ChannelTopic(this.redisCommonTopic);
 
        this.redisPublisher.publish(channelTopic, responseMap);
    }
 
    private Map<String, Object> checkExpireWebSocketSession() {
        Map<String, Object> totalActiveUserMap = new HashMap<>();
        Gson gson = new Gson();
        String loginUsers = this.stringRedisTemplate.opsForValue().get("activeUsers");
 
        if (!StringUtils.isEmpty(loginUsers)) {
            totalActiveUserMap = (Map<String, Object>)gson.fromJson(loginUsers, Object.class);
 
            Iterator<String> iterator = totalActiveUserMap.keySet().iterator();
 
            while (iterator.hasNext()) {
                String key = iterator.next();
                Map<String, Object> userMap = (Map<String, Object>)totalActiveUserMap.get(key);
 
                Long sessionActiveTime = Long.valueOf(MapUtil.getString(userMap, "sessionActiveTime"));
 
                if (System.currentTimeMillis() - sessionActiveTime >= 60000) {
                    iterator.remove();
                }
            }
        }
 
        return totalActiveUserMap;
    }
}