diff --git a/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java b/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java index 56eafaa..40cc990 100644 --- a/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java +++ b/java/src/main/java/com/toesbieya/my/config/HttpSessionConfig.java @@ -1,23 +1,37 @@ package com.toesbieya.my.config; import com.alibaba.fastjson.JSON; -import com.toesbieya.my.listener.RedisSessionListener; +import com.toesbieya.my.model.entity.SysUser; +import com.toesbieya.my.module.SocketModule; +import com.toesbieya.my.utils.Util; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.serializer.RedisSerializer; import org.springframework.data.redis.serializer.SerializationException; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import javax.servlet.http.HttpSessionEvent; +import javax.servlet.http.HttpSessionListener; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @Configuration @EnableRedisHttpSession() public class HttpSessionConfig { - @Bean - public RedisSessionListener httpSessionEventPublisher() { - return new RedisSessionListener(); + public HttpSessionListener httpSessionEventPublisher() { + return new HttpSessionListener() { + @Override + public void sessionCreated(HttpSessionEvent se) { } + + @Override + public void sessionDestroyed(HttpSessionEvent se) { + SysUser user = Util.getUser(se.getSession()); + if (user != null) { + SocketModule.logout(user.getId(), "登陆状态过期,请重新登陆"); + } + } + }; } @Bean("springSessionDefaultRedisSerializer") diff --git a/java/src/main/java/com/toesbieya/my/config/SocketConfig.java b/java/src/main/java/com/toesbieya/my/config/SocketConfig.java index 8a04cab..90c5515 100644 --- a/java/src/main/java/com/toesbieya/my/config/SocketConfig.java +++ b/java/src/main/java/com/toesbieya/my/config/SocketConfig.java @@ -16,6 +16,7 @@ public class SocketConfig { config.setPort(SocketConstant.PORT); config.setMaxFramePayloadLength(SocketConstant.MAX_FRAME_PAYLOAD); config.setMaxHttpContentLength(SocketConstant.MAX_HTTP_CONTENT); + config.setAddVersionHeader(false); return new SocketIOServer(config); } diff --git a/java/src/main/java/com/toesbieya/my/controller/SysUserController.java b/java/src/main/java/com/toesbieya/my/controller/SysUserController.java index 004f193..261101c 100644 --- a/java/src/main/java/com/toesbieya/my/controller/SysUserController.java +++ b/java/src/main/java/com/toesbieya/my/controller/SysUserController.java @@ -42,10 +42,8 @@ public class SysUserController { public Result getLoginHistory(@RequestBody LoginHistorySearch vo) { SysUser user = Util.getUser(session); assert user != null; - if (!user.getAdmin().equals(1)) { - vo.setStartTime(null); - vo.setEndTime(DateUtil.getTimestampBeforeNow(-7)); - } + vo.setUid(user.getId()); + vo.setStartTime(DateUtil.getTimestampBeforeNow(7)); return Result.success(recService.searchLoginHistory(vo)); } @@ -53,10 +51,8 @@ public class SysUserController { public Result getUserAction(@RequestBody UserActionSearch vo) { SysUser user = Util.getUser(session); assert user != null; - if (user.getAdmin() != 1) { - vo.setStartTime(null); - vo.setEndTime(DateUtil.getTimestampBeforeNow(-7)); - } + vo.setUid(user.getId()); + vo.setStartTime(DateUtil.getTimestampBeforeNow(7)); return Result.success(recService.searchUserAction(vo)); } diff --git a/java/src/main/java/com/toesbieya/my/listener/RedisSessionListener.java b/java/src/main/java/com/toesbieya/my/listener/RedisSessionListener.java deleted file mode 100644 index cccc45a..0000000 --- a/java/src/main/java/com/toesbieya/my/listener/RedisSessionListener.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.toesbieya.my.listener; - -import com.toesbieya.my.model.entity.SysUser; -import com.toesbieya.my.module.SocketModule; -import com.toesbieya.my.utils.Util; - -import javax.servlet.http.HttpSessionEvent; -import javax.servlet.http.HttpSessionListener; - -public class RedisSessionListener implements HttpSessionListener { - - @Override - public void sessionCreated(HttpSessionEvent se) { - - } - - @Override - public void sessionDestroyed(HttpSessionEvent se) { - SysUser sysUser = Util.getUser(se.getSession()); - if (sysUser != null) { - SocketModule.logout(sysUser.getId(), "登陆状态过期,请重新登陆"); - } - } -} diff --git a/java/src/main/java/com/toesbieya/my/mapper/RecLoginHistoryMapper.java b/java/src/main/java/com/toesbieya/my/mapper/RecLoginHistoryMapper.java index d1c2bd3..21fe410 100644 --- a/java/src/main/java/com/toesbieya/my/mapper/RecLoginHistoryMapper.java +++ b/java/src/main/java/com/toesbieya/my/mapper/RecLoginHistoryMapper.java @@ -2,7 +2,6 @@ package com.toesbieya.my.mapper; import com.toesbieya.my.model.entity.RecLoginHistory; import com.toesbieya.my.model.vo.search.LoginHistorySearch; -import org.apache.ibatis.annotations.Param; import java.util.List; @@ -10,6 +9,4 @@ public interface RecLoginHistoryMapper { int insert(RecLoginHistory history); List search(LoginHistorySearch vo); - - List getByUid(@Param("uid") Integer uid); } diff --git a/java/src/main/java/com/toesbieya/my/model/vo/search/LoginHistorySearch.java b/java/src/main/java/com/toesbieya/my/model/vo/search/LoginHistorySearch.java index 2442357..89869e1 100644 --- a/java/src/main/java/com/toesbieya/my/model/vo/search/LoginHistorySearch.java +++ b/java/src/main/java/com/toesbieya/my/model/vo/search/LoginHistorySearch.java @@ -8,7 +8,7 @@ import lombok.ToString; @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class LoginHistorySearch extends BaseSearch { - private String uid; + private Integer uid; private String uname; private Integer type; private String ip; diff --git a/java/src/main/java/com/toesbieya/my/model/vo/search/UserActionSearch.java b/java/src/main/java/com/toesbieya/my/model/vo/search/UserActionSearch.java index 3cb301e..577ed30 100644 --- a/java/src/main/java/com/toesbieya/my/model/vo/search/UserActionSearch.java +++ b/java/src/main/java/com/toesbieya/my/model/vo/search/UserActionSearch.java @@ -8,7 +8,7 @@ import lombok.ToString; @ToString(callSuper = true) @EqualsAndHashCode(callSuper = true) public class UserActionSearch extends BaseSearch { - private String uid; + private Integer uid; private String uname; private String ip; private String url; diff --git a/java/src/main/java/com/toesbieya/my/module/SocketModule.java b/java/src/main/java/com/toesbieya/my/module/SocketModule.java index 1522d1e..25b350d 100644 --- a/java/src/main/java/com/toesbieya/my/module/SocketModule.java +++ b/java/src/main/java/com/toesbieya/my/module/SocketModule.java @@ -14,29 +14,31 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import javax.annotation.PostConstruct; import java.util.List; import java.util.Map; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; @Component @Slf4j public class SocketModule { - private static ConcurrentHashMap socketMap = new ConcurrentHashMap<>(SessionConstant.PREDICT_MAX_USER); - private final SocketIOServer server; + private static final ConcurrentHashMap socketMap = new ConcurrentHashMap<>(SessionConstant.PREDICT_MAX_USER); + private static SocketIOServer server; @Autowired public SocketModule(SocketIOServer server) { - this.server = server; + SocketModule.server = server; + server.start(); } public static void logout(Integer uid, String msg) { - UserClient client = socketMap.get(uid); + UserObject obj = socketMap.get(uid); + if (obj == null) return; + SocketIOClient client = server.getClient(obj.getUuid()); if (client == null) return; - client.getClient().sendEvent(SocketConstant.EVENT_LOGOUT, msg); - RedisUtil.expire(SessionConstant.REDIS_NAMESPACE + client.getSessionID()); - client.getClient().disconnect(); - client = null; + client.sendEvent(SocketConstant.EVENT_LOGOUT, msg); + RedisUtil.expire(SessionConstant.REDIS_NAMESPACE + obj.getSessionID()); + client.disconnect(); socketMap.remove(uid); } @@ -44,27 +46,23 @@ public class SocketModule { return uid != null && socketMap.containsKey(uid); } - @PostConstruct - public void init() { - server.start(); - } - @OnConnect public void onConnect(SocketIOClient client) { - UserClient userClient = new UserClient(client); - int uid = userClient.getUid(); - if (socketMap.get(uid) != null) logout(uid, "该账号在其他位置登录"); - socketMap.put(uid, userClient); + UserObject obj = new UserObject(client); + Integer uid = obj.getUid(); + if (socketMap.containsKey(uid)) logout(uid, "该账号在其他位置登录"); + else socketMap.put(uid, obj); } @OnDisconnect public void onDisconnect(SocketIOClient client) { - UserClient userClient = new UserClient(client); - UserClient already = socketMap.get(userClient.getUid()); + UserObject obj = new UserObject(client); + Integer uid = obj.getUid(); + UserObject already = socketMap.get(uid); if (already == null) return; //只有sessionID相同时才移除 - if (userClient.getSessionID().equals(already.getSessionID())) { - socketMap.remove(userClient.getUid()); + if (obj.getSessionID().equals(already.getSessionID())) { + socketMap.remove(uid); } } @@ -83,32 +81,19 @@ public class SocketModule { return sa.substring(1, sa.indexOf(":")); } - private int getUidFromIOClient(SocketIOClient client) { - Map> params = client.getHandshakeData().getUrlParams(); - List list = params.get("id"); - if (list != null && list.size() > 0) { - return Integer.parseInt(list.get(0)); - } - return -1; - } - @Data - private static class UserClient { - private Integer uid; - private String sessionID; - private SocketIOClient client; + private static class UserObject { + private Integer uid;//用户id + private String sessionID;//redis中的sessionID + private UUID uuid;//socketClient自己的sessionID - public UserClient(SocketIOClient client) { + public UserObject(SocketIOClient client) { Map> params = client.getHandshakeData().getUrlParams(); List list = params.get("id"); - if (list != null && list.size() > 0) { - this.uid = Integer.parseInt(list.get(0)); - } + this.uid = Integer.valueOf(list.get(0)); list = params.get("session_id"); - if (list != null && list.size() > 0) { - this.sessionID = list.get(0); - } - this.client = client; + this.sessionID = list.get(0); + this.uuid = client.getSessionId(); } } } diff --git a/java/src/main/resources/mapping/RecLoginHistory.xml b/java/src/main/resources/mapping/RecLoginHistory.xml index 4c98c40..30396c2 100644 --- a/java/src/main/resources/mapping/RecLoginHistory.xml +++ b/java/src/main/resources/mapping/RecLoginHistory.xml @@ -10,12 +10,6 @@ and time = ]]> #{startTime} and time #{endTime} -