|
@@ -99,7 +99,7 @@ public class LoginService implements ILoginService {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空无法登录");
|
|
|
}
|
|
|
//校验用户是否已经登录
|
|
|
- Object userInfo = getLoginUserInfoFromRedis(userRequest);
|
|
|
+ Object userInfo = getLoginUserInfoFromRedis(userRequest.getToken());
|
|
|
if (userInfo != null) {
|
|
|
return RestResponse.fail(ApiConstants.RESULT_ERROR, "账号已经登录无法重复登录");
|
|
|
}
|
|
@@ -125,16 +125,14 @@ public class LoginService implements ILoginService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param userRequest 用户手机号, 用户端类型
|
|
|
* @return redis中用户的信息
|
|
|
* @description
|
|
|
* @date 2020/4/22 3:35 下午
|
|
|
*/
|
|
|
- public Object getLoginUserInfoFromRedis(UserRequest userRequest) {
|
|
|
- //拼接键
|
|
|
- String mobileUserInfo = userRequest.getMobile()
|
|
|
- + ApiConstants.UserConstants.USER_INFO_MOBILE + userRequest.getMobileType();
|
|
|
+ public Object getLoginUserInfoFromRedis(String token) {
|
|
|
+ Object mobileUserInfo = redisTemplate.opsForValue().get(token);
|
|
|
//获取电话是否在redis中存在
|
|
|
+ assert mobileUserInfo != null;
|
|
|
return redisTemplate.opsForValue().get(mobileUserInfo);
|
|
|
}
|
|
|
|
|
@@ -144,10 +142,9 @@ public class LoginService implements ILoginService {
|
|
|
* @date 2020/4/22 3:39 下午
|
|
|
*/
|
|
|
public void blankingUserInfoIntoRedis(UserRequest userRequest) {
|
|
|
- //拼接键
|
|
|
- String mobileUserInfo = userRequest.getMobile()
|
|
|
- + ApiConstants.UserConstants.USER_INFO_MOBILE + userRequest.getMobileType();
|
|
|
+ String mobileUserInfo = getUserInfoKeyInRedis(userRequest);
|
|
|
redisTemplate.opsForValue().set(mobileUserInfo, null);
|
|
|
+ redisTemplate.opsForValue().set(userRequest.getToken(), null);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -186,7 +183,7 @@ public class LoginService implements ILoginService {
|
|
|
return restResponse;
|
|
|
}
|
|
|
//更新redis中的信息数据
|
|
|
- updateUserInfoInRedis(userResponse);
|
|
|
+ updateUserInfoInRedis(userRequest, userResponse);
|
|
|
//在session中设置切换团队后的公司id
|
|
|
request.getSession().setAttribute(ApiConstants.CURRENT_COMPANY_ID, userRequest.getCompanyId());
|
|
|
return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "切换团队成功");
|
|
@@ -241,11 +238,7 @@ public class LoginService implements ILoginService {
|
|
|
//封装登录用户信息
|
|
|
Map<String, Object> currentUserInfoMap = getUserInfoMap(userResponse);
|
|
|
String mobileUserInfo = getUserInfoKeyInRedis(userRequest);
|
|
|
- //将token对应用户手机号放入redis中,设置过期时间为30分钟
|
|
|
- redisTemplate.opsForValue().set(userResponse.getToken(), mobileUserInfo, 30L, TimeUnit.MINUTES);
|
|
|
- //将用户手机号对应的用户信息放入redis中, 过期时间为30分钟
|
|
|
- redisTemplate.opsForValue().set(mobileUserInfo, JSONUtil.toJsonPrettyStr(currentUserInfoMap),
|
|
|
- 30L, TimeUnit.MINUTES);
|
|
|
+ putUserInfoToRedis(userRequest, userResponse, currentUserInfoMap, mobileUserInfo);
|
|
|
return userResponse;
|
|
|
}
|
|
|
|
|
@@ -261,7 +254,7 @@ public class LoginService implements ILoginService {
|
|
|
//当前用户id
|
|
|
currentUserInfoMap.put(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
|
|
|
//如果用户类型为空,设置用户类型为普通类型
|
|
|
- int userType = 3;
|
|
|
+ int userType = ApiConstants.UserConstants.TYPE_USER;
|
|
|
if (userResponse.getType() != null) {
|
|
|
userType = userResponse.getType();
|
|
|
}
|
|
@@ -320,13 +313,44 @@ public class LoginService implements ILoginService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * @description 将用户信息放入redis中
|
|
|
+ * @date 2020/4/22 6:09 下午
|
|
|
+ */
|
|
|
+ private void putUserInfoToRedis(UserRequest userRequest, UserResponse userResponse,
|
|
|
+ Map<String, Object> currentUserInfoMap, String mobileUserInfo) {
|
|
|
+ if (ApiConstants.ACCESS_TYPE_APP == userRequest.getMobileType()) {
|
|
|
+ //app端 将token对应用户手机号放入redis中,设置过期时间为30天
|
|
|
+ putUserInfoToRedis(userResponse.getToken(), mobileUserInfo, currentUserInfoMap, TimeUnit.DAYS);
|
|
|
+ } else {
|
|
|
+ //其他端 将token对应用户手机号放入redis中,设置过期时间为30分钟
|
|
|
+ putUserInfoToRedis(userResponse.getToken(), mobileUserInfo, currentUserInfoMap, TimeUnit.MINUTES);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param token token
|
|
|
+ * @param mobileUserInfo 用户键
|
|
|
+ * @param userInfoMap 用户信息
|
|
|
+ * @param timeUnit 持续时间
|
|
|
+ * @description 将用户信息放入redis中
|
|
|
+ * @date 2020/4/22 5:54 下午
|
|
|
+ */
|
|
|
+ private void putUserInfoToRedis(String token, String mobileUserInfo,
|
|
|
+ Map<String, Object> userInfoMap, TimeUnit timeUnit) {
|
|
|
+ //token放入redis中
|
|
|
+ redisTemplate.opsForValue().set(token, mobileUserInfo, 30L, timeUnit);
|
|
|
+ //重新将用户信息放入到redis中
|
|
|
+ redisTemplate.opsForValue().set(mobileUserInfo, JSONUtil.toJsonPrettyStr(userInfoMap), 30L, timeUnit);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @param
|
|
|
* @return
|
|
|
* @description 更新用户在redis中的信息
|
|
|
* @date 2020/2/26 12:52 下午
|
|
|
*/
|
|
|
- private void updateUserInfoInRedis(UserResponse userResponse) {
|
|
|
+ private void updateUserInfoInRedis(UserRequest userRequest, UserResponse userResponse) {
|
|
|
//从redis中获取用户信息
|
|
|
String mobileUserInfo = (String) redisTemplate.opsForValue().get(userResponse.getToken());
|
|
|
Map<String, Object> userInfoMap = JSONUtil.parseObj(redisTemplate.opsForValue().get(mobileUserInfo));
|
|
@@ -336,10 +360,7 @@ public class LoginService implements ILoginService {
|
|
|
userInfoMap.put(ApiConstants.CURRENT_COMPANY_ID, userResponse.getMaintenanceCompany().getId());
|
|
|
//设置用户菜单信息
|
|
|
userInfoMap.put(ApiConstants.CURRENT_PERMISSION_URL, menuService.menuToUrl(userResponse.getMenus()));
|
|
|
- //token放入redis中
|
|
|
- redisTemplate.opsForValue().set(userResponse.getToken(), mobileUserInfo);
|
|
|
- //重新将用户信息放入到redis中
|
|
|
- redisTemplate.opsForValue().set(mobileUserInfo, JSONUtil.toJsonPrettyStr(userInfoMap), 30L, TimeUnit.MINUTES);
|
|
|
+ putUserInfoToRedis(userRequest, userResponse, userInfoMap, mobileUserInfo);
|
|
|
}
|
|
|
|
|
|
/**
|