Browse Source

Merge branch 'dev' of ssh://10.10.101.21/source/sso-parent into hotfix-weixin-wangmh

wangmh 7 years ago
parent
commit
a2cf33c5f6

+ 3 - 0
sso-server/build.gradle

@@ -59,6 +59,9 @@ dependencies {
     compile("org.codehaus.jackson:jackson-core-asl:1.9.13")
     compile("org.codehaus.jackson:jackson-mapper-asl:1.9.13")
     compile("net.sf.ehcache:ehcache:2.10.3")
+    compile("org.hibernate:hibernate-ehcache") {
+      exclude(group: 'net.sf.ehcache', module: 'ehcache-core')
+    }
 
     testCompile("org.springframework.boot:spring-boot-starter-test")
 }

+ 34 - 0
sso-server/src/main/java/com/uas/sso/CacheConfiguration.java

@@ -0,0 +1,34 @@
+package com.uas.sso;
+
+import org.springframework.beans.factory.annotation.Configurable;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.ehcache.EhCacheCacheManager;
+import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.ClassPathResource;
+
+/**
+ * @author wangmh
+ * @create 2018-07-05 20:04
+ * @desc
+ **/
+@Configurable
+@EnableCaching
+public class CacheConfiguration {
+
+    @Bean
+    public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
+        EhCacheManagerFactoryBean ehCacheManagerFactoryBean = new EhCacheManagerFactoryBean();
+        ehCacheManagerFactoryBean.setConfigLocation(new ClassPathResource(
+                "spring/ehcache.xml"));
+        ehCacheManagerFactoryBean.setShared(true);
+        return ehCacheManagerFactoryBean;
+    }
+
+    @Bean
+    public EhCacheCacheManager cacheManager() {
+        EhCacheCacheManager cacheManager = new EhCacheCacheManager();
+        cacheManager.setCacheManager(ehCacheManagerFactoryBean().getObject());
+        return cacheManager;
+    }
+}

+ 16 - 49
sso-server/src/main/java/com/uas/sso/controller/AppealController.java

@@ -4,15 +4,20 @@ import com.alibaba.fastjson.JSON;
 import com.uas.sso.SSOHelper;
 import com.uas.sso.SSOToken;
 import com.uas.sso.entity.*;
+import com.uas.sso.exception.AccountException;
+import com.uas.sso.exception.VisibleError;
 import com.uas.sso.service.*;
 import com.uas.sso.support.SystemSession;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.Assert;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Optional;
+
 
 /**
  * @author wangmh
@@ -82,55 +87,18 @@ public class AppealController extends BaseController {
      */
     @RequestMapping(value = "/resetPwd", method = RequestMethod.POST)
     public ModelMap resetPwd(Appeal appeal, @RequestParam String token, String code, String password, @RequestParam(defaultValue = "sso") String appId) {
-        // 获取申述人,将修改的账号作为申述人
-        User user = userService.findByMobile(appeal.getMobile());
-        if (user == null) {
-            return error("该手机号未注册");
-        }
-        Long submitterUU = user.getUserUU();
-
-        // 校验token
-        Token existToken = tokenService.findOne(token);
-        if (existToken == null || existToken.isExpired()) {
-            return error("验证码已过期,请重新获取");
-        }
-
-        // TODO 参数空检验
-
         // 校验验证码
         checkMobileCode(token, appeal.getMobile(), code);
-
-        // 保存申述信息
-        appeal.setSubmitterUU(submitterUU);
-        appeal.setFromApp(appId);
-        appealService.submitResetPwd(appeal, password);
+        appealService.submitResetPwd(appId, appeal, password);
         return success();
     }
 
     @RequestMapping(value = "/changeAdmin", method = RequestMethod.POST)
     public ModelMap changeAdmin(Appeal appeal, @RequestParam String token, String code, Userspace userspace, @RequestParam(defaultValue = "sso") String appId) {
-        // 校验token
-        Token existToken = tokenService.findOne(token);
-        if (existToken == null || existToken.isExpired()) {
-            return error("验证码已过期,请重新获取");
-        }
-
-        // 校验企业信息
-        Userspace checkSpace = userspaceService.findBySpaceName(userspace.getSpaceName());
-        if (checkSpace == null) {
-            return error("该企业未被注册,请确认");
-        }
-
-        // TODO 参数空检验
-
         // 校验验证码
         checkMobileCode(token, appeal.getMobile(), code);
 
-        // 保存申述信息,把新管理员当作申请人
-        User submitter = userService.findByMobile(appeal.getMobile());
-        appeal.setSubmitterUU(submitter == null ? null : submitter.getUserUU());
-        appeal.setFromApp(appId);
-        appealService.submitChangeAdmin(appeal, userspace, checkSpace.getSpaceUU());
+        appealService.submitChangeAdmin(appId, appeal, userspace);
 
         // 发送短信和邮件通知审核人
         Setting mailReceiver = settingService.findOne("mailReceiverAfterRegister");
@@ -140,18 +108,17 @@ public class AppealController extends BaseController {
         return success();
     }
 
+    /**
+     * 认证账号申述
+     * @param appeal 申述信息
+     * @param token 验证码tokenId
+     * @param code 验证码
+     * @param password 密码
+     * @param appId 应用Id
+     * @return
+     */
     @RequestMapping(value = "/account", method = RequestMethod.POST)
     public ModelMap validAccount(Appeal appeal, String token, String code, String password, @RequestParam(defaultValue = "sso") String appId) {
-        // 校验用户是否登录
-        SSOToken ssoToken = SSOHelper.getToken(request);
-        if (ssoToken == null) {
-            return error("用户未登录");
-        }
-        UserAccount userAccount = JSON.parseObject(ssoToken.getData(), UserAccount.class);
-        if (userAccount == null) {
-            return error("用户未登录");
-        }
-
         // 校验token
         Token existToken = tokenService.findOne(token);
         if (existToken == null || existToken.isExpired()) {

+ 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);

+ 9 - 35
sso-server/src/main/java/com/uas/sso/entity/User.java

@@ -4,16 +4,19 @@ import com.alibaba.fastjson.annotation.JSONField;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import java.io.Serializable;
-import java.sql.Time;
 import java.sql.Timestamp;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import javax.persistence.*;
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.Table;
 
 import com.uas.sso.core.Const;
 import org.codehaus.jackson.annotate.JsonIgnore;
-import org.springframework.transaction.annotation.Transactional;
+import org.hibernate.annotations.*;
+import org.hibernate.annotations.Cache;
 
 /**
  * 用户信息
@@ -24,6 +27,8 @@ import org.springframework.transaction.annotation.Transactional;
 @Entity
 @Table(name = "sso$user")
 @JsonInclude(Include.NON_NULL)
+@Cacheable
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "UserCache")
 public class User implements Serializable {
 
     /**
@@ -206,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;
-
     /**
      * 密保问题
      */
@@ -403,6 +401,8 @@ public class User implements Serializable {
         this.wxOpenid = wxOpenid;
     }
 
+    @JsonIgnore
+    @JSONField(deserialize = false)
     public String getWxUnionid() {
         return wxUnionid;
     }
@@ -475,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() {
@@ -495,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() {

+ 4 - 0
sso-server/src/main/java/com/uas/sso/entity/Userspace.java

@@ -8,6 +8,8 @@ import javax.persistence.*;
 
 import com.uas.sso.core.Const;
 import org.codehaus.jackson.annotate.JsonIgnore;
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
 
 /**
  * 企业实体
@@ -17,6 +19,8 @@ import org.codehaus.jackson.annotate.JsonIgnore;
  */
 @Entity
 @Table(name = "sso$userspace")
+@Cacheable
+@Cache(usage = CacheConcurrencyStrategy.READ_WRITE, region = "UserSpaceCache")
 public class Userspace implements Serializable {
 
     /**

+ 4 - 3
sso-server/src/main/java/com/uas/sso/service/AppealService.java

@@ -12,18 +12,19 @@ public interface AppealService {
 
     /**
      * 提交重置密码申述
+     * @param appId
      * @param appeal 重置密码申述信息
      * @param password 密码
      */
-    void submitResetPwd(Appeal appeal, String password);
+    void submitResetPwd(String appId, Appeal appeal, String password);
 
     /**
      * 提交更换管理员申述
+     * @param appId 申述信息
      * @param appeal 申述信息
      * @param userspace 企业信息
-     * @param spaceUU 更换管理员的企业uu号
      */
-    void submitChangeAdmin(Appeal appeal, Userspace userspace, Long spaceUU);
+    void submitChangeAdmin(String appId, Appeal appeal, Userspace userspace);
 
     /**
      * 提交验证账号申述

+ 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);
 }

+ 46 - 20
sso-server/src/main/java/com/uas/sso/service/impl/AppealServiceImpl.java

@@ -1,10 +1,12 @@
 package com.uas.sso.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.uas.sso.AccountConfig;
 import com.uas.sso.core.Status;
 import com.uas.sso.dao.AppealDao;
 import com.uas.sso.entity.Appeal;
 import com.uas.sso.entity.User;
+import com.uas.sso.entity.UserAccount;
 import com.uas.sso.entity.Userspace;
 import com.uas.sso.exception.VisibleError;
 import com.uas.sso.service.AppealService;
@@ -16,6 +18,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.ui.ModelMap;
 
 import java.sql.Timestamp;
+import java.util.Optional;
 
 /**
  * @author wangmh
@@ -35,10 +38,22 @@ public class AppealServiceImpl implements AppealService {
     private UserService userService;
 
     @Override
-    public void submitResetPwd(Appeal appeal, String password) {
+    public void submitResetPwd(String appId, Appeal appeal, String password) {
+        // 获取用户信息
+        String mobile = Optional.ofNullable(appeal.getMobile())
+                .map(value -> "".equals(value) ? null : value)
+                .orElseThrow(() -> new NullPointerException("手机号不能为空"));
+        User user = Optional.ofNullable(mobile)
+                .map(value -> userService.findByMobile(value))
+                .orElseThrow(() -> new IllegalArgumentException("该手机号未注册"));
+        appId = Optional.ofNullable(appId)
+                .map(value -> "".equals(value) ? AccountConfig.ACCOUNT_CENTER : value)
+                .orElse(AccountConfig.ACCOUNT_CENTER);
+
         // 设置默认信息
         appeal.setSubmitDate(new Timestamp(System.currentTimeMillis()));
-        User user = userService.findOne(appeal.getSubmitterUU());
+        appeal.setSubmitterUU(user.getUserUU());
+        appeal.setFromApp(appId);
         ModelMap data = new ModelMap();
         data.put("password", password);
         data.put("oldMobile", user.getMobile());
@@ -56,26 +71,39 @@ public class AppealServiceImpl implements AppealService {
     }
 
     @Override
-    public void submitChangeAdmin(Appeal appeal, Userspace userspace, Long spaceUU) {
-        User newAdmin = userService.findByMobile(appeal.getMobile());
-        // 设置企业信息
-        userspace.setSpaceUU(spaceUU);
-        Userspace oldSpace = userspaceService.findOne(spaceUU);
+    public void submitChangeAdmin(String appId, Appeal appeal, Userspace userspace) {
+        String spaceName = Optional.ofNullable(userspace)
+                .map(value -> value.getSpaceName())
+                .orElseThrow(() -> new NullPointerException("企业名称不能为空"));
+        Userspace oldSpace = Optional.ofNullable(spaceName)
+                .map(value -> userspaceService.findBySpaceName(value))
+                .orElseThrow(() -> new IllegalArgumentException("该企业未被注册,请确认"));
+        User newAdmin = Optional.ofNullable(appeal)
+                .map(Appeal::getMobile)
+                .map(value -> userService.findByMobile(value))
+                .orElse(null);
+        appId = Optional.ofNullable(appId)
+                .map(value -> "".equals(value) ? AccountConfig.ACCOUNT_CENTER : value)
+                .orElse(AccountConfig.ACCOUNT_CENTER);
+        userspace.setSpaceUU(oldSpace.getSpaceUU());
         userspace.setAdmin(oldSpace.getAdmin());
 
         // 设置默认信息
         appeal.setSubmitDate(new Timestamp(System.currentTimeMillis()));
+        appeal.setFromApp(appId);
         ModelMap data = new ModelMap(userspace);
-        data.put("newAdminName", newAdmin == null ? appeal.getContactName() : newAdmin.getVipName());
-        data.put("newAdminMobile", newAdmin == null ? appeal.getMobile() : newAdmin.getMobile());
-        data.put("newAdminEmail", newAdmin == null ? appeal.getContactEmail() : newAdmin.getEmail());
+        data.put("newAdminName", Optional.ofNullable(newAdmin).map(User::getVipName).orElse(appeal.getContactName()));
+        data.put("newAdminMobile", Optional.ofNullable(newAdmin).map(User::getMobile).orElse(appeal.getMobile()));
+        data.put("newAdminEmail", Optional.ofNullable(newAdmin).map(User::getEmail).orElse(appeal.getContactEmail()));
         appeal.setSubmitInfo(JSON.toJSONString(data));
         appeal.setStatus((short) Status.TO_BE_CERTIFIED.getCode());
         appeal.setType(Appeal.Type.CHANGE_ADMIN.getDesc());
-        if (SystemSession.getUserAccount() != null) {
-            appeal.setSubmitterUU(SystemSession.getUserAccount().getUserUU());
-            appeal.setSubmitterName(SystemSession.getUserAccount().getVipName());
-        }
+
+        // 如何登录,提交人信息改成登录用户
+        Optional.ofNullable(SystemSession.getUserAccount()).ifPresent(value -> {
+            appeal.setSubmitterUU(value.getUserUU());
+            appeal.setSubmitterName(value.getVipName());
+        });
 
         // 保存申述信息
         appealDao.save(appeal);
@@ -85,11 +113,9 @@ public class AppealServiceImpl implements AppealService {
     @Override
     public void submitValidAccount(Appeal appeal, String password) {
         // 设置默认信息
-        if (SystemSession.getUserAccount() == null) {
-            throw new VisibleError("用户未登录");
-        }
+        UserAccount userAccount = Optional.ofNullable(SystemSession.getUserAccount()).orElseThrow(() -> new VisibleError("用户未登录"));
         appeal.setSubmitDate(new Timestamp(System.currentTimeMillis()));
-        User user = userService.findOne(SystemSession.getUserAccount().getUserUU());
+        User user = userService.findOne(userAccount.getUserUU());
         ModelMap data = new ModelMap();
         data.put("password", password);
         data.put("oldMobile", user.getMobile());
@@ -97,8 +123,8 @@ public class AppealServiceImpl implements AppealService {
         appeal.setSubmitInfo(JSON.toJSONString(data));
         appeal.setStatus((short) Status.TO_BE_CERTIFIED.getCode());
         appeal.setType(Appeal.Type.VALID_ACCOUNT.getDesc());
-        appeal.setSubmitterUU(SystemSession.getUserAccount().getUserUU());
-        appeal.setSubmitterName(SystemSession.getUserAccount().getVipName());
+        appeal.setSubmitterUU(userAccount.getUserUU());
+        appeal.setSubmitterName(userAccount.getVipName());
 
         // 保存申述信息
         appealDao.save(appeal);

+ 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

+ 11 - 1
sso-server/src/main/resources/application.yml

@@ -7,15 +7,25 @@ spring:
   application:
     name: sso-server
   profiles:
-    active: prod
+    active: dev
   jpa:
     database: MYSQL
     show-sql: false
     properties:
+      javax:
+        persistence:
+          sharedCache:
+            mode: ENABLE_SELECTIVE
       hibernate:
         dialect: org.hibernate.dialect.MySQL5Dialect
         hbm2ddl:
           auto: update
+        generate_statistics: false
+        cache:
+          use_second_level_cache: true
+          use_query_cache: true
+          region:
+            factory_class: org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
 
   http:
     encoding:

+ 0 - 23
sso-server/src/main/resources/spring/spring-ehcache.xml

@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:cache="http://www.springframework.org/schema/cache"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans
-        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
-        http://www.springframework.org/schema/cache
-        http://www.springframework.org/schema/cache/spring-cache-3.2.xsd">
-
-    <description>ehcache缓存配置管理文件</description>
-
-    <!-- 启用缓存注解开关 -->
-    <cache:annotation-driven cache-manager="cacheManager"/>
-
-    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
-        <property name="cacheManager" ref="ehcache"/>
-    </bean>
-
-    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
-        <property name="configLocation" value="classpath:spring/ehcache.xml"/>
-    </bean>
-
-</beans>