| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- package com.uas.sso.controller;
- import com.alibaba.fastjson.JSON;
- import com.uas.sso.SSOHelper;
- import com.uas.sso.SSOToken;
- import com.uas.sso.foreign.bihe.entity.BiHeInfo;
- import com.uas.sso.core.Step;
- import com.uas.sso.core.Type;
- import com.uas.sso.core.PasswordStrength;
- import com.uas.sso.entity.App;
- import com.uas.sso.entity.Token;
- import com.uas.sso.entity.User;
- import com.uas.sso.entity.UserAccount;
- import com.uas.sso.foreign.entity.ForeignInfo;
- import com.uas.sso.logging.LoggerManager;
- import com.uas.sso.logging.RegisterBufferedLogger;
- import com.uas.sso.service.AppService;
- import com.uas.sso.service.PersonalAccountService;
- import com.uas.sso.service.UserService;
- import com.uas.sso.util.CaptchaUtil;
- import com.uas.sso.util.IpUtils;
- import com.uas.sso.util.PasswordLevelUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- 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.ResponseBody;
- import java.io.UnsupportedEncodingException;
- import java.net.URLDecoder;
- import java.util.List;
- import java.util.Optional;
- /**
- * 个人注册controller
- *
- * @author uas
- * @date 2018/1/2
- */
- @Controller
- @RequestMapping("/sso/personal/register")
- public class PersonalRegisterController extends BaseController {
- @Autowired
- private UserService userService;
- @Autowired
- private PersonalAccountService personalAccountService;
- @Autowired
- private AppService appService;
- private RegisterBufferedLogger registerLogger = LoggerManager.getLogger(RegisterBufferedLogger.class);
- private final static Logger LOGGER = LoggerFactory.getLogger(PersonalRegisterController.class);
- /**
- * 验证码存session的可以
- */
- private static final String RESET_CAPTCHA = "resetCaptcha";
- /**
- * 注册个人信息
- *
- * @param user 用户信息(需要会员名,手机号,手机号所属区域,密码)
- * @param appId 注册应用标志
- * @param code 验证码
- * @param token 验证码tokenId
- * @return 成功:success(),失败:error("错误码", "错误信息")
- */
- @RequestMapping(method = RequestMethod.POST)
- @ResponseBody
- public ModelMap register(User user, String appId, String code, String token, String baseUrl, String t, String returnUrl) throws UnsupportedEncodingException {
- // 获取参数
- String vipName = user.getVipName();
- String mobile = user.getMobile();
- String mobileArea = user.getMobileArea();
- String password = user.getPassword();
- // 参数空校验
- if (StringUtils.isEmpty(vipName)) {
- return error("会员名不能为空");
- }
- if (StringUtils.isEmpty(password)) {
- return error("密码不能为空");
- }
- if (StringUtils.isEmpty(mobile)) {
- return error("手机号不能为空");
- }
- // 校验手机号
- checkMobile(mobile, mobileArea);
- // 校验验证码
- checkMobileCode(token, mobile, code);
- // 校验密码
- if (PasswordStrength.WEAK.equals(PasswordLevelUtils.checkPasswordLevel(password))) {
- return error("密码须为8-20字符的英文、数字混合");
- }
- // 设置第三方id
- if (!StringUtils.isEmpty(t)) {
- Token unionidToken = tokenService.findOne(t);
- Optional<ForeignInfo> foreignInfo = Optional.ofNullable(unionidToken).map(value -> (ModelMap) unionidToken.getBind()).map(value -> (ForeignInfo) value.get("data"));
- if (!foreignInfo.isPresent()) {
- return error("参数错误,绑定失败");
- }
- userService.setForeignOpenId(user, foreignInfo.get());
- }
- // 注册并添加注册日志
- appId = StringUtils.isEmpty(appId) ? "sso" : appId;
- user.setFromIp(IpUtils.getIp(request));
- user.setFromUrl(URLDecoder.decode(returnUrl, "utf-8"));
- user = userService.register(user, appId);
- registerLogger.info(Type.REGISTER_PERSONAL.getValue(), Step.FIRST.getValue(), "个人注册成功", user, user.getFromApp());
- // 注册成功后删除验证码token
- if (!StringUtils.isEmpty(t)) {
- tokenService.delete(t);
- }
- tokenService.delete(token);
- App app = appService.findOne(appId);
- if ("mall".equals(appId)) {
- UserAccount userAccount = personalAccountService.findOneByUserUU(appId, user.getUserUU());
- userAccount.setLastLoginTime(null);
- List<String> loginUrls = appService.findAllLoginUrl();
- ModelMap data = new ModelMap();
- data.addAttribute("data", userAccount)
- .addAttribute("loginUrls", loginUrls)
- .addAttribute("currentUrl", baseUrl)
- .addAttribute("type", "mall");
- SSOToken st = new SSOToken(request, userAccount.getMobile());
- st.setData(JSON.toJSONString(userAccount));
- SSOHelper.setSSOCookie(request, response, st, true);
- LOGGER.info("用户({})注册并登录成功,时间:{}", user.getUserUU(), System.currentTimeMillis());
- return success(data);
- } else if ("city".equals(appId) || "city".equals(app == null ? "" : app.getUserControl())) {
- UserAccount userAccount = personalAccountService.findOneByUserUU(appId, user.getUserUU());
- userAccount.setLastLoginTime(null);
- List<String> loginUrls = appService.findAllLoginUrl();
- ModelMap data = new ModelMap();
- data.addAttribute("data", userAccount)
- .addAttribute("loginUrls", loginUrls)
- .addAttribute("currentUrl", baseUrl)
- .addAttribute("type", "city");
- data.addAttribute("bgImage", "https://dfs.ubtob.com/group1/M00/88/AE/CgpkyFsPxC-ADHD8ACBM14PiAS8632.png")
- .addAttribute("type", "city");
- SSOToken st = new SSOToken(request, userAccount.getMobile());
- st.setData(JSON.toJSONString(userAccount));
- SSOHelper.setSSOCookie(request, response, st, true);
- LOGGER.info("用户({})注册并登录成功,时间:{}", user.getUserUU(), System.currentTimeMillis());
- return success(data);
- }
- // 设置返回数据
- LOGGER.info("用户({})注册成功,时间:{}", user.getUserUU(), System.currentTimeMillis());
- return success(new ModelMap("userUU", user.getUserUU()));
- }
- /**
- * 获取验证码
- *
- * @param mobile 手机号
- * @return success(tokenId)
- */
- @RequestMapping(value = "/checkCode", method = RequestMethod.GET)
- @ResponseBody
- public ModelMap getCode(String mobile, String code) {
- // 参数校验
- if (StringUtils.isEmpty(mobile)) {
- return error("请输入手机号");
- }
- // 校验图片验证码
- CaptchaUtil.checkCode(request, RESET_CAPTCHA, code);
- // 获取验证码
- String token = getMobileToken(mobile);
- // 设置返回数据
- ModelMap data = new ModelMap();
- data.put("token", token);
- data.put("code", request.getSession().getAttribute("code"));
- request.getSession().setAttribute("token", token);
- return data;
- }
- /**
- * 校验验证码
- *
- * @param code 验证码
- * @param token 验证码tokenId
- * @return 验证成功:success(),验证失败:error("错误信息")
- */
- @RequestMapping(value = "/checkCode", method = RequestMethod.POST)
- @ResponseBody
- public ModelMap checkCode(String token, String mobile, String code) {
- // 校验token是否正确
- String sessionToken = (String) request.getSession().getAttribute("token");
- if (StringUtils.isEmpty(sessionToken) || !sessionToken.equals(token)) {
- return error("请重新获取验证码");
- }
- // 校验验证码
- checkMobileCode(token, mobile, code);
- // 设置返回值
- return success();
- }
- }
|