|
|
@@ -11,7 +11,7 @@ import com.uas.sso.dao.UserDao;
|
|
|
import com.uas.sso.dao.UserRecordDao;
|
|
|
import com.uas.sso.entity.*;
|
|
|
import com.uas.sso.exception.VisibleError;
|
|
|
-import com.uas.sso.foreign.ForeignInfo;
|
|
|
+import com.uas.sso.foreign.entity.ForeignInfo;
|
|
|
import com.uas.sso.foreign.bihe.entity.BiHeInfo;
|
|
|
import com.uas.sso.foreign.weixin.entity.OAuthInfo;
|
|
|
import com.uas.sso.i.CountCallBack;
|
|
|
@@ -71,6 +71,9 @@ public class UserServiceImpl implements UserService {
|
|
|
@Autowired
|
|
|
private UserQuestionService userQuestionService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private TokenService tokenService;
|
|
|
+
|
|
|
private UserBufferedLogger userLogger = LoggerManager.getLogger(UserBufferedLogger.class);
|
|
|
|
|
|
private SyncBufferedLogger syncLogger = LoggerManager.getLogger(SyncBufferedLogger.class);
|
|
|
@@ -772,10 +775,91 @@ public class UserServiceImpl implements UserService {
|
|
|
public User findByForeignId(ForeignInfo foreignInfo) {
|
|
|
User user = null;
|
|
|
if (foreignInfo instanceof OAuthInfo) {
|
|
|
- user = userDao.findByWxUnionid(foreignInfo.getForeignId());
|
|
|
+ user = userDao.findByWxUnionid(foreignInfo.getForeignOpenId());
|
|
|
} else if (foreignInfo instanceof BiHeInfo) {
|
|
|
- user = userDao.findByBhOpenId(foreignInfo.getForeignId());
|
|
|
+ user = userDao.findByBhOpenId(foreignInfo.getForeignOpenId());
|
|
|
+ }
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public User bindForeignOpenId(String username, String password, ForeignInfo foreignInfo) {
|
|
|
+ // 校验空参数
|
|
|
+ try {
|
|
|
+ Assert.hasText(username, "用户名不能为空");
|
|
|
+ Assert.hasText(password, "密码不能为空");
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ throw new VisibleError(e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验用户名密码是否正确
|
|
|
+ User user = findByUsername(username);
|
|
|
+ if (user == null) {
|
|
|
+ throw new VisibleError("该用户不存在");
|
|
|
+ }
|
|
|
+ checkPassword(user.getUserUU(), password, false);
|
|
|
+
|
|
|
+ // 设置第三方openId
|
|
|
+ setForeignOpenId(user, foreignInfo);
|
|
|
+ userDao.save(user);
|
|
|
+
|
|
|
+ userLogger.info(user, Type.BIND_FOREIGN.getValue());
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public User bindForeignOpenId(String code, String mobile, String codeToken, ForeignInfo foreignInfo) {
|
|
|
+ // 校验空参数
|
|
|
+ try {
|
|
|
+ Assert.hasText(code, "验证码不能为空");
|
|
|
+ Assert.hasText(mobile, "手机号不能为空");
|
|
|
+ Assert.hasText(codeToken, "token不能为空");
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ throw new VisibleError(e.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 校验验证码是否正确
|
|
|
+ Token existToken = tokenService.findOne(codeToken);
|
|
|
+ if (existToken == null || existToken.isExpired()) {
|
|
|
+ throw new VisibleError("验证码过期");
|
|
|
}
|
|
|
+ if (!mobile.equals(existToken.getMobile())) {
|
|
|
+ throw new VisibleError("手机号已被修改,请重新获取验证码");
|
|
|
+ }
|
|
|
+ if (!code.equals(existToken.getBind())) {
|
|
|
+ throw new VisibleError("验证码不正确,请重新输入");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置第三方openId
|
|
|
+ User user = userDao.findByMobile(mobile);
|
|
|
+ if (user == null) {
|
|
|
+ throw new VisibleError("该用户不存在");
|
|
|
+ }
|
|
|
+ setForeignOpenId(user, foreignInfo);
|
|
|
+ userDao.save(user);
|
|
|
+
|
|
|
+ userLogger.info(user, Type.BIND_FOREIGN.getValue());
|
|
|
+ return user;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置用户第三方openId,不同应用对应不同字段
|
|
|
+ * @param user 用户信息
|
|
|
+ * @param foreignInfo
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public User setForeignOpenId(User user, ForeignInfo foreignInfo) {
|
|
|
+ if (user == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (foreignInfo instanceof OAuthInfo) {
|
|
|
+ user.setWxUnionid(foreignInfo.getForeignOpenId());
|
|
|
+ } else if (foreignInfo instanceof BiHeInfo) {
|
|
|
+ user.setBhOpenId(foreignInfo.getForeignOpenId());
|
|
|
+ }
|
|
|
+
|
|
|
return user;
|
|
|
}
|
|
|
|