xiatian 2 år sedan
förälder
incheckning
73cc58f9ca

+ 18 - 0
src/main/java/cn/com/qmth/mps/job/ClearTimeOutUserJob.java

@@ -0,0 +1,18 @@
+package cn.com.qmth.mps.job;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.mps.service.SessionService;
+
+@Service
+public class ClearTimeOutUserJob {
+	@Autowired
+	private SessionService sessionService;
+	@Scheduled(cron = "0/30 * * * * ?")
+    public void clearTimeOutUser() {
+		sessionService.clearTimeOutUser();
+    }
+
+}

+ 0 - 16
src/main/java/cn/com/qmth/mps/job/OnlineUserCountJob.java

@@ -1,16 +0,0 @@
-package cn.com.qmth.mps.job;
-
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Service;
-
-import cn.com.qmth.mps.util.ActiveDataUtil;
-
-@Service
-public class OnlineUserCountJob {
-
-	@Scheduled(cron = "0/30 * * * * ?")
-    public void updateUserCount() {
-        ActiveDataUtil.updateUserCount();
-    }
-
-}

+ 19 - 0
src/main/java/cn/com/qmth/mps/service/SessionService.java

@@ -0,0 +1,19 @@
+package cn.com.qmth.mps.service;
+
+import cn.com.qmth.mps.bean.User;
+
+public interface SessionService {
+
+	Long updateUserSession(User user);
+
+	void clearTimeOutUser();
+
+	void userLogout(User user);
+
+	void userLogin(User user);
+
+	User getSessionUser(String sessionId);
+
+	int getOnlineCount();
+
+}

+ 22 - 5
src/main/java/cn/com/qmth/mps/service/impl/AuthServiceImpl.java

@@ -7,6 +7,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.qmth.boot.core.exception.StatusException;
+import com.qmth.boot.core.security.service.AuthorizationService;
+import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.boot.tools.uuid.FastUUID;
 
 import cn.com.qmth.mps.bean.User;
@@ -14,8 +16,8 @@ import cn.com.qmth.mps.config.SysProperty;
 import cn.com.qmth.mps.entity.UserEntity;
 import cn.com.qmth.mps.enums.Role;
 import cn.com.qmth.mps.service.AuthService;
+import cn.com.qmth.mps.service.SessionService;
 import cn.com.qmth.mps.service.UserService;
-import cn.com.qmth.mps.util.ActiveDataUtil;
 import cn.com.qmth.mps.util.ByteUtil;
 import cn.com.qmth.mps.util.HttpUtil;
 import cn.com.qmth.mps.util.SHA256;
@@ -23,10 +25,13 @@ import cn.com.qmth.mps.vo.AdminLoginVo;
 import net.sf.json.JSONObject;
 
 @Service
-public class AuthServiceImpl implements AuthService {
+public class AuthServiceImpl implements AuthorizationService<User>, AuthService{
 	private static String uri="https://api.weixin.qq.com/sns/jscode2session";
 	@Autowired
 	private UserService userService;
+	@Autowired
+	private SessionService sessionService;
+	
 	@Autowired
 	private SysProperty sysProperty;
 	@Override
@@ -64,7 +69,7 @@ public class AuthServiceImpl implements AuthService {
 		user.setRole(Role.getById(userEntity.getRoleId()));
 		user.setAccessToken(FastUUID.get());
 		user.buildKey();
-		ActiveDataUtil.userLogin(user);
+		sessionService.userLogin(user);
 		AdminLoginVo vo=new AdminLoginVo();
 		vo.setAccessToken(user.getAccessToken());
 		vo.setName(user.getName());
@@ -98,7 +103,7 @@ public class AuthServiceImpl implements AuthService {
 		user.setRole(Role.getById(userEntity.getRoleId()));
 		user.setAccessToken(FastUUID.get());
 		user.buildKey();
-		ActiveDataUtil.userLogin(user);
+		sessionService.userLogin(user);
 		AdminLoginVo vo=new AdminLoginVo();
 		vo.setAccessToken(user.getAccessToken());
 		vo.setName(user.getName());
@@ -110,8 +115,20 @@ public class AuthServiceImpl implements AuthService {
 
 	@Override
 	public void logout(User user) {
-		ActiveDataUtil.userLogout(user.getId());
+		sessionService.userLogout(user);
 	}
 
+    @Override
+    public User findByIdentity(String identity, SignatureType type, String path) {
+        User user = sessionService.getSessionUser(identity);
+        return user;
+    }
+
+    @Override
+    public boolean hasPermission(User user, String path) {
+        sessionService.updateUserSession(user);
+        return true;
+    }
+
 
 }

+ 66 - 0
src/main/java/cn/com/qmth/mps/service/impl/SessionServiceImpl.java

@@ -0,0 +1,66 @@
+package cn.com.qmth.mps.service.impl;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import cn.com.qmth.mps.bean.User;
+import cn.com.qmth.mps.config.SysProperty;
+import cn.com.qmth.mps.service.SessionService;
+
+@Service
+public class SessionServiceImpl implements SessionService {
+	private final static Map<String, User> userSessionData = new ConcurrentHashMap<>();
+
+	@Autowired
+	private SysProperty sysProperty;
+
+	@Override
+	public Long updateUserSession(User user) {
+		if (user.getSessionId() == null) {
+			return null;
+		}
+		user.setActiveTime(new Date().getTime());
+		userSessionData.put(user.getSessionId(), user);
+		return user.getActiveTime();
+	}
+
+	@Override
+	public void clearTimeOutUser() {
+		Date d = new Date();
+		Long now = d.getTime();
+		for (String k : userSessionData.keySet()) {
+			if (now - userSessionData.get(k).getActiveTime() > getTimeout()) {
+				userSessionData.remove(k);
+			}
+		}
+	}
+
+	@Override
+	public void userLogout(User user) {
+		userSessionData.remove(user.getSessionId());
+	}
+
+	@Override
+	public void userLogin(User user) {
+		updateUserSession(user);
+	}
+
+	@Override
+	public User getSessionUser(String sessionId) {
+		return userSessionData.get(sessionId);
+	}
+
+	@Override
+	public int getOnlineCount() {
+		return userSessionData.size();
+	}
+
+	private long getTimeout() {
+		return (sysProperty.getSessionTimeout() == null ? 7200 : sysProperty.getSessionTimeout()) * 1000L;
+	}
+
+}

+ 0 - 61
src/main/java/cn/com/qmth/mps/util/ActiveDataUtil.java

@@ -1,61 +0,0 @@
-package cn.com.qmth.mps.util;
-
-import java.util.Date;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import cn.com.qmth.mps.bean.User;
-import cn.com.qmth.mps.config.SysProperty;
-import cn.com.qmth.mps.support.SpringContextHolder;
-
-public class ActiveDataUtil {
-
-	private static SysProperty sysProperty = SpringContextHolder.getBean(SysProperty.class);
-
-	private static int online_user_count = 0;
-
-	private final static Long DEFTIMEOUT = (sysProperty.getSessionTimeout() == null ? 7200
-			: sysProperty.getSessionTimeout()) * 1000L;
-
-	private final static Map<Long, User> userActiveData = new ConcurrentHashMap<>();
-
-	public static void updateUserActive(User user) {
-		user.setActiveTime(System.currentTimeMillis());
-		userActiveData.put(user.getId(), user);
-	}
-
-	private static void clearTimeOutUserActive() {
-		Date d = new Date();
-		Long now = d.getTime();
-		for (Long k : userActiveData.keySet()) {
-			if (now - userActiveData.get(k).getActiveTime() > DEFTIMEOUT) {
-				userActiveData.remove(k);
-			}
-		}
-	}
-
-	public static void updateUserCount() {
-		clearTimeOutUserActive();
-		online_user_count = userActiveData.size();
-	}
-
-	public static int getUserCount() {
-		return online_user_count;
-	}
-
-	public static void userLogout(Long userId) {
-		userActiveData.remove(userId);
-		updateUserCount();
-	}
-
-	public static synchronized void userLogin(User user) {
-		updateUserActive(user);
-		updateUserCount();
-
-	}
-
-	public static User getUser(Long userId) {
-		return userActiveData.get(userId);
-	}
-
-}