Эх сурвалжийг харах

去除用户实体中与用户登录信息实体关联,保留用户登录信息实体与用户实体关联

wangmh 7 жил өмнө
parent
commit
f8dd81b672

+ 13 - 62
sso-server/src/main/java/com/uas/sso/controller/LoginController.java

@@ -60,6 +60,9 @@ public class LoginController extends BaseController {
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private UserRecordService userRecordService;
+
     @Autowired
     private UserspaceService userspaceService;
 
@@ -116,11 +119,8 @@ public class LoginController extends BaseController {
         }
 
         // 校验账户密码输错次数
-        if (user.getUserRecord() == null) {
-            UserRecord userRecord = userService.save(new UserRecord(user.getUserUU()));
-            user.setUserRecord(userRecord);
-        }
-        int pwdErrorCount = user.getUserRecord() == null ? 0 : user.getUserRecord().getPwdErrorCount();
+        UserRecord userRecord = userRecordService.findOne(user.getUserUU());
+        int pwdErrorCount = userRecord == null ? 0 : userRecord.getPwdErrorCount();
         Object loginCaptcha = request.getSession().getAttribute(LOGIN_CAPTCHA);
         String checkCode = loginCaptcha == null ? "" : loginCaptcha.toString();
         if (pwdErrorCount >= PWD_ERROR_FIVE_TIME) {
@@ -137,7 +137,7 @@ public class LoginController extends BaseController {
         // 校验密码
         String encryPwd = userService.getEncryPassword(Const.ENCRY_FORMAT, password, user.getSalt());
         if (!encryPwd.equals(user.getPassword())) {
-            pwdErrorCount = inputErrorPwd(user.getUserRecord());
+            pwdErrorCount = inputErrorPwd(user.getUserUU());
             return error("您输入的账号或密码有误").addAttribute("errorCount", pwdErrorCount);
         }
 
@@ -351,11 +351,15 @@ public class LoginController extends BaseController {
     /**
      * 密码输错处理
      *
-     * @param userRecord 用户登录记录
-     * @return
+     * @param userUU 用户uu号
+     * @return 错误次数
      */
-    private int inputErrorPwd(UserRecord userRecord) {
+    private int inputErrorPwd(Long userUU) {
         // 密码输错次数+1
+        UserRecord userRecord = userRecordService.findOne(userUU);
+        if (userRecord == null) {
+            userRecord = new UserRecord(userUU);
+        }
         int pwdErrorCount = userRecord.getPwdErrorCount();
         userRecord.setPwdErrorCount(++pwdErrorCount);
         userService.save(userRecord);
@@ -364,59 +368,6 @@ public class LoginController extends BaseController {
         return pwdErrorCount;
     }
 
-    /**
-     * 根据用户名获得用户账号信息
-     *
-     * @param appId 应用
-     * @param username 用户名
-     * @return
-     */
-    private List<UserAccount> getUserAccountByUserName(String appId, String username) {
-        String type = AccountTypeUtils.getAccountType(username);
-        if (AccountTypeUtils.MOBILE.equals(type)) {
-            // 手机号登录
-            return userAccountService.findByMobile(appId, username);
-        }
-        if (AccountTypeUtils.EMAIL.equals(type)) {
-            // 邮箱登录
-            return userAccountService.findByEmail(appId, username);
-        }
-        if (AccountTypeUtils.UU_NUMBER.equals(type)) {
-            // uu号登录
-            return userAccountService.findByUserUU(appId, Long.valueOf(username));
-        }
-
-        // 其余情况
-        return null;
-    }
-
-    /**
-     * 根据用户名和企业uu找到用户信息
-     *
-     * @param appId 应用
-     * @param username 用户名
-     * @param spaceUU 企业uu号
-     * @return
-     */
-    private UserAccount getUserAccountByUserName(String appId, String username, String spaceUU) {
-        String type = AccountTypeUtils.getAccountType(username);
-        if (AccountTypeUtils.MOBILE.equals(type)) {
-            // 手机号登录
-            return userAccountService.findOneByMobile(appId, username, Long.valueOf(spaceUU));
-        }
-        if (AccountTypeUtils.EMAIL.equals(type)) {
-            // 邮箱登录
-            return userAccountService.findOneByEmail(appId, username, Long.valueOf(spaceUU));
-        }
-        if (AccountTypeUtils.UU_NUMBER.equals(type)) {
-            // uu号登录
-            return userAccountService.findOneByUserUU(appId, Long.valueOf(username), Long.valueOf(spaceUU));
-        }
-
-        // 其余情况
-        return null;
-    }
-
     /**
      * 用户信息没问题,直接登录
      *

+ 6 - 1
sso-server/src/main/java/com/uas/sso/controller/YunCenterController.java

@@ -2,6 +2,7 @@ package com.uas.sso.controller;
 
 import com.alibaba.fastjson.JSONObject;
 import com.uas.sso.core.Status;
+import com.uas.sso.entity.UserRecord;
 import com.uas.sso.service.*;
 import org.springframework.data.domain.Page;
 import com.uas.sso.core.Const;
@@ -30,6 +31,9 @@ public class YunCenterController extends BaseController {
     @Autowired
     private UserService userService;
 
+    @Autowired
+    private UserRecordService userRecordService;
+
     @Autowired
     private UserspaceService userspaceService;
 
@@ -53,9 +57,10 @@ public class YunCenterController extends BaseController {
         User user = userService.findOne(userAccount.getUserUU());
         user.setSalt(null);
         user.setPassword(null);
+        UserRecord userRecord = userRecordService.findOne(user.getUserUU());
         data.put("user", new ModelMap().addAllAttributes(JSONObject.parseObject(JSONObject.toJSONString(user)))
                 .addAttribute("hasQuestion", !CollectionUtils.isEmpty(user.getQuestions()))
-                .addAttribute("lastLoginTime", user.getUserRecord() == null ? null : user.getUserRecord().getLastLoginTime()));
+                .addAttribute("lastLoginTime", userRecord == null ? null : userRecord.getLastLoginTime()));
         if (userAccount.getSpaceUU() != null) {
             Userspace userspace = userspaceService.findOne(userAccount.getSpaceUU());
             data.put("userspace", userspace);

+ 2 - 33
sso-server/src/main/java/com/uas/sso/entity/User.java

@@ -211,13 +211,6 @@ public class User implements Serializable {
     @Column(name = "im_id")
     private String imId;
 
-    /**
-     * 用户登录记录
-     */
-    @com.fasterxml.jackson.annotation.JsonIgnore
-    @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST}, mappedBy = "user")
-    private UserRecord userRecord;
-
     /**
      * 密保问题
      */
@@ -408,6 +401,8 @@ public class User implements Serializable {
         this.wxOpenid = wxOpenid;
     }
 
+    @JsonIgnore
+    @JSONField(deserialize = false)
     public String getWxUnionid() {
         return wxUnionid;
     }
@@ -480,16 +475,6 @@ public class User implements Serializable {
         this.imId = imId;
     }
 
-    @JsonIgnore
-    @JSONField(serialize = false)
-    public UserRecord getUserRecord() {
-        return userRecord;
-    }
-
-    public void setUserRecord(UserRecord userRecord) {
-        this.userRecord = userRecord;
-    }
-
     @JsonIgnore
     @JSONField(serialize = false)
     public List<UserQuestion> getQuestions() {
@@ -500,22 +485,6 @@ public class User implements Serializable {
         this.questions = questions;
     }
 
-    public Timestamp getLastLoginTime() {
-        if (userRecord != null && userRecord.getLastLoginTime() != null) {
-            return userRecord.getLastLoginTime();
-        } else {
-            return null;
-        }
-    }
-
-    public Integer getPwdErrorCount() {
-        if (userRecord != null) {
-            return userRecord.getPwdErrorCount();
-        } else {
-            return null;
-        }
-    }
-
     @JsonIgnore
     @JSONField(serialize = false)
     public Set<Userspace> getUserSpaces() {

+ 0 - 29
sso-server/src/main/java/com/uas/sso/service/UserAccountService.java

@@ -18,26 +18,6 @@ public interface UserAccountService {
      */
     List<UserAccount> findAll();
 
-    /**
-     * 根据手机号查找用户账号
-     *
-     * @param appId 应用id
-     * @param mobile 手机号
-     * @param spaceUU 企业uu号
-     * @return
-     */
-    UserAccount findOneByMobile(String appId, String mobile, Long spaceUU);
-
-    /**
-     * 根据邮箱查找用户账号
-     *
-     * @param appId 应用id
-     * @param email 邮箱
-     * @param spaceUU 企业uu号
-     * @return
-     */
-    UserAccount findOneByEmail(String appId, String email, Long spaceUU);
-
     /**
      * 根据uu号查找用户账号
      *
@@ -57,15 +37,6 @@ public interface UserAccountService {
      */
     List<UserAccount> findByMobile(String appId, String mobile);
 
-    /**
-     * 根据邮箱和应用找到用户账号信息
-     *
-     * @param appId 应用id
-     * @param email 邮箱
-     * @return
-     */
-    List<UserAccount> findByEmail(String appId, String email);
-
     /**
      * 根据用户uu号和应用找到用户账号信息
      *

+ 18 - 0
sso-server/src/main/java/com/uas/sso/service/UserRecordService.java

@@ -1,5 +1,6 @@
 package com.uas.sso.service;
 
+import com.uas.sso.entity.UserRecord;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -11,5 +12,22 @@ import org.springframework.stereotype.Service;
 @Service
 public interface UserRecordService {
 
+    /**
+     * 清空所有用户密码错误次数
+     */
     void clearPwdErrorCount();
+
+    /**
+     * 根据用户uu号获取获取登录信息
+     * @param userUU 用户uu号
+     * @return
+     */
+    UserRecord findOne(Long userUU);
+
+    /**
+     * 保存用户登录记录
+     * @param userRecord 用户登录记录
+     * @return
+     */
+    UserRecord save(UserRecord userRecord);
 }

+ 1 - 1
sso-server/src/main/java/com/uas/sso/service/impl/PersonalAccountServiceImpl.java

@@ -26,7 +26,7 @@ public class PersonalAccountServiceImpl implements PersonalAccountService {
      */
     private static final String JPQL= "select new com.uas.sso.entity.UserAccount(user.userUU, user.vipName, user.mobile, user.mobileArea, " +
             "user.mobileValidCode, user.password, user.salt, user.email, user.emailValidCode, " +
-            "user.identityValidCode, user.lock, app.uid, ur.lastLoginTime) from User user, App app left join user.userRecord ur where 1=1 ";
+            "user.identityValidCode, user.lock, app.uid, ur.lastLoginTime) from User user, App app, UserRecord ur where user.userUU = ur.userUU ";
 
     @Override
     public List<UserAccount> findAll() {

+ 1 - 39
sso-server/src/main/java/com/uas/sso/service/impl/UserAccountServiceImpl.java

@@ -28,7 +28,7 @@ public class UserAccountServiceImpl implements UserAccountService {
     private static final String JPQL= "select new com.uas.sso.entity.UserAccount(user.userUU, user.vipName, user.mobile, user.mobileArea, " +
             "user.mobileValidCode, user.password, user.salt, user.email, user.emailValidCode, " +
             "user.identityValidCode, user.lock, us.spaceUU, us.spaceName, us.businessCode, " +
-            "us.domain, app.uid, ur.lastLoginTime) from User user inner join user.userSpaces us inner join us.apps app left join user.userRecord ur where 1=1 ";
+            "us.domain, app.uid, ur.lastLoginTime) from User user inner join user.userSpaces us inner join us.apps app, UserRecord ur where user.userUU = ur.userUU ";
 
     @Override
     public List<UserAccount> findAll() {
@@ -38,32 +38,6 @@ public class UserAccountServiceImpl implements UserAccountService {
         return reports;
     }
 
-    @Override
-    public UserAccount findOneByMobile(String appId, String mobile, Long spaceUU) {
-        String sql = JPQL + " and app.uid = ?1 and user.mobile = ?2 and us.spaceUU = ?3";
-        //建立有类型的查询
-        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
-        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
-        reportTypedQuery.setParameter(1, appId);
-        reportTypedQuery.setParameter(2, mobile);
-        reportTypedQuery.setParameter(3, spaceUU);
-        List<UserAccount> reports= reportTypedQuery.getResultList();
-        return CollectionUtils.isEmpty(reports) ? null : reports.get(0);
-    }
-
-    @Override
-    public UserAccount findOneByEmail(String appId, String email, Long spaceUU) {
-        String sql = JPQL + " and app.uid = ?1 and user.email = ?2 and us.spaceUU = ?3";
-        //建立有类型的查询
-        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
-        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
-        reportTypedQuery.setParameter(1, appId);
-        reportTypedQuery.setParameter(2, email);
-        reportTypedQuery.setParameter(3, spaceUU);
-        List<UserAccount> reports= reportTypedQuery.getResultList();
-        return CollectionUtils.isEmpty(reports) ? null : reports.get(0);
-    }
-
     @Override
     public UserAccount findOneByUserUU(String appId, Long userUU, Long spaceUU) {
         String sql = JPQL + " and app.uid = ?1 and user.userUU = ?2 and us.spaceUU = ?3";
@@ -89,18 +63,6 @@ public class UserAccountServiceImpl implements UserAccountService {
         return reports;
     }
 
-    @Override
-    public List<UserAccount> findByEmail(String appId, String email) {
-        String sql = JPQL + " and app.uid = ?1 and user.email = ?2";
-        //建立有类型的查询
-        TypedQuery<UserAccount> reportTypedQuery= entityManager.createQuery(sql, UserAccount.class);
-        //另外有详细查询条件的在jpql中留出参数位置来(?1 ?2 ?3....),然后在这设置
-        reportTypedQuery.setParameter(1, appId);
-        reportTypedQuery.setParameter(2, email);
-        List<UserAccount> reports= reportTypedQuery.getResultList();
-        return reports;
-    }
-
     @Override
     public List<UserAccount> findByUserUU(String appId, Long userUU) {
         String sql = JPQL + " and app.uid = ?1 and user.userUU = ?2";

+ 20 - 0
sso-server/src/main/java/com/uas/sso/service/impl/UserRecordServiceImpl.java

@@ -1,6 +1,9 @@
 package com.uas.sso.service.impl;
 
+import com.uas.sso.dao.UserDao;
 import com.uas.sso.dao.UserRecordDao;
+import com.uas.sso.entity.User;
+import com.uas.sso.entity.UserRecord;
 import com.uas.sso.service.UserRecordService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -17,9 +20,26 @@ public class UserRecordServiceImpl implements UserRecordService {
     @Autowired
     private UserRecordDao userRecordDao;
 
+    @Autowired
+    private UserDao userDao;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void clearPwdErrorCount() {
         userRecordDao.clearPwdErrorCount();
     }
+
+    @Override
+    public UserRecord findOne(Long userUU) {
+        return userRecordDao.findOne(userUU);
+    }
+
+    @Override
+    public UserRecord save(UserRecord userRecord) {
+        User user = userDao.findOne(userRecord.getUserUU());
+        if (user == null) {
+            throw new IllegalArgumentException("该用户不存在");
+        }
+        return userRecordDao.save(userRecord);
+    }
 }

+ 5 - 5
sso-server/src/main/java/com/uas/sso/service/impl/UserServiceImpl.java

@@ -126,12 +126,11 @@ public class UserServiceImpl implements UserService {
         user.setEmailValidCode((short) Status.NOT_APPLYING.getCode());
         user.setIdentityValidCode((short) Status.NOT_APPLYING.getCode());
         user.setPassword(getEncryPassword(Const.ENCRY_FORMAT, user.getPassword(), user.getSalt()));
-        user.setUserRecord(new UserRecord());
-        user.getUserRecord().setUser(user);
-        user.getUserRecord().setUserUU(user.getUserUU());
         user.setFromApp(appId);
 
         user = userDao.save(user);
+        UserRecord userRecord = new UserRecord(user.getUserUU());
+        userRecordDao.save(userRecord);
         userLogger.info(user, Type.UPDATE_REGISTER.getValue());
 
         // 同步到各个应用
@@ -218,10 +217,11 @@ public class UserServiceImpl implements UserService {
         if (user == null) {
             throw new VisibleError("用户名不存在");
         }
-        if (user.getUserRecord() == null) {
+        UserRecord userRecord = userRecordDao.findOne(user.getUserUU());
+        if (userRecord == null) {
             return 0;
         }
-        return user.getUserRecord().getPwdErrorCount();
+        return userRecord.getPwdErrorCount();
     }
 
     @Override