Commit 60a642bb authored by 技术部-任文超's avatar 技术部-任文超

魔法值---完成

parent be80edab
......@@ -40,6 +40,9 @@ public interface Constants {
int DAY_NO_MIN = 30;
int MONTH_NO_MAX = 200;
int MONTH_NO_MIN = 30;
int AGE_MAX = 150;
int USER_QUERY_INFO_BATCH_SIZE = 3000;
int USER_ID_BATCH_SIZE = 500;
/** 垃圾,前辈竟然用这个办法来识别UUID */
int UUID_MIN_LENGTH = 10;
String AUTO_SORT_TYPE = "auto";
......@@ -59,16 +62,23 @@ public interface Constants {
String ERROR_MSG = "errorMsg";
String BANK_CARD = "bankCard";
String ADDRESS = "address";
/**
* 微信标识参数名
*/
String WECHAT_OPEN_ID = "wechat_open_id";
String PASSWORD = "password";
String RESULT_CODE = "code";
String RESULT_DATA = "data";
String SUCCESS_CODE = "0000";
String PROTOCOL_HEAD_HTTPS = "https:";
String PROTOCOL_HEAD_HTTP = "http";
String REDIRECT = "redirect";
String LOCAL = "local";
String DOCKER_DOMAIN = "liangkebang";
/**
* 微信标识参数名
*/
String WECHAT_OPEN_ID = "wechat_open_id";
String MERCHANT_BAITIAO = "baitiao";
String MERCHANT_WECHAT_PAY = "wechat-pay";
// -- Start -- IPV4安全策略常量组
/**
......@@ -156,8 +166,10 @@ public interface Constants {
interface Channel {
long BAITIAO = 222L;
String LKB_CODE = "0002"; // 量化派channnel_code
// 量化派channnel_code
String LKB_CODE = "0002";
long WECHAT = 198L;
long HENGCHANG = 58L;
}
interface Session {
......
package cn.quantgroup.xyqb.controller;
import cn.quantgroup.xyqb.exception.PasswordErrorLimitException;
import cn.quantgroup.xyqb.exception.UserNotExistException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import cn.quantgroup.xyqb.exception.WechatRelateUserException;
import cn.quantgroup.xyqb.exception.*;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.util.IpUtil;
import org.slf4j.Logger;
......@@ -69,6 +66,18 @@ public class ExceptionHandlingController implements IBaseController {
return new JsonResult(unee.getMessage(), 401L, null);
}
/**
* 用户查询或导出异常
*
* @param uqle
* @return
*/
@ExceptionHandler(UserQueryLogException.class)
public JsonResult userQueryLogException(UserQueryLogException uqle) {
LOGGER.info("throw UserQueryLogException,msg={},businessCode={},code={}", uqle.getMessage(), 1L, 0L);
return JsonResult.buildErrorStateResult(uqle.getMessage(), null);
}
/**
* 微信关联异常
*
......
......@@ -191,7 +191,7 @@ public class WeChatController implements IBaseController {
schema = extDataObj.getOrDefault("protocol", Constants.PROTOCOL_HEAD_HTTP).toString();
log.info("从微信登录extData中获得协议信息,protocol:{}", schema);
registerFrom = Long.valueOf(extDataObj.getOrDefault("registerFrom", "1").toString());
redirect = (String) extDataObj.getOrDefault("redirect", "redirect");
redirect = (String) extDataObj.getOrDefault(Constants.REDIRECT, Constants.REDIRECT);
log.info("从微信登录,registerFrom:{}, redirect:{}", registerFrom, redirect);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
}
......@@ -274,7 +274,7 @@ public class WeChatController implements IBaseController {
public void redirectForTest(String redirect, HttpServletRequest request, HttpServletResponse response) throws MalformedURLException {
URL url = new URL(redirect);
String host = url.getHost();
if (!host.endsWith("liangkebang.com") && !host.endsWith("liangkebang.net")) {
if (!host.contains(Constants.DOCKER_DOMAIN)) {
log.error("redirect 非法请求, host:{}", host);
return;
}
......@@ -320,22 +320,22 @@ public class WeChatController implements IBaseController {
private String createUserSession(User user, Merchant merchant, String redirect, String domain, Long registerFrom) {
log.info("[WeChatController][createUserSession]微信授权及跳转:user:{},merchant:{},redirect:{},domain:{},registerFrom:{}", user, merchant, redirect, domain, registerFrom);
LoginProperties loginProperties = new LoginProperties("", 4, Constants.Channel.WECHAT, registerFrom, String.valueOf(Constants.Channel.WECHAT), merchant.getId(), merchant.getName());
if (StringUtils.isEmpty(redirect) || "redirect".equals(redirect)) {
if (StringUtils.isEmpty(redirect) || Constants.REDIRECT.equals(redirect)) {
log.info("微信登录:redirect为null,走正常流程.");
if ("baitiao".equals(merchant.getName())) {
if (Constants.MERCHANT_BAITIAO.equals(merchant.getName())) {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget5", Constants.Channel.BAITIAO, domain, Constants.Channel.WECHAT);
} else if ("wechat-pay".equals(merchant.getName())) {
} else if (Constants.MERCHANT_WECHAT_PAY.equals(merchant.getName())) {
AuthBean authBean = sessionService.createSession(user, loginProperties);
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + Constants.Channel.WECHAT + "&key=" + merchant.getName() + "&target=cashTarget5";
} else {
return loginInWechatWithSessionCreated(user, merchant, "cashTarget4", 1L, domain, registerFrom);
}
} else if ("local".equals(redirect)) {
} else if (Constants.LOCAL.equals(redirect)) {
log.info("微信登录:redirect不为null,创建session跳到指定前端页面.");
AuthBean authBean = sessionService.createSession(user, loginProperties);
log.info("微信登录:跳转地址{}", domain + "/weixin/callback?phoneNo=" + user.getPhoneNo() + "&token=" + authBean.getToken());
Long channelId = "baitiao".equals(merchant.getName()) ? Constants.Channel.BAITIAO : 1L;
String target = "baitiao".equals(merchant.getName()) ? "cashTarget5" : "cashTarget4";
Long channelId = Constants.MERCHANT_BAITIAO.equals(merchant.getName()) ? Constants.Channel.BAITIAO : 1L;
String target = Constants.MERCHANT_BAITIAO.equals(merchant.getName()) ? "cashTarget5" : "cashTarget4";
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom +
"&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target + "&isWechat=true";
}
......@@ -364,13 +364,13 @@ public class WeChatController implements IBaseController {
}
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom, String domain) {
if ("baitiao".equals(merchant.getName())) {
if (registerFrom == 58L || registerFrom == 198L) {
if (Constants.MERCHANT_BAITIAO.equals(merchant.getName())) {
if (registerFrom == Constants.Channel.HENGCHANG || registerFrom == Constants.Channel.WECHAT) {
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=" + registerFrom;
} else {
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198";
}
} else if ("wechat-pay".equals(merchant.getName())) {
} else if (Constants.MERCHANT_WECHAT_PAY.equals(merchant.getName())) {
return domain + "/landing?key=wechat-pay&target=cashTarget5&channelId=1&page=landing/4&registerFrom=" + registerFrom;
} else {
return domain + "/landing?key=xyqb&target=cashTarget4&channelId=1&registerFrom=" + registerFrom;
......@@ -378,13 +378,13 @@ public class WeChatController implements IBaseController {
}
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom, String domain) {
if ("baitiao".equals(merchant.getName())) {
if (registerFrom == 58L || registerFrom == 198L) {
if (Constants.MERCHANT_BAITIAO.equals(merchant.getName())) {
if (registerFrom == Constants.Channel.HENGCHANG || registerFrom == Constants.Channel.WECHAT) {
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=" + registerFrom + "&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
} else {
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
}
} else if ("wechat-pay".equals(merchant.getName())) {
} else if (Constants.MERCHANT_WECHAT_PAY.equals(merchant.getName())) {
return domain + "/landing?key=wechat-pay&target=cashTarget5&page=landing/4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId();
} else {
return domain + "/landing?key=xyqb&target=cashTarget4&registerFrom= " + registerFrom + "&channelId=1&isWechat=true&openId=" + userInfo.getOpenId();
......
......@@ -37,12 +37,10 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.Min;
import java.io.UnsupportedEncodingException;
......@@ -89,14 +87,9 @@ public class InnerController implements IBaseController {
private ISmsService smsService;
@Autowired
private IUserRegisterService userRegisterService;
@Resource
private ApplicationEventPublisher applicationEventPublisher;
private static final char[] PWD_BASE = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};
private static final String RESET_PWD_TOKEN = "ecf75c1f-2ccb-4661-8e4b-2874c0f45a2b";
private static final String MODIFY_CONTACT_TOKEN = "@qwsdedad131323213w!";
/**
......@@ -209,7 +202,7 @@ public class InnerController implements IBaseController {
}
List<Long> userIds = JSONObject.parseObject(userIdsString, new TypeReference<List<Long>>() {
});
if (!CollectionUtils.isEmpty(userIds) && userIds.size() <= 500) {
if (!CollectionUtils.isEmpty(userIds) && userIds.size() <= Constants.USER_ID_BATCH_SIZE) {
Map<Long, String> userIdAndPhoneMap = userService.findPhoneByIdsInDb(userIds);
return JsonResult.buildSuccessResult("", userIdAndPhoneMap);
} else {
......@@ -473,10 +466,9 @@ public class InnerController implements IBaseController {
@RequestParam(required = false) String phoneNo,
@RequestParam(required = false) Relation relation, String key,
@RequestParam String reason, HttpServletRequest request) {
if (!"@qwsdedad131323213w!".equals(key) || contactId == null) {
if (!MODIFY_CONTACT_TOKEN.equals(key) || contactId == null) {
return JsonResult.buildErrorStateResult("参数不合法", null);
}
if (StringUtils.isEmpty(name) && StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult("修改联系人修改条件不能都为空", null);
}
......@@ -986,8 +978,8 @@ public class InnerController implements IBaseController {
}
List<String> phones = JSONObject.parseObject(userPhones, new TypeReference<List<String>>() {
});
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(phones)) {
if (!(phones.size() > MAX_SIZE)) {
if (!CollectionUtils.isEmpty(phones)) {
if (phones.size() <= MAX_SIZE) {
List<User> users = userService.findByPhones(phones);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(users)) {
return JsonResult.buildSuccessResult(null, users.stream().collect(Collectors.toMap(User::getPhoneNo, User::getId)));
......@@ -1013,16 +1005,14 @@ public class InnerController implements IBaseController {
@ApiOperation(value = "根据手机号批量查询UUID", httpMethod = "POST")
@TargetDataSource(type = DSType.SLAVE)
public JsonResult getUuidsByPhones(@RequestParam("userPhones") String userPhones) {
if (StringUtils.isBlank(userPhones)) {
return JsonResult.buildErrorStateResult("传入用户手机号不可为空", null);
}
List<String> phones = JSONObject.parseObject(userPhones, new TypeReference<List<String>>() {
});
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(phones)) {
if (!(phones.size() > MAX_SIZE)) {
if (phones.size() <= MAX_SIZE) {
List<UserInfo> userInfos = userService.findUserInfosByPhones(phones);
if (org.apache.commons.collections.CollectionUtils.isNotEmpty(userInfos)) {
Map<String, UserInfo> userInfoMap = Maps.newHashMapWithExpectedSize(userInfos.size());
......@@ -1079,7 +1069,6 @@ public class InnerController implements IBaseController {
if (!isIdCard) {
return JsonResult.buildErrorStateResult("用户身份证号异常.", null);
}
Address addressObj = null;
//地址信息,同时存在provinceCode和address时才校验地址信息
if (StringUtils.isNotEmpty(provinceCode) && StringUtils.isNotEmpty(address)) {
......@@ -1114,14 +1103,12 @@ public class InnerController implements IBaseController {
addressObj.setDistrict(district);
addressObj.setAddress(address);
}
channelId = MoreObjects.firstNonNull(channelId, "-1");
// 验证用户是否已存在
User user = userService.findByPhoneInDb(phoneNo);
if (null != user) {
return JsonResult.buildErrorStateResult("用户已存在,手机号被占用", null);
}
List<Contact> contactList = null;
// 目前对空白字符串和null值容错,因是api调用,不考虑对非法格式容错(会阻断注册)
if (StringUtils.isNotBlank(contacts)) {
......@@ -1135,9 +1122,7 @@ public class InnerController implements IBaseController {
}
}
}
user = userRegisterService.register(Long.valueOf(registeredFrom), Long.valueOf(channelId), phoneNo, name, idNo, addressObj, contacts, contactList, btRegisterChannelId);
UserRet userRet = new UserRet(user);
return JsonResult.buildSuccessResult(null, userRet);
}
......@@ -1406,7 +1391,7 @@ public class InnerController implements IBaseController {
@RequestMapping("/user/password/reset/{key}/{phone}")
public JsonResult resetPasswordByKey(@PathVariable("key") String key, @PathVariable("phone") String phone) {
log.info("密码重置请求,phone:[{}]", phone);
if (!"ecf75c1f-2ccb-4661-8e4b-2874c0f45a2b".equalsIgnoreCase(key)) {
if (!RESET_PWD_TOKEN.equalsIgnoreCase(key)) {
log.error("密码重置失败,key错误!@!,phone:[{}]", phone);
return JsonResult.buildErrorStateResult("用户密码重置失败.", HttpStatus.SC_UNAUTHORIZED);
}
......
package cn.quantgroup.xyqb.exception;
/**
* @author renwc
* @time 2019-10-30
*/
public class UserQueryLogException extends RuntimeException {
private static final long serialVersionUID = -1L;
public UserQueryLogException(String msg, Throwable t) {
super(msg, t);
}
public UserQueryLogException(String msg) {
super(msg);
}
}
......@@ -105,7 +105,7 @@ public class IdCardServiceImpl implements IIdCardService {
}
GregorianCalendar gc = new GregorianCalendar();
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
if (gc.get(Calendar.YEAR) - year > 150 || gc.getTime().getTime() - date.getTime() < 0) {
if (gc.get(Calendar.YEAR) - year > Constants.AGE_MAX || gc.getTime().getTime() - date.getTime() < 0) {
return false;
}
if (month < Constants.MONTH_NO_MIN || month > Constants.MONTH_NO_MAX) {
......@@ -169,7 +169,7 @@ public class IdCardServiceImpl implements IIdCardService {
return null;
}
if (gc.get(Calendar.YEAR) - year > 150 || gc.getTime().getTime() - date.getTime() < 0) {
if (gc.get(Calendar.YEAR) - year > Constants.AGE_MAX || gc.getTime().getTime() - date.getTime() < 0) {
return cardInfo;
}
if (month < Constants.MONTH_NO_MIN || month > Constants.MONTH_NO_MAX) {
......@@ -241,7 +241,7 @@ public class IdCardServiceImpl implements IIdCardService {
}
GregorianCalendar gc = new GregorianCalendar();
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
if (gc.get(Calendar.YEAR) - year > 150 || gc.getTime().getTime() - date.getTime() < 0) {
if (gc.get(Calendar.YEAR) - year > Constants.AGE_MAX || gc.getTime().getTime() - date.getTime() < 0) {
throw new IdCardException("身份证出生年份不正确");
}
if (month < Constants.MONTH_NO_MIN || month > Constants.MONTH_NO_MAX) {
......
......@@ -77,7 +77,8 @@ public class UserLoginTest {
//String userId = "8c02a7b8-815f-4ba0-b39c-a9e6e52904de";
//测试userId为空的情况
String userId = "";
request.addHeader("x-original-client-ip", "172.16.0.1");
String ip = "172.16.0.1";
request.addHeader("x-original-client-ip", ip);
request.addHeader("authorization", "Basic MTg1MTMzNDE4MDg6MTIzNDU2");
JsonResult jsonResult = userController.login(channelId, appChannel, createFrom, userId,"xyqb","xyqb", request);
AuthBean authBean = (AuthBean) jsonResult.getData();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment