Browse Source

添加企业实名认证,修改手机号邮箱

wangmh 8 years ago
parent
commit
2942e34bb8
23 changed files with 1283 additions and 16 deletions
  1. 8 0
      pom.xml
  2. 19 0
      sso-server/pom.xml
  3. 71 5
      sso-server/src/main/java/com/uas/sso/controller/BaseController.java
  4. 2 2
      sso-server/src/main/java/com/uas/sso/controller/PersonalRegisterController.java
  5. 0 1
      sso-server/src/main/java/com/uas/sso/controller/ResetPasswordController.java
  6. 329 0
      sso-server/src/main/java/com/uas/sso/controller/UpdateUserController.java
  7. 26 0
      sso-server/src/main/java/com/uas/sso/controller/UserManagerController.java
  8. 29 3
      sso-server/src/main/java/com/uas/sso/controller/UserspaceManageController.java
  9. 116 0
      sso-server/src/main/java/com/uas/sso/controller/ValidController.java
  10. 20 0
      sso-server/src/main/java/com/uas/sso/dao/UserDao.java
  11. 18 0
      sso-server/src/main/java/com/uas/sso/entity/Token.java
  12. 2 2
      sso-server/src/main/java/com/uas/sso/entity/User.java
  13. 1 1
      sso-server/src/main/java/com/uas/sso/entity/UserQuestion.java
  14. 2 2
      sso-server/src/main/java/com/uas/sso/entity/Userspace.java
  15. 53 0
      sso-server/src/main/java/com/uas/sso/service/UserService.java
  16. 28 0
      sso-server/src/main/java/com/uas/sso/service/UserspaceService.java
  17. 20 0
      sso-server/src/main/java/com/uas/sso/service/UserspaceValidService.java
  18. 97 0
      sso-server/src/main/java/com/uas/sso/service/impl/UserServiceImpl.java
  19. 49 0
      sso-server/src/main/java/com/uas/sso/service/impl/UserspaceServiceImpl.java
  20. 19 0
      sso-server/src/main/java/com/uas/sso/service/impl/UserspaceValidServiceImpl.java
  21. 35 0
      sso-server/src/main/java/com/uas/sso/util/FileUrl.java
  22. 306 0
      sso-server/src/main/java/com/uas/sso/util/HttpUtils.java
  23. 33 0
      sso-server/src/main/java/com/uas/sso/util/ParameterUtils.java

+ 8 - 0
pom.xml

@@ -31,6 +31,7 @@
         <zkclient.version>0.1</zkclient.version>
         <dfs.version>0.0.2</dfs.version>
 
+        <upload.version>1.3.2</upload.version>
         <pinyin.version>2.5.1</pinyin.version>
     </properties>
 
@@ -93,6 +94,13 @@
                 <version>${dfs.version}</version>
             </dependency>
 
+            <!-- fileupload -->
+            <dependency>
+                <groupId>commons-fileupload</groupId>
+                <artifactId>commons-fileupload</artifactId>
+                <version>${upload.version}</version>
+            </dependency>
+
             <dependency>
                 <groupId>com.belerweb</groupId>
                 <artifactId>pinyin4j</artifactId>

+ 19 - 0
sso-server/pom.xml

@@ -113,6 +113,25 @@
 			<groupId>com.belerweb</groupId>
 			<artifactId>pinyin4j</artifactId>
 		</dependency>
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+            <version>4.4</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>4.4.5</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.4</version>
+        </dependency>
 	</dependencies>
 
 	<build>

+ 71 - 5
sso-server/src/main/java/com/uas/sso/controller/BaseController.java

@@ -1,6 +1,7 @@
 package com.uas.sso.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.uas.message.mail.service.MailService;
 import com.uas.message.sms.service.SmsService;
 import com.uas.sso.core.Const;
 import com.uas.sso.core.PasswordStrength;
@@ -44,6 +45,9 @@ public class BaseController {
     @Autowired
     protected SmsService smsService;
 
+    @Autowired
+    protected MailService mailService;
+
     @Autowired
     protected SettingService settingService;
 
@@ -142,17 +146,21 @@ public class BaseController {
     }
 
     /**
-     * 获取手机号验证码
+     * 获取验证码
      *
+     * @param mobile 手机号
+     * @param email 邮箱
      * @return tokenId
      */
-    protected String getMobileCode(String mobile) {
+    protected String getValidCode(String mobile, String email) {
         // 随机获得验证码
         String code = StringUtil.getRandomNumber(6);
         Token token = new Token(code, 10 * 60);
+        System.out.println(code);
 
         // 设置绑定手机,防止获取验证码之后修改手机号
         token.setMobile(mobile);
+        token.setEmail(email);
 
         // 将token存到Redis服务器上
         tokenService.save(token);
@@ -172,21 +180,54 @@ public class BaseController {
             e.printStackTrace();
         }
 
+        // 邮件
+        try {
+            if (!StringUtils.isEmpty(email)) {
+                Setting mailTplId = settingService.findOne("templateForSendEmailWhenRegister");
+                if (!StringUtils.isEmpty(mailTplId)) {
+                    mailService.send(mailTplId.getValue(), email, data);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
         // 返回tokenId
         return token.getId();
     }
 
     /**
-     * 校验手机号
+     * 获取手机号验证码
+     *
+     * @param mobile 手机号
+     * @return
+     */
+    protected String getMobileCode(String mobile) {
+        return getValidCode(mobile, null);
+    }
+
+    /**
+     * 获取邮箱验证码
+     *
+     * @param email 邮箱
+     * @return
+     */
+    protected String getEmailCode(String email) {
+        return getValidCode(null, email);
+    }
+
+    /**
+     * 校验验证码
      *
      * @param token  验证码tokenID
      * @param mobile 手机号
+     * @param email 邮箱
      * @param code   验证码
      * @return
      * @throws VisibleError 校验失败则抛异常
      *                      当参数异常,token过期或者token绑定的手机号不对时抛出此异常
      */
-    protected void checkMobileCode(String token, String mobile, String code) {
+    protected void checkValidCode(String token, String mobile, String email, String code) {
         // 校验参数
         if (StringUtils.isEmpty(token) || StringUtils.isEmpty(code)) {
             throw new VisibleError("参数错误");
@@ -195,7 +236,10 @@ public class BaseController {
         if (existToken == null || existToken.isExpired()) {
             throw new VisibleError("验证码已经失效,请重新获取");
         }
-        if (StringUtils.isEmpty(mobile) || !mobile.equals(existToken.getMobile())) {
+        if (!StringUtils.isEmpty(existToken.getMobile()) && !existToken.getMobile().equals(mobile)) {
+            throw new VisibleError("手机号被修改,请重新获取验证码");
+        }
+        if (!StringUtils.isEmpty(existToken.getEmail()) && !existToken.getEmail().equals(email)) {
             throw new VisibleError("手机号被修改,请重新获取验证码");
         }
 
@@ -206,6 +250,28 @@ public class BaseController {
         }
     }
 
+    /**
+     * 校验手机号验证码
+     *
+     * @param token  验证码tokenID
+     * @param mobile 手机号
+     * @param code   验证码
+     */
+    protected void checkMobileCode(String token, String mobile, String code) {
+        checkValidCode(token, mobile, null, code);
+    }
+
+    /**
+     * 校验手机号验证码
+     *
+     * @param token  验证码tokenID
+     * @param email 邮箱
+     * @param code   验证码
+     */
+    protected void checkEmailCode(String token, String email, String code) {
+        checkValidCode(token, null, email, code);
+    }
+
     /**
      * 校验手机号格式
      *

+ 2 - 2
sso-server/src/main/java/com/uas/sso/controller/PersonalRegisterController.java

@@ -63,7 +63,7 @@ public class PersonalRegisterController extends BaseController {
         checkMobile(mobile, mobileArea);
 
         // 校验验证码
-        checkMobileCode(mobile, code, token);
+        checkMobileCode(token, mobile, code);
 
         // 校验密码
         if (PasswordStrength.WEAK.equals(checkPasswordLevel(password))) {
@@ -118,7 +118,7 @@ public class PersonalRegisterController extends BaseController {
     public ModelMap checkCode(String token, String mobile, String code) {
         // 校验token是否正确
         String sessionToken = (String) request.getSession().getAttribute("token");
-        if (StringUtils.isEmpty(sessionToken) || sessionToken.equals(token)) {
+        if (StringUtils.isEmpty(sessionToken) || !sessionToken.equals(token)) {
             return error("请重新获取验证码");
         }
 

+ 0 - 1
sso-server/src/main/java/com/uas/sso/controller/ResetPasswordController.java

@@ -290,7 +290,6 @@ public class ResetPasswordController extends BaseController {
         return success(data);
     }
 
-
     /**
      * 重置密码第二步,认证密保
      * @param token

+ 329 - 0
sso-server/src/main/java/com/uas/sso/controller/UpdateUserController.java

@@ -0,0 +1,329 @@
+package com.uas.sso.controller;
+
+import com.uas.sso.core.Status;
+import com.uas.sso.entity.*;
+import com.uas.sso.service.UserService;
+import com.uas.sso.support.SystemSession;
+import com.uas.sso.util.CollectionUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.StringUtils;
+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.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author wangmh
+ * @create 2018-01-11 17:11
+ * @desc 修改用户信息(需要登录)
+ **/
+@RestController
+@RequestMapping("/update/user")
+public class UpdateUserController extends BaseController {
+
+    @Autowired
+    private UserService userService;
+
+    /**
+     * 校验信息token有效期
+     */
+    private static final int EXPIRES = 7*24*60*60;
+
+    /**
+     * 获取可以校验方式
+     *
+     * @return
+     */
+    @RequestMapping(value = "/CheckType", method = RequestMethod.GET)
+    public ModelMap getCheckType() {
+        // 获取用户信息
+        UserAccount userAccount = SystemSession.getUserAccount();
+        User user = userService.findOne(userAccount.getUserUU());
+
+        // 设置返回数据
+        ModelMap data = new ModelMap();
+        data.put("mobile", Status.AUTHENTICATED.getCode() == user.getMobileValidCode() ? user.getMobile() : null);
+        data.put("email", Status.AUTHENTICATED.getCode() == user.getEmailValidCode() ? user.getEmail() : null);
+        data.put("question", CollectionUtils.isEmpty(user.getQuestions()) ? user.getQuestions() : null);
+        request.getSession().setAttribute("user", user);
+        return success();
+    }
+
+    /**
+     * 获取校验手机号验证码
+     *
+     * @author wangmh
+     * @date 2018/1/11 20:16
+     * @param mobile 手机号
+     * @return
+     */
+    @RequestMapping(value = "/check/mobile", method = RequestMethod.GET)
+    public ModelMap checkByMobile(String mobile) {
+        // 获取验证码
+        String token = getMobileCode(mobile);
+
+        // 设置返回数据
+        ModelMap data = new ModelMap();
+        data.put("token", token);
+        request.getSession().setAttribute("token", token);
+        return success(data);
+    }
+
+    /**
+     * 校验手机号验证码
+     *
+     * @author wangmh
+     * @date 2018/1/11 20:17
+     * @param mobile 手机号
+     * @param code 验证码
+     * @param token 验证码token
+     * @return
+     */
+    @RequestMapping(value = "/check/mobile", method = RequestMethod.POST)
+    public ModelMap checkByMobile(String mobile, String code, @RequestParam String token) {
+        // 校验空参数
+        if (StringUtils.isEmpty(mobile)) {
+            return error("手机号不能为空");
+        }
+        if (StringUtils.isEmpty(code)) {
+            return error("验证码不能为空");
+        }
+
+        // 校验token
+        Token existToken = tokenService.findOne(token);
+        if (existToken == null) {
+            return error("请重新获取验证码");
+        }
+
+        // 校验验证码
+        checkMobileCode(token, mobile, code);
+        tokenService.delete(token);
+
+        // 设置返回数据
+        User user = userService.findByMobile(mobile);
+        existToken = new Token(user, EXPIRES);
+        return success(existToken.getId());
+    }
+
+
+    /**
+     * 通过邮箱重置密码,发送邮箱确认
+     *
+     * @return
+     */
+    @RequestMapping(value = "/check/email", method = RequestMethod.GET)
+    public ModelMap checkByEmail(String operate, @RequestParam String email) {
+        // 校验空参数
+        if (StringUtils.isEmpty(email)) {
+            return error("手机号不能为空");
+        }
+
+        // 根据邮箱找到用户
+        User user = userService.findByUsername(email);
+
+        // 设置发送邮件信息
+        Token token = new Token(user, EXPIRES);
+        ModelMap data = new ModelMap();
+        data.put("vipName", user.getVipName());
+        // TODO 邮件认证地址
+        if ("mobile".equals(operate)) {
+            data.put("url", "http://192.168.253.66:8081/update/user/setMobile?token=" + token);
+        } else if ("email".equals(operate)) {
+            data.put("url", "http://192.168.253.66:8081/update/user/setMail?token=" + token);
+        }
+
+        // 发送邮件
+        if (!StringUtils.isEmpty(email)) {
+            Setting mailTplId = settingService.findOne("templateForSendMailWhenResetPassword");
+            if (!StringUtils.isEmpty(mailTplId)) {
+                mailService.send(mailTplId.getValue(), email, data);
+            }
+        }
+
+        return success();
+    }
+
+    /**
+     * 重置密码第二步,认证密保
+     * @param answers 密保答案
+     * @return
+     */
+    @RequestMapping(value = "/check/question", method = RequestMethod.POST)
+    public ModelMap checkByQuestion(List<Map<String, Object>> answers) {
+
+        // 校验密保答案
+        User user = (User) request.getSession().getAttribute("user");
+        List<UserQuestion> questions = user.getQuestions();
+        Map<Long, String> userAnswer = new HashMap<>(questions.size());
+        for (UserQuestion question : questions) {
+            userAnswer.put(question.getId(), question.getAnswer());
+        }
+        for (Map<String, Object> answer : answers) {
+            if (!answer.get("answer").equals(userAnswer.get(answer.get("id")))){
+                return error("答案错误");
+            }
+        }
+
+        // 返回token
+        Token expireToken = new Token(user, EXPIRES);
+        ModelMap data = new ModelMap();
+        data.put("token", expireToken.getId());
+        return success(data);
+    }
+
+    /**
+     * 设置手机号校验获取验证码
+     *
+     * @param mobile 获取验证码手机号
+     * @param token 第一步传递的tokenId
+     * @return
+     */
+    @RequestMapping(value = "/setMobile", method = RequestMethod.GET)
+    public ModelMap updateMobile(String mobile, @RequestParam String token) {
+        // 校验token
+        Token existToken = tokenService.findOne(token);
+        if (existToken == null || existToken.isExpired()) {
+            return error("请求超时");
+        }
+
+        // 拿出user放入session中
+        User user = (User) existToken.getBind();
+        if (user == null) {
+            return error("请求错误");
+        }
+        tokenService.delete(token);
+
+        // 获取验证码
+        token = getMobileCode(mobile);
+
+        request.getSession().setAttribute("user", user);
+        return success(new ModelMap("token", token));
+    }
+
+    /**
+     * 设置手机号
+     *
+     * @author wangmh
+     * @date 2018/1/11 21:15
+     * @param mobile 手机号
+     * @param code 验证码
+     * @param token 验证码tokenId
+     * @return
+     */
+    @RequestMapping(value = "/setMobile", method = RequestMethod.POST)
+    public ModelMap updateMobile(String mobile, String code, @RequestParam String token) {
+        // 校验空参数
+        if (StringUtils.isEmpty(mobile)) {
+            return error("手机号不能为空");
+        }
+        if (StringUtils.isEmpty(code)) {
+            return error("验证码不能为空");
+        }
+
+        // 从session中获取用户信息
+        User user = (User) request.getSession().getAttribute("user");
+        if (user == null) {
+            return error("请求超时,请刷新重试");
+        }
+
+        // 校验手机号是否被使用
+        if (userService.mobileHasRegistered(mobile)){
+            return error("手机号已注册");
+        }
+
+        // 校验token
+        Token existToken = tokenService.findOne(token);
+        if (existToken == null) {
+            return error("请重新获取验证码");
+        }
+
+        // 校验验证码
+        checkMobileCode(token, mobile, code);
+        tokenService.delete(token);
+
+        // 修改手机号
+        userService.updateMobile(user.getUserUU(), mobile);
+        return success();
+    }
+
+    /**
+     * 修改邮箱,获取校验邮箱验证码
+     *
+     * @author wangmh
+     * @date 2018/1/11 20:16
+     * @param email 邮箱
+     * @return
+     */
+    @RequestMapping(value = "/setEmail", method = RequestMethod.GET)
+    public ModelMap updateEmail(String email, @RequestParam String token) {
+        // 校验token
+        Token existToken = tokenService.findOne(token);
+        if (existToken == null || existToken.isExpired()) {
+            return error("请求超时");
+        }
+
+        // 拿出user放入session中
+        User user = (User) existToken.getBind();
+        if (user == null) {
+            return error("请求错误");
+        }
+        tokenService.delete(token);
+
+        // 获取验证码
+        token = getEmailCode(email);
+
+        request.getSession().setAttribute("user", user);
+        return success(new ModelMap("token", token));
+    }
+
+    /**
+     * 设置手机号
+     *
+     * @author wangmh
+     * @date 2018/1/11 21:15
+     * @param email 邮箱
+     * @param code 验证码
+     * @param token 验证码tokenId
+     * @return
+     */
+    @RequestMapping(value = "/setEmail", method = RequestMethod.POST)
+    public ModelMap updateEmail(String email, String code, @RequestParam String token) {
+        // 校验空参数
+        if (StringUtils.isEmpty(email)) {
+            return error("邮箱不能为空");
+        }
+        if (StringUtils.isEmpty(code)) {
+            return error("验证码不能为空");
+        }
+
+        // 从session中获取用户信息
+        User user = (User) request.getSession().getAttribute("user");
+        if (user == null) {
+            return error("请求超时,请刷新重试");
+        }
+
+        // 校验手机号是否被使用
+        if (userService.emailHasRegistered(email)){
+            return error("邮箱已注册");
+        }
+
+        // 校验token
+        Token existToken = tokenService.findOne(token);
+        if (existToken == null) {
+            return error("请重新获取验证码");
+        }
+
+        // 校验验证码
+        checkEmailCode(token, email, code);
+        tokenService.delete(token);
+
+        // 修改邮箱
+        userService.updateEmail(user.getUserUU(), email);
+        return success();
+    }
+}

+ 26 - 0
sso-server/src/main/java/com/uas/sso/controller/UserManagerController.java

@@ -30,4 +30,30 @@ public class UserManagerController extends BaseController {
     public ModelMap checkMobile(String mobile) {
         return new ModelMap("hasRegister", userService.mobileHasRegistered(mobile));
     }
+
+    /**
+     * 校验真实姓名是否被认证
+     *
+     * @author wangmh
+     * @date 2018/1/11 15:05
+     * @param realName 真实姓名
+     * @return
+     */
+    @RequestMapping(value = "/realName/valid", method = RequestMethod.GET)
+    public ModelMap realNameIsValid(String realName) {
+        return success(new ModelMap("isValid", userService.realNameIsValid(realName)));
+    }
+
+    /**
+     * 校验身份证号是否被认证
+     *
+     * @author wangmh
+     * @date 2018/1/11 15:06
+     * @param idCard 身份证号
+     * @return
+     */
+    @RequestMapping(value = "/idCard/valid", method = RequestMethod.GET)
+    public ModelMap idCardIsValid(String idCard) {
+        return success(new ModelMap("isValid", userService.idCardIsValid(idCard)));
+    }
 }

+ 29 - 3
sso-server/src/main/java/com/uas/sso/controller/UserspaceManageController.java

@@ -5,7 +5,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 企业信息管理controller
@@ -13,7 +15,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
  * @author wangmh
  * @date 2018/1/5
  */
-@Controller
+@RestController
 @RequestMapping("/api/userspace")
 public class UserspaceManageController extends BaseController {
 
@@ -27,7 +29,6 @@ public class UserspaceManageController extends BaseController {
      * @return
      */
     @RequestMapping("/checkSpaceName")
-    @ResponseBody
     public ModelMap checkSpaceName(String spaceName) {
         userspaceService.checkSpaceName(spaceName);
         return success();
@@ -40,9 +41,34 @@ public class UserspaceManageController extends BaseController {
      * @return
      */
     @RequestMapping("/checkBusinessCode")
-    @ResponseBody
     public ModelMap checkBusinessCode(String businessCode) {
         userspaceService.checkBusinessCode(businessCode);
         return success();
     }
+
+    /**
+     * 校验企业是否被认证
+     *
+     * @author wangmh
+     * @date 2018/1/11 20:51
+     * @param spaceName 企业名称
+     * @return
+     */
+    @RequestMapping(value = "/name/valid", method = RequestMethod.GET)
+    public ModelMap spaceNameIsValid(String spaceName) {
+        return success(new ModelMap("isValid", userspaceService.spaceNameIsValid(spaceName)));
+    }
+
+    /**
+     * 校验营业执照号是否被认证
+     * 
+     * @author wangmh
+     * @date 2018/1/11 10:35
+     * @param businessCode 营业执照号
+     * @return
+     */
+    @RequestMapping(value = "/businessCode/valid", method = RequestMethod.GET)
+    public ModelMap businessCodeIsValid(String businessCode) {
+        return success(new ModelMap("isValid", userspaceService.businessCodeIsValid(businessCode)));
+    }
 }

+ 116 - 0
sso-server/src/main/java/com/uas/sso/controller/ValidController.java

@@ -0,0 +1,116 @@
+package com.uas.sso.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.uas.sso.entity.User;
+import com.uas.sso.entity.Userspace;
+import com.uas.sso.service.UserService;
+import com.uas.sso.service.UserspaceService;
+import com.uas.sso.util.FastjsonUtils;
+import com.uas.sso.util.FileUrl;
+import com.uas.sso.util.HttpUtils;
+import com.uas.sso.util.ParameterUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 认证信息controller
+ * @author wangmh
+ * @date 2018/1/11.
+ */
+@RestController
+@RequestMapping("/valid")
+public class ValidController extends BaseController {
+
+    @Autowired
+    private UserspaceService userspaceService;
+
+    @Autowired
+    private UserService userService;
+
+    /**
+     * 图片最大5M
+     */
+    private static final int IMAGE_MAX_SIZE = 5 * 1024 * 1024;
+
+    /**
+     * 提交企业认证信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:38
+     * @param userspace 企业信息
+     * @param businessImage 营业执照号
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/userspace/submit", method = RequestMethod.POST)
+    public ModelMap submitSpaceInfo(Userspace userspace, @RequestBody MultipartFile businessImage) throws Exception {
+        // 获取参数
+        String spaceName = userspace.getSpaceName();
+        String businessCode = userspace.getBusinessCode();
+        String corporation = userspace.getCorporation();
+        String regAddress = userspace.getRegAddress();
+
+        // 参数空校验
+        Map<String, String> params = new HashMap<>(4);
+        params.put("企业名", spaceName);
+        params.put("营业执照号", businessCode);
+        params.put("法定代表人", corporation);
+        params.put("注册地址", regAddress);
+        ParameterUtils.checkEmptyParameter(params);
+
+        // 上传营业执照
+        if (!(businessImage == null || businessImage.isEmpty())) {
+            if (businessImage.getSize() > IMAGE_MAX_SIZE) {
+                return error("营业执照附件大小不要超过5M");
+            }
+            HttpUtils.Response response = HttpUtils.upload(FileUrl.FILE_UPLOAD, businessImage, null);
+            JSONObject obj = FastjsonUtils.parseObject(response.getResponseText());
+            String path = (String) obj.get("path");
+            if (path != null) {
+                userspace.setBusinessCodeImage(path);
+            } else {
+                return error("请检查您的营业执照附件");
+            }
+        }
+
+        // 将企业添加到待认证
+        userspaceService.submitValidInfo(userspace);
+
+        return success();
+    }
+
+    /**
+     * 用户提交身份认证信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 15:21
+     * @param realName 真实姓名
+     * @param idCard 身份证号
+     * @return
+     * @throws Exception
+     */
+    @RequestMapping(value = "/user/identity/submit", method = RequestMethod.POST)
+    public ModelMap submitUserIdentityInfo(String realName, String idCard) throws Exception {
+        // 参数空校验
+        Map<String, String> params = new HashMap<>(2);
+        params.put("真实姓名", realName);
+        params.put("身份证号", idCard);
+        ParameterUtils.checkEmptyParameter(params);
+
+        // 将实名认证添加到待认证
+        User user = new User();
+        user.setRealName(realName);
+        user.setIdCard(idCard);
+        userService.submitIdValidInfo(user);
+
+        return success();
+    }
+}

+ 20 - 0
sso-server/src/main/java/com/uas/sso/dao/UserDao.java

@@ -63,4 +63,24 @@ public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExec
      * @return
      */
     List<User> findByEmailAndEmailValidCode(String email, Short emailValidCode);
+
+    /**
+     * 根据用户真实姓名找到用户信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:49
+     * @param realName 真实姓名
+     * @return
+     */
+    User findByRealName(String realName);
+
+    /**
+     * 根据用户身份证找到用户信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:58
+     * @param idCard
+     * @return
+     */
+    User findByIdCard(String idCard);
 }

+ 18 - 0
sso-server/src/main/java/com/uas/sso/entity/Token.java

@@ -5,6 +5,9 @@ import com.uas.sso.util.StringUtil;
 import java.io.Serializable;
 import java.util.Date;
 
+/**
+ * @author wangmh
+ */
 public class Token implements Serializable {
 
 	/**
@@ -22,6 +25,8 @@ public class Token implements Serializable {
 
     private String mobile;
 
+    private String email;
+
 	/**
 	 * 60秒过期
 	 */
@@ -98,4 +103,17 @@ public class Token implements Serializable {
     public void setMobile(String mobile) {
         this.mobile = mobile;
     }
+
+	/**
+	 * 绑定邮箱
+	 *
+	 * @return
+	 */
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
 }

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

@@ -90,7 +90,7 @@ public class User implements Serializable {
     /**
      * 用户真实姓名
      */
-    @Column(name = "real_name")
+    @Column(name = "real_name", unique = true)
     private String realName;
 
     /**
@@ -102,7 +102,7 @@ public class User implements Serializable {
     /**
      * 用户身份认证状态
      */
-    @Column(name = "identity_valid_code")
+    @Column(name = "identity_valid_code", nullable = false)
     private Short identityValidCode;
 
     /**

+ 1 - 1
sso-server/src/main/java/com/uas/sso/entity/UserQuestion.java

@@ -28,7 +28,7 @@ public class UserQuestion implements Serializable {
     /**
      * 用户uu号
      */
-    @Column(name = "useruu")
+    @Column(name = "useruu", insertable=false, updatable=false)
     private Long userUU;
 
     /**

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

@@ -61,7 +61,7 @@ public class Userspace implements Serializable {
     /**
      * 营业执照号
      */
-    @Column(name = "business_code")
+    @Column(name = "business_code", unique = true)
     private String businessCode;
 
     /**
@@ -115,7 +115,7 @@ public class Userspace implements Serializable {
     /**
      * 企业信息认证状态
      */
-    @Column(name = "valid_code")
+    @Column(name = "valid_code", nullable = false)
     private Short validCode;
 
     /**

+ 53 - 0
sso-server/src/main/java/com/uas/sso/service/UserService.java

@@ -38,6 +38,16 @@ public interface UserService {
      */
     boolean mobileHasRegistered(String mobile);
 
+    /**
+     * 判断邮箱是否已经注册
+     *
+     * @param email 邮箱
+     * @return
+     *      true: 已经被注册
+     *      false: 未被注册
+     */
+    boolean emailHasRegistered(String email);
+
     /**
      * 注册新用户
      *
@@ -121,4 +131,47 @@ public interface UserService {
      * @return
      */
     User findOne(Long userUU);
+
+    /**
+     * 用户真实姓名是否被认证
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:48
+     * @param realName
+     * @return
+     */
+    boolean realNameIsValid(String realName);
+
+    /**
+     * 身份证号是否被认证
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:56
+     * @param idCard 身份证
+     * @return
+     */
+    boolean idCardIsValid(String idCard);
+
+    /**
+     * 提交身份认证信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 15:15
+     * @param user
+     */
+    void submitIdValidInfo(User user);
+
+    /**
+     * 修改手机号
+     * @param userUU 用户uu号
+     * @param newMobile 新手机号
+     */
+    void updateMobile(Long userUU, String newMobile);
+
+    /**
+     * 修改邮箱
+     * @param userUU 用户uu号
+     * @param newEmail 新邮箱
+     */
+    void updateEmail(Long userUU, String newEmail);
 }

+ 28 - 0
sso-server/src/main/java/com/uas/sso/service/UserspaceService.java

@@ -38,4 +38,32 @@ public interface UserspaceService {
      * @return
      */
     Userspace findByDomain(String domain);
+
+    /**
+     * 校验企业名是否被认证
+     *
+     * @param spaceName 企业名
+     * @return true:认证,false:未认证
+     */
+    boolean spaceNameIsValid(String spaceName);
+
+    /**
+     * 校验营业执照号是否被验证
+     *
+     * @author wangmh
+     * @date 2018/1/11 9:56
+     * @param businessCode 营业执照号
+     * @return true:认证,false:未认证
+     */
+    boolean businessCodeIsValid(String businessCode);
+
+    /**
+     * 认证信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:23
+     * @param userspace 企业信息
+     */
+    void submitValidInfo(Userspace userspace);
+
 }

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

@@ -0,0 +1,20 @@
+package com.uas.sso.service;
+
+import com.uas.sso.entity.Userspace;
+
+/**
+ * @author wangmh
+ * @create 2018-01-11 14:06
+ * @desc
+ **/
+public interface UserspaceValidService {
+
+    /**
+     * 提交认证信息
+     *
+     * @author wangmh
+     * @date 2018/1/11 14:09
+     * @param userspace 企业信息
+     */
+    void submitValid(Userspace userspace);
+}

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

@@ -7,12 +7,16 @@ import com.uas.sso.core.Type;
 import com.uas.sso.dao.UserDao;
 import com.uas.sso.dao.UserRecordDao;
 import com.uas.sso.entity.User;
+import com.uas.sso.entity.UserAccount;
 import com.uas.sso.entity.UserRecord;
+import com.uas.sso.entity.Userspace;
 import com.uas.sso.exception.VisibleError;
 import com.uas.sso.logging.LoggerManager;
 import com.uas.sso.logging.UserBufferedLogger;
 import com.uas.sso.service.UserService;
+import com.uas.sso.support.SystemSession;
 import com.uas.sso.util.AccountTypeUtils;
+import com.uas.sso.util.BeanUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
@@ -59,6 +63,15 @@ public class UserServiceImpl implements UserService {
         return true;
     }
 
+    @Override
+    public boolean emailHasRegistered(String email) {
+        List<User> users = userDao.findByEmailAndEmailValidCode(email, (short) Status.AUTHENTICATED.getCode());
+        if (CollectionUtils.isEmpty(users)) {
+            return false;
+        }
+        return true;
+    }
+
     @Override
     public User register(User user) {
         // 校验手机号是否被注册
@@ -210,4 +223,88 @@ public class UserServiceImpl implements UserService {
     public User findOne(Long userUU) {
         return userDao.findOne(userUU);
     }
+
+    @Override
+    public boolean realNameIsValid(String realName) {
+        User user = userDao.findByRealName(realName);
+        if (user != null && user.getIdentityValidCode() == Status.AUTHENTICATED.getCode()) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean idCardIsValid(String idCard) {
+        User user = userDao.findByIdCard(idCard);
+        if (user != null && user.getIdentityValidCode() == Status.AUTHENTICATED.getCode()) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void submitIdValidInfo(User user) {
+        // 校验企业名和营业执照是否被认证
+        boolean isValid = realNameIsValid(user.getRealName());
+        if (isValid) {
+            throw new VisibleError("该真实姓名已被认证,请确认");
+        }
+        isValid = idCardIsValid(user.getIdCard());
+        if (isValid) {
+            throw new VisibleError("该身份证号已被认证,请确认");
+        }
+
+        // 根据登录信息找到用户
+        UserAccount userAccount = SystemSession.getUserAccount();
+        User oldUser = userDao.findOne(userAccount.getUserUU());
+
+        // 将数据拷贝到原用户中
+        BeanUtil.copyProperties(user, oldUser, true);
+
+        // 设置用户真实身份未待认证状态
+        oldUser.setIdentityValidCode((short) Status.TO_BE_CERTIFIED.getCode());
+
+        // 保存用户信息
+        userDao.save(oldUser);
+
+        // TODO 保存日志
+    }
+
+    @Override
+    public void updateMobile(Long userUU, String newMobile) {
+        // 获取用户信息
+        User user = userDao.findOne(userUU);
+        if (user == null) {
+            throw new VisibleError("用户不存在");
+        }
+
+        // 修改手机号
+        user.setMobile(newMobile);
+        user.setMobileValidCode((short) Status.AUTHENTICATED.getCode());
+
+        // 保存用户信息
+        userDao.save(user);
+
+        // 保存日志
+        userLog.info(user, Type.UPDATE_MOBILE.getValue());
+    }
+
+    @Override
+    public void updateEmail(Long userUU, String newEmail) {
+        // 获取用户信息
+        User user = userDao.findOne(userUU);
+        if (user == null) {
+            throw new VisibleError("用户不存在");
+        }
+
+        // 修改手机号
+        user.setEmail(newEmail);
+        user.setEmailValidCode((short) Status.AUTHENTICATED.getCode());
+
+        // 保存用户信息
+        userDao.save(user);
+
+        // 保存日志
+        userLog.info(user, Type.UPDATE_EMAIL.getValue());
+    }
 }

+ 49 - 0
sso-server/src/main/java/com/uas/sso/service/impl/UserspaceServiceImpl.java

@@ -1,11 +1,13 @@
 package com.uas.sso.service.impl;
 
+import com.uas.sso.core.Status;
 import com.uas.sso.dao.UserspaceDao;
 import com.uas.sso.entity.User;
 import com.uas.sso.entity.Userspace;
 import com.uas.sso.exception.VisibleError;
 import com.uas.sso.service.UserService;
 import com.uas.sso.service.UserspaceService;
+import com.uas.sso.util.BeanUtil;
 import com.uas.sso.util.ChineseUtils;
 import com.uas.sso.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -130,4 +132,51 @@ public class UserspaceServiceImpl implements UserspaceService {
     public Userspace findByDomain(String domain) {
         return userspaceDao.findByDomain(domain);
     }
+
+    @Override
+    public boolean spaceNameIsValid(String spaceName) {
+        Userspace userspace = userspaceDao.findBySpaceName(spaceName);
+        if (userspace == null) {
+            throw new VisibleError("该企业未注册");
+        }
+        return userspace.getValidCode() == Status.AUTHENTICATED.getCode();
+    }
+
+    @Override
+    public boolean businessCodeIsValid(String businessCode) {
+        Userspace userspace = userspaceDao.findByBusinessCode(businessCode);
+        // 营业执照不是注册必填项
+        if (userspace != null && userspace.getValidCode() == Status.AUTHENTICATED.getCode()) {
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void submitValidInfo(Userspace userspace) {
+        // 校验企业名和营业执照是否被认证
+        boolean isValid = spaceNameIsValid(userspace.getSpaceName());
+        if (isValid) {
+            throw new VisibleError("该企业名已被认证,请确认");
+        }
+        isValid = businessCodeIsValid(userspace.getBusinessCode());
+        if (isValid) {
+            throw new VisibleError("该企业营业执照号已被认证,请确认");
+        }
+
+        // 根据企业名找到原企业信息
+        Userspace oldUserspace = userspaceDao.findBySpaceName(userspace.getSpaceName());
+
+        // 将数据拷贝到原企业中
+        BeanUtil.copyProperties(userspace, oldUserspace, true);
+
+        // 设置企业未待认证状态
+        oldUserspace.setValidCode((short) Status.TO_BE_CERTIFIED.getCode());
+
+        // 保存企业信息
+        userspaceDao.save(oldUserspace);
+
+        // TODO 保存日志
+
+    }
 }

+ 19 - 0
sso-server/src/main/java/com/uas/sso/service/impl/UserspaceValidServiceImpl.java

@@ -0,0 +1,19 @@
+package com.uas.sso.service.impl;
+
+import com.uas.sso.entity.Userspace;
+import com.uas.sso.service.UserspaceValidService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author wangmh
+ * @create 2018-01-11 14:10
+ * @desc 企业信息认证service实现
+ **/
+@Service
+public class UserspaceValidServiceImpl implements UserspaceValidService {
+
+
+    @Override
+    public void submitValid(Userspace userspace) {
+    }
+}

+ 35 - 0
sso-server/src/main/java/com/uas/sso/util/FileUrl.java

@@ -0,0 +1,35 @@
+package com.uas.sso.util;
+
+/**
+ * 文件服务器的基本链接
+ *
+ * @author yuj 2017-10-12 14:53
+ */
+public class FileUrl {
+
+    /**
+     * 文件上传
+     */
+    public final static String FILE_UPLOAD = "http://10.10.100.200:9999/file/upload";
+
+
+    /**
+     * 文件下载
+     */
+    public final static String FILE_DOWNLOAD = "http://10.10.100.200:9999/file/download";
+
+    /**
+     * 文件删除
+     */
+    public final static String FILE_DELETE = "http://10.10.100.200:9999/file/delete";
+
+    /**
+     * 文件信息
+     */
+    public final static String FILE_INFO = "http://10.10.100.200:9999/file/info";
+
+    /**
+     * 文件额外属性
+     */
+    public final static String FILE_METADATA = "http://10.10.100.200:9999/file/metadata";
+}

+ 306 - 0
sso-server/src/main/java/com/uas/sso/util/HttpUtils.java

@@ -0,0 +1,306 @@
+package com.uas.sso.util;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.http.Consts;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.entity.mime.content.InputStreamBody;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.Map.Entry;
+
+
+/**
+ * 旧版账户中心拷贝
+ *
+ * @author wangmh
+ */
+public class HttpUtils {
+
+	/**
+	 * 发起POST、PUT请求
+	 * 
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response get(String url, Map<String, Object> params) throws Exception {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpEntityEnclosingRequestBase request = null;
+		CloseableHttpResponse response = null;
+		try {
+			StringBuilder buf = new StringBuilder(url);
+			if (params != null && !params.isEmpty()) {
+				if (url.indexOf("?") == -1) {
+					buf.append("?");
+				} else if (!url.endsWith("&")) {
+					buf.append("&");
+				}
+				Set<Entry<String, Object>> entrys = params.entrySet();
+				for (Entry<String, Object> entry : entrys) {
+					buf.append(entry.getKey()).append("=").append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")).append("&");
+				}
+			}
+			request = new HttpPost(buf.toString());
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 发起POST、PUT请求
+	 *
+	 * @param datas
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response post(String url, Collection<?> datas) throws Exception {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpEntityEnclosingRequestBase request = new HttpPost(url);
+		CloseableHttpResponse response = null;
+		try {
+			if (datas != null && !datas.isEmpty()) {
+				request.setEntity(new StringEntity(FastjsonUtils.toJson(datas), ContentType.create("text/plain", Consts.UTF_8)));
+			}
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * 发起POST、PUT请求
+	 *
+	 * @param params
+	 * @return
+	 * @throws Exception
+	 */
+	public static Response post(String url, Map<String, String> params) throws Exception {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpEntityEnclosingRequestBase request = new HttpPost(url);
+		CloseableHttpResponse response = null;
+		try {
+			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
+			if (params != null && !params.isEmpty()) {
+				Set<Entry<String, String>> entrys = params.entrySet();
+				for (Entry<String, String> entry : entrys) {
+					nvps.add(new BasicNameValuePair(entry.getKey(), URLEncoder.encode(entry.getValue(), "UTF-8")));
+				}
+			}
+			request.setEntity(new UrlEncodedFormEntity(nvps));
+			response = httpClient.execute(request);
+			return Response.getResponse(response);
+		} finally {
+			request.releaseConnection();
+			try {
+				httpClient.close();
+			} catch (IOException e) {
+			}
+			if (response != null) {
+				try {
+					response.close();
+				} catch (IOException e) {
+				}
+			}
+		}
+	}
+
+	/**
+	 * http上传文件
+	 * 
+	 * @param url
+	 *            请求地址
+	 * @param filePath
+	 *            附件路径
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String url, String filePath, Map<String, String> params) throws IllegalStateException, IOException,
+			Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(url);
+			FileBody fileBody = new FileBody(new File(filePath));
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", fileBody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+			return Response.getResponse(response);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * http上传文件
+	 *
+	 * @param url
+	 *            请求地址
+	 * @param multipartFile
+	 *            附件路径
+	 * @param params
+	 *            参数
+	 * @return
+	 * @throws Exception
+	 * @throws IOException
+	 * @throws IllegalStateException
+	 */
+	public static Response upload(String url, MultipartFile multipartFile, Map<String, String> params) throws IllegalStateException, IOException,
+			Exception {
+		CloseableHttpClient httpClient = null;
+		CloseableHttpResponse response = null;
+		try {
+			httpClient = HttpClients.createDefault();
+			HttpPost httpPost = new HttpPost(url);
+			InputStreamBody streamBody = new InputStreamBody(multipartFile.getInputStream(),
+				multipartFile.getOriginalFilename());
+			MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+			builder.addPart("file", streamBody);
+			if (params != null) {
+				for (String paramKey : params.keySet()) {
+					StringBody body = new StringBody(params.get(paramKey), ContentType.create("text/plain", Consts.UTF_8));
+					builder.addPart(paramKey, body);
+				}
+			}
+			HttpEntity reqEntity = builder.build();
+			httpPost.setEntity(reqEntity);
+			response = httpClient.execute(httpPost);
+			return Response.getResponse(response);
+		} finally {
+			try {
+				if (response != null) {
+					response.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+			try {
+				if (httpClient != null) {
+					httpClient.close();
+				}
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+
+	/**
+	 * 下载
+	 * 
+	 * @param url
+	 * @return
+	 * @throws ClientProtocolException
+	 * @throws IOException
+	 */
+	public static InputStream download(String url) throws ClientProtocolException, IOException {
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+		HttpGet httpGet = new HttpGet(url);
+		CloseableHttpResponse response = httpClient.execute(httpGet);
+		return response.getEntity().getContent();
+	}
+
+	public static class Response {
+		private int statusCode;
+		private String responseText;
+
+		public int getStatusCode() {
+			return statusCode;
+		}
+
+		public void setStatusCode(int statusCode) {
+			this.statusCode = statusCode;
+		}
+
+		public String getResponseText() {
+			return responseText;
+		}
+
+		public void setResponseText(String responseText) {
+			this.responseText = responseText;
+		}
+
+		public Response() {
+		}
+
+		public Response(HttpResponse response) throws IllegalStateException, IOException, Exception {
+			this.statusCode = response.getStatusLine().getStatusCode();
+			this.responseText = IOUtils.toString(response.getEntity().getContent());
+		}
+
+		public static Response getResponse(HttpResponse response) throws IllegalStateException, IOException, Exception {
+			if (response != null) {
+				return new Response(response);
+			}
+			return null;
+		}
+	}
+}

+ 33 - 0
sso-server/src/main/java/com/uas/sso/util/ParameterUtils.java

@@ -0,0 +1,33 @@
+package com.uas.sso.util;
+
+import com.uas.sso.exception.VisibleError;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author wangmh
+ * @create 2018-01-11 10:46
+ * @desc 参数工具类
+ **/
+public class ParameterUtils {
+
+    /**
+     * 校验空参数
+     *
+     * @author wangmh
+     * @date 2018/1/11 10:47
+     * @param params 参数,key为参数名,value为参数
+     *
+     */
+    public static void checkEmptyParameter(Map<String, String> params) {
+        Set<Map.Entry<String, String>> entries = params.entrySet();
+        for (Map.Entry<String, String> entry : entries) {
+            String key = entry.getKey();
+            String value = entry.getValue();
+            if (StringUtils.isEmpty(value)) {
+                throw new VisibleError(key + "不能为空");
+            }
+        }
+    }
+}