Browse Source

登录优化

黄远 5 years ago
parent
commit
3e7a206b65

+ 5 - 0
lift-common/src/main/java/cn.com.ty.lift.common/constants/ApiConstants.java

@@ -61,6 +61,11 @@ public class ApiConstants {
      */
     public static final String CURRENT_USER_TYPE = "currentUserType";
 
+    /**
+     *  访问类型 app端访问
+     */
+    public static final int ACCESS_TYPE_APP = 2;
+
     /**
      * 已删除
      */

+ 4 - 4
lift-enterprise-service/pom.xml

@@ -22,10 +22,10 @@
             <artifactId>lift-common</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
-        <!--<dependency>-->
-            <!--<groupId>cn.com.xwy</groupId>-->
-            <!--<artifactId>xwy-cloud-dependencies</artifactId>-->
-        <!--</dependency>-->
+        <dependency>
+            <groupId>cn.com.xwy</groupId>
+            <artifactId>xwy-cloud-dependencies</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
lift-enterprise-service/src/main/resources/application.yml

@@ -5,7 +5,7 @@ spring:
   application:
     name: lift-enterprise-service
   profiles:
-    active: test
+    active: prod
 
 #自动添加createTime、isDelete 等字段
 xwy:

+ 1 - 1
lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/entity/model/UserRequest.java

@@ -22,7 +22,7 @@ public class UserRequest {
     private String inputSmsCode;//用户输入的短信验证码
     private String authCode;//微信授权码
     private String weChatOpenId;//用户微信标识码
-    private String mobileType;//端类型
+    private Integer mobileType;//端类型
     private Long pageSize;//每页条数
     private Long pageNum;//页数
 }

+ 42 - 21
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/LoginService.java

@@ -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);
     }
 
     /**