Quellcode durchsuchen

清除app登录信息

humuyu vor 3 Jahren
Ursprung
Commit
03a7d37641

+ 1 - 0
eladmin-security/src/main/java/me/zhengjie/security/domain/OnlineUserConstant.java

@@ -3,4 +3,5 @@ package me.zhengjie.security.domain;
 public class OnlineUserConstant {
     public static final String SEARCH_USER_WITH_KEWORD = "0";
     public static final String SEARCH_USER_WITH_USERNAME = "1";
+    public static final String PREFIX_APP = "app-token-";
 }

+ 3 - 2
eladmin-security/src/main/java/me/zhengjie/security/security/TokenProvider.java

@@ -22,6 +22,7 @@ import io.jsonwebtoken.io.Decoders;
 import io.jsonwebtoken.security.Keys;
 
 import me.zhengjie.security.config.bean.SecurityProperties;
+import me.zhengjie.security.domain.OnlineUserConstant;
 import me.zhengjie.utils.RedisUtils;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -47,7 +48,7 @@ public class TokenProvider implements InitializingBean {
 	private JwtParser jwtParser;
 	private JwtBuilder jwtBuilder;
 
-	public static final String PREFIX_APP = "app-token-";
+	
 
 	public TokenProvider(SecurityProperties properties, RedisUtils redisUtils) {
 		this.properties = properties;
@@ -87,7 +88,7 @@ public class TokenProvider implements InitializingBean {
 				.setId(String.valueOf(System.nanoTime())).claim(AUTHORITIES_KEY, userName).setSubject(userName)
 				.compact();
 		// setTokenTime(token, userName);
-		return PREFIX_APP + token;
+		return OnlineUserConstant.PREFIX_APP + token;
 	}
 
 	public void setTokenTime(String key, String value) {

+ 49 - 12
eladmin-security/src/main/java/me/zhengjie/security/service/OnlineUserService.java

@@ -18,8 +18,7 @@ package me.zhengjie.security.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.corundumstudio.socketio.SocketIOClient;
-import com.google.gson.JsonObject;
+
 import lombok.extern.slf4j.Slf4j;
 
 import me.zhengjie.security.config.bean.SecurityProperties;
@@ -27,9 +26,6 @@ import me.zhengjie.security.domain.OnlineUserConstant;
 import me.zhengjie.security.service.dto.OnlineUserDto;
 import me.zhengjie.utils.*;
 
-
-import org.apache.commons.collections4.MapUtils;
-
 import org.springframework.data.domain.Pageable;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -49,6 +45,7 @@ public class OnlineUserService {
 
 	private final SecurityProperties properties;
 	private final RedisUtils redisUtils;
+
 	public OnlineUserService(SecurityProperties properties, RedisUtils redisUtils) {
 		this.properties = properties;
 		this.redisUtils = redisUtils;
@@ -126,7 +123,7 @@ public class OnlineUserService {
 		}
 		return set;
 	}
-	
+
 	/**
 	 * 判断公证处和银行绑定关系
 	 *
@@ -190,6 +187,24 @@ public class OnlineUserService {
 	}
 
 	/**
+	 * 查询全部数据,不分页
+	 * 
+	 * @param filterKeyword
+	 * @param type
+	 * @return
+	 */
+	public Map<String, String> getAppAllLoginName() {
+		List<String> keys = redisUtils.scan(OnlineUserConstant.PREFIX_APP + "*");
+		Map<String, String> appOnlineUse = new HashMap<>();
+		for (String key : keys) {
+			JSONObject onlineUserDto = JSON.parseObject((String) redisUtils.get(key));
+			String phone = onlineUserDto.getString("phone");
+			appOnlineUse.put(key,phone);
+		}
+		return appOnlineUse;
+	}
+
+	/**
 	 * 查询全部登录用户
 	 *
 	 * @return
@@ -203,15 +218,16 @@ public class OnlineUserService {
 		}
 		return securityContextUsers;
 	}
+
 	/**
 	 * 查询全部登录用户
 	 *
 	 * @return
 	 */
 	public Set<String> getAllLoginUserName() {
-		List<OnlineUserDto>  online= getAllLoginUser();
+		List<OnlineUserDto> online = getAllLoginUser();
 		Set<String> set = new HashSet<>();
-		for (OnlineUserDto userDto:online) {
+		for (OnlineUserDto userDto : online) {
 			set.add(userDto.getUsername());
 		}
 		return set;
@@ -226,7 +242,15 @@ public class OnlineUserService {
 		key = properties.getOnlineKey() + key;
 		redisUtils.del(key);
 	}
-
+	/**
+	 * 踢出用户
+	 * 
+	 * @param key /
+	 */
+	public void kickApp(String key) {
+		key = properties.getOnlineKey() + key;
+		redisUtils.del(key);
+	}
 	/**
 	 * 退出登录
 	 *
@@ -306,10 +330,23 @@ public class OnlineUserService {
 			if (onlineUser.getUsername().equals(username)) {
 				String token = EncryptUtils.desDecrypt(onlineUser.getKey());
 				kickOut(token);
-				
+
+			}
+		}
+	}
+	/**
+	 * 根据用户名强退用户
+	 * 
+	 * @param username /
+	 */
+	@Async
+	public void kickOutForPhoneUsername(String loginPhone) {
+		Map<String, String> map = getAppAllLoginName();
+		for (String key : map.keySet()) {
+			String phone = map.get(key);
+			if (phone.equals(loginPhone)) {
+				kickApp(key);
 			}
 		}
 	}
-
-
 }

+ 2 - 0
eladmin-system/src/main/java/me/zhengjie/application/admin/service/impl/UserServiceImpl.java

@@ -378,6 +378,8 @@ public class UserServiceImpl implements UserService {
         // 如果用户被禁用,则清除用户登录信息
         if(!resources.getEnabled()){
             onlineUserService.kickOutForUsername(resources.getUsername());
+          //清除app的信息,通过手机号清除数据
+            onlineUserService.kickOutForPhoneUsername(resources.getPhone());
         }
         if (UserConstant.USER_TYPE_NOTARY.equals(resources.getUserType())) {
             NotaryOfficeEntity entity = notaryOfficeMapper.selectById(resources.getComId());

+ 7 - 1
eladmin-system/src/main/java/me/zhengjie/application/bank/service/impl/BankLoginServiceImpl.java

@@ -11,6 +11,10 @@ import me.zhengjie.base.ResultCode;
 import me.zhengjie.dao.mybatis.entity.SysUserEntity;
 import me.zhengjie.exception.AccountNoActivationException;
 import me.zhengjie.security.security.TokenProvider;
+import me.zhengjie.security.service.OnlineUserService;
+
+import java.util.Map;
+
 import org.springframework.stereotype.Service;
 
 /**
@@ -25,6 +29,7 @@ import org.springframework.stereotype.Service;
 public class BankLoginServiceImpl implements BankLoginService {
 	private final SysUserService userService;
 	private final TokenProvider tokenProvider;
+	private final OnlineUserService onlineUserService;
 
 	@Override
 	public ResponseDTO<BankLoginVO> login(BankLoginVO loginVo) {
@@ -36,7 +41,8 @@ public class BankLoginServiceImpl implements BankLoginService {
 			if (!(sysUser.getEnabled() == 1)) {
 				throw new AccountNoActivationException("账号未激活!");
 			}
-			//先移除已经登录的账号
+			 onlineUserService.kickOutForPhoneUsername(loginVo.getPassword());
+			// 先移除已经登录的账号
 			String token = tokenProvider.appToken(loginVo.getPhone());
 			tokenProvider.setTokenTime(token, JSONObject.toJSONString(sysUser));
 			BankLoginVO bankLoginVO = new BankLoginVO();

+ 0 - 2
eladmin-system/src/main/java/me/zhengjie/application/user/app/mq/WebSocketReceiver.java

@@ -69,7 +69,6 @@ public class WebSocketReceiver implements MessageListener {
 		String socketId = String.valueOf(new Date().getTime());
 		List<JSONObject> list = new ArrayList<>();
 		String notaryId = "notary_" + notaryOrder.getNotaryOfficeId();
-		log.info("判断登录的公证处和查询的公证处比较:" + notaryId);
 		// WebSocketMap.set(socketId, list);
 		List<JSONObject> bindNotarys = new ArrayList<>();
 
@@ -112,7 +111,6 @@ public class WebSocketReceiver implements MessageListener {
 					// 用户名,绑定的
 					bindnotary.put("userName", userName);
 					bindNotarys.add(bindnotary);
-			
 					socketClient.sendEvent("pcVideoEvent", obj.toString());
 				}
 			}