Commit 3b01caa6 authored by 技术部-任文超's avatar 技术部-任文超

Merge branch '20191025-sonar' into 'master'

20191025 sonar

See merge request !36
parents 01111283 e866a8bf
......@@ -6,26 +6,26 @@ package cn.quantgroup.user.enums;
public enum MaritalStatus {
UNKNOWN("未知"),
SINGLE("未婚"), // 1
MARRIED("已婚"), // 2
DIVORCED("离异"), // 3
WINDOWED("丧偶"), // 4
SINGLE("未婚"),
MARRIED("已婚"),
DIVORCED("离异"),
WINDOWED("丧偶"),
OTHER("其他");
String description;
private String desc;
MaritalStatus(String desc) {
description = desc;
this.desc = desc;
}
public String getDescription() {
return description;
public String getDesc() {
return desc;
}
@Override
public String toString() {
String sb = "MaritalStatus{" + "description='" + description + '\'' +
String sb = "MaritalStatus{" + "desc='" + desc + '\'' +
'}';
return sb;
}
......
......@@ -15,19 +15,19 @@ public enum Relation {
SELF("本人"),
OTHER("其他");
String description;
private String desc;
Relation(String desc) {
description = desc;
this.desc = desc;
}
public String getDescription() {
return description;
public String getDesc() {
return desc;
}
@Override
public String toString() {
String sb = "Relation{" + "description='" + description + '\'' +
String sb = "Relation{" + "desc='" + desc + '\'' +
'}';
return sb;
}
......
......@@ -25,14 +25,58 @@ public interface Constants {
Long VERIFICATION_CODE_FINITE_COUNT = 3L;
String X_AUTH_TOKEN = "x-auth-token";
int VERIFICATION_LEN = 2;
int SMS_CODE_LEN_4 = 4;
int SMS_CODE_LEN_6 = 6;
int TOKEN_LENGTH = 36;
int MD5_LENGTH = 32;
int THOUSAND_SECOND = 1000;
int MILLIS_PER_SECOND = 1000;
int MILLIS_OF_TEN_SECOND = 10000;
int PAGE_SIZE_MAX = 200;
int PAGE_SIZE_DEFAULT = 30;
int DAY_NO_MAX = 31;
int DAY_NO_MIN = 1;
int MONTH_NO_MAX = 12;
int MONTH_NO_MIN = 1;
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";
String CHECK_FAIL = "fail";
String SPLIT_CHAR = ":";
String TOKEN_MASTER = "*";
String PASSWORD_HEADER = "Basic ";
int AUTHORIZE_HEADER_SIZE = 2;
String PAGE_NEXT_KEY_XYQB = "xyqb";
/**
* 登录账号/手机号参数名
*/
String PHONE_NO = "phoneNo";
String ID_NO = "idNo";
String USER_ID = "userId";
String USER_NAME = "name";
String BANK_CARD = "bankCard";
String ADDRESS = "address";
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安全策略常量组
/**
......@@ -109,13 +153,19 @@ public interface Constants {
* 默认随机密码长度
*/
int RANDOM_PWD_LEN = 15;
/** 旧的大陆身份证号长度 */
int ID_NO_OLD_LENGTH = 15;
/** 标准大陆身份证号长度 */
int IDNO_LENGTH = 18;
int ID_NO_STANDARD_LENGTH = 18;
int ID_NO_CHECK_LENGTH = 17;
int ID_NO_AREA_CODE_LENGTH = 2;
int ID_NO_CHECK_MASK = 11;
int GENDER_MASK = 2;
interface Channel {
long BAITIAO = 222L;
String LKB_CODE = "0002"; // 量化派channnel_code
long WECHAT = 198L;
long HENGCHANG = 58L;
}
interface Session {
......
package cn.quantgroup.xyqb.aspect.accessable;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
......@@ -20,10 +21,10 @@ import javax.servlet.http.HttpServletRequest;
* @author renwc
* @date 2017-12-01
*/
@Slf4j
@Aspect
@Component
public class IpValidateAdvisor {
private static final Logger LOGGER = LoggerFactory.getLogger(IpValidateAdvisor.class);
@Pointcut("execution(public * cn.quantgroup.xyqb.controller.internal..*.*Controller.*(..)) " +
" || execution(public * cn.quantgroup.xyqb.controller.dust..*.*Controller.*(..)) " +
......@@ -35,13 +36,13 @@ public class IpValidateAdvisor {
private Object doWhiteIpMatch(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 客户端IP
String clientIp = IPUtil.getRemoteIP(request);
String clientIp = IpUtil.getRemoteIP(request);
// 白名单
if (IPUtil.whiteOf(clientIp)) {
if (IpUtil.whiteOf(clientIp)) {
return pjp.proceed();
}
IPUtil.logIp(LOGGER, request);
LOGGER.error("Lock_ipv4: don't match white ip access:{}", clientIp);
IpUtil.logIp(log, request);
log.error("Lock_ipv4: don't match white ip access:{}", clientIp);
return JsonResult.buildErrorStateResult("非法访问", null);
}
}
......@@ -4,9 +4,10 @@ package cn.quantgroup.xyqb.aspect.captcha;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.octo.captcha.service.CaptchaServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
......@@ -37,11 +38,11 @@ import java.util.UUID;
* @version 1.0.0
* @since 2017-11-07
*/
@Slf4j
@Aspect
@Component
public class CaptchaFiniteValidateAdvisor {
private static final Logger LOGGER = LoggerFactory.getLogger(CaptchaFiniteValidateAdvisor.class);
private static final String SUPER_CAPTCHA_ID = UUID.nameUUIDFromBytes("__QG_APPCLIENT_AGENT__".getBytes(Charset.forName("UTF-8"))).toString();
private static final String SUPER_CAPTCHA = "__SUPERQG__";
......@@ -84,7 +85,7 @@ public class CaptchaFiniteValidateAdvisor {
String phoneNo = phonePasswordMap.get(Constants.PHONE_NO);
Long countErrorByPhone = getCount(phoneNo);
if (countErrorByPhone == null) {
LOGGER.info("用户名或密码不正确, phoneNo={}, countErrorByPhone={}, clientIp={}", phoneNo, countErrorByPhone, IPUtil.getRemoteIP(request));
log.info("用户名或密码不正确, phoneNo={}, countErrorByPhone={}, clientIp={}", phoneNo, countErrorByPhone, IpUtil.getRemoteIP(request));
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}
if (countErrorByPhone > Constants.Image_Need_Count) {
......@@ -92,7 +93,7 @@ public class CaptchaFiniteValidateAdvisor {
String captchaId = Optional.ofNullable(request.getParameter(Constants.QG_CAPTCHA_ID)).orElse("");
String captchaValue = request.getParameter(Constants.QG_CAPTCHA_VALUE);
if (shouldSkipCaptchaValidate(registerFrom, captchaId, captchaValue)) {
LOGGER.info("使用超级图形验证码校验, registerFrom={}, clientIp={}", registerFrom, IPUtil.getRemoteIP(request));
log.info("使用超级图形验证码校验, registerFrom={}, clientIp={}", registerFrom, IpUtil.getRemoteIP(request));
return pjp.proceed();
}
if (StringUtils.isNotBlank(captchaValue)) {
......@@ -103,7 +104,7 @@ public class CaptchaFiniteValidateAdvisor {
try {
validCaptcha = imageCaptchaService.validateResponseForID(Constants.IMAGE_CAPTCHA_KEY + captchaId, captcha);
} catch (CaptchaServiceException ex) {
LOGGER.error("验证码校验异常, {}, {}", ex.getMessage(), ex);
log.error("验证码校验异常, {}, {}", ex.getMessage(), ex);
}
if (validCaptcha) {
return pjp.proceed();
......@@ -150,19 +151,18 @@ public class CaptchaFiniteValidateAdvisor {
* @return 账密参数Map 或 null
*/
private Map<String, String> getHeaderParam(HttpServletRequest request) {
String verificationHeader = "Basic ";
String credential = request.getHeader("authorization");
if (StringUtils.isBlank(credential) || !credential.startsWith(verificationHeader)) {
LOGGER.info("参数无效, credential:{}", credential);
if (StringUtils.isBlank(credential) || !credential.startsWith(Constants.PASSWORD_HEADER)) {
log.info("参数无效, credential:{}", credential);
return null;
}
credential = credential.substring(verificationHeader.length(), credential.length());
credential = credential.substring(Constants.PASSWORD_HEADER.length());
byte[] buf = Base64.decodeBase64(credential);
credential = new String(buf, Charset.forName("UTF-8"));
String[] credentialArr = credential.split(":");
boolean headerParamValid = credentialArr.length == 2;
if (!headerParamValid) {
LOGGER.info("参数无效, credential:{}", credential);
log.info("参数无效, credential:{}", credential);
return null;
}
// 当前用户手机号和密码
......@@ -170,10 +170,10 @@ public class CaptchaFiniteValidateAdvisor {
String password = credentialArr[1];
headerParamValid = headerParamValid && ValidationUtil.validatePhoneNo(phoneNo) && StringUtils.isNotBlank(password);
if (!headerParamValid) {
LOGGER.info("参数无效, credential:{}, phoneNo:{}, password:{}", credential, phoneNo, password);
log.info("参数无效, credential:{}, phoneNo:{}, password:{}", credential, phoneNo, password);
return null;
}
LOGGER.info("账密登录, phoneNo:{}", phoneNo);
log.info("账密登录, phoneNo:{}", phoneNo);
Map<String, String> phonePasswordMap = new HashMap<>(2);
phonePasswordMap.put(Constants.PHONE_NO, phoneNo);
phonePasswordMap.put("password", password);
......
......@@ -5,7 +5,7 @@ import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.captcha.IGeetestCaptchaService;
import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
......@@ -84,8 +84,8 @@ public class CaptchaNewValidateAdvisor {
String challenge = request.getParameter(Constants.FN_GEETEST_CHALLENGE);
String validate = request.getParameter(Constants.FN_GEETEST_VALIDATE);
String seccode = request.getParameter(Constants.FN_GEETEST_SECCODE);
log.info("Geetest - 极验二次校验, phoneNo:{}, uniqueKey:{}, clientType:{}, ip:{}, challenge:{}, validate:{}, seccode:{}", phoneNo, uniqueKey, clientType, IPUtil.getRemoteIP(request), challenge, validate, seccode);
return geetestCaptchaService.validGeetestCaptcha(uniqueKey, IPUtil.getRemoteIP(request), ClientType.valueByName(clientType), challenge, validate, seccode);
log.info("Geetest - 极验二次校验, phoneNo:{}, uniqueKey:{}, clientType:{}, ip:{}, challenge:{}, validate:{}, seccode:{}", phoneNo, uniqueKey, clientType, IpUtil.getRemoteIP(request), challenge, validate, seccode);
return geetestCaptchaService.validGeetestCaptcha(uniqueKey, IpUtil.getRemoteIP(request), ClientType.valueByName(clientType), challenge, validate, seccode);
}
/**
......@@ -99,7 +99,7 @@ public class CaptchaNewValidateAdvisor {
String phoneNo = request.getParameter(Constants.PHONE_NO);
String captchaId = Optional.ofNullable(request.getParameter(Constants.QG_CAPTCHA_ID)).orElse("");
String captchaValue = request.getParameter(Constants.QG_CAPTCHA_VALUE);
log.info("Quantgroup - 图形验证码校验, phoneNo:{}, ip:{}, captchaId:{}, captchaValue:{}", phoneNo, IPUtil.getRemoteIP(request), captchaId, captchaValue);
log.info("Quantgroup - 图形验证码校验, phoneNo:{}, ip:{}, captchaId:{}, captchaValue:{}", phoneNo, IpUtil.getRemoteIP(request), captchaId, captchaValue);
return quantgroupCaptchaService.validQuantgroupCaptcha(captchaId, captchaValue);
}
......
......@@ -3,8 +3,9 @@ package cn.quantgroup.xyqb.aspect.captcha;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import com.octo.captcha.service.CaptchaServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
......@@ -36,11 +37,11 @@ import java.util.UUID;
* 修改时间:15/11/17 14:49
* 修改备注:
*/
@Slf4j
@Aspect
@Component
public class CaptchaValidateAdvisor {
private static final Logger LOGGER = LoggerFactory.getLogger(CaptchaValidateAdvisor.class);
private static final String SUPER_CAPTCHA_ID = UUID.nameUUIDFromBytes("__QG_APPCLIENT_AGENT__".getBytes(Charset.forName("UTF-8"))).toString();
private static final String SUPER_CAPTCHA = "__SUPERQG__";
......@@ -79,7 +80,7 @@ public class CaptchaValidateAdvisor {
String captchaId = Optional.ofNullable(request.getParameter(Constants.QG_CAPTCHA_ID)).orElse("");
String captchaValue = request.getParameter(Constants.QG_CAPTCHA_VALUE);
if (shouldSkipCaptchaValidate(registerFrom, captchaId, captchaValue)) {
LOGGER.info("使用超级图形验证码校验, registerFrom={}, clientIp={}", registerFrom, IPUtil.getRemoteIP(request));
log.info("使用超级图形验证码校验, registerFrom={}, clientIp={}", registerFrom, IpUtil.getRemoteIP(request));
return pjp.proceed();
}
JsonResult result = JsonResult.buildSuccessResult("验证码不正确", "");
......@@ -92,7 +93,7 @@ public class CaptchaValidateAdvisor {
try {
validCaptcha = imageCaptchaService.validateResponseForID(Constants.IMAGE_CAPTCHA_KEY + captchaId, captcha);
} catch (CaptchaServiceException ex) {
LOGGER.error("验证码校验异常, {}, {}", ex.getMessage(), ex);
log.error("验证码校验异常, {}, {}", ex.getMessage(), ex);
}
if (validCaptcha) {
return pjp.proceed();
......
......@@ -5,7 +5,8 @@ import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
......@@ -28,11 +29,11 @@ import java.util.Set;
* @version 1.0.0
* @since 2017-11-21
*/
@Slf4j
@Aspect
@Component
public class PasswordFreeAccessValidateAdvisor {
private static final Logger LOGGER = LoggerFactory.getLogger(PasswordFreeAccessValidateAdvisor.class);
private static final String USER_ID = "userId";
/**
......@@ -65,42 +66,42 @@ public class PasswordFreeAccessValidateAdvisor {
*/
private boolean tokenValid(HttpServletRequest request) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IPUtil.getRemoteIP(request);
String clientIp = IpUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
if (!paramKeys.contains(Constants.PHONE_NO) && !paramKeys.contains(USER_ID)) {
LOGGER.info("非法请求 - 缺少参数, paramKeys={}, clientIp={}", paramKeys, clientIp);
log.info("非法请求 - 缺少参数, paramKeys={}, clientIp={}", paramKeys, clientIp);
return false;
}
// 当前请求的phoneNo/userId
String phoneNo = request.getParameter(Constants.PHONE_NO);
String userId = request.getParameter(USER_ID);
if (StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)) {
LOGGER.info("非法请求 - 缺少参数, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, clientIp);
log.info("非法请求 - 缺少参数, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, clientIp);
return false;
}
// 当前请求的Token
String token = request.getHeader(Constants.X_AUTH_TOKEN);
if (Objects.isNull(token) || token.length() != 36) {
LOGGER.info("非法请求 - 无效token, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
if (StringUtils.length(token) != Constants.TOKEN_LENGTH) {
log.info("非法请求 - 无效token, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
return false;
}
// 当前session
SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token);
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())) {
LOGGER.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
log.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
return false;
}
// 当前用户
User user = session.getValues().getUser();
if (Objects.isNull(user.getId()) && StringUtils.isBlank(user.getPhoneNo())) {
LOGGER.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
log.info("非法请求 - 未登录, token={}, phoneNo={}, userId={}, clientIp={}", token, phoneNo, userId, clientIp);
return false;
}
// 校对用户信息是否匹配
boolean valid = (Objects.nonNull(user.getId()) && Objects.equals(userId, user.getId().toString()));
valid = valid || (StringUtils.isNotBlank(phoneNo) && Objects.equals(phoneNo, user.getPhoneNo()));
if (!valid) {
LOGGER.info("非法请求 - 身份不匹配, token={}, phoneNo=({},{}), userId=({},{}), clientIp={}", token, phoneNo, user.getPhoneNo(), userId, user.getId(), clientIp);
log.info("非法请求 - 身份不匹配, token={}, phoneNo=({},{}), userId=({},{}), clientIp={}", token, phoneNo, user.getPhoneNo(), userId, user.getId(), clientIp);
}
return valid;
}
......
......@@ -3,7 +3,8 @@ package cn.quantgroup.xyqb.aspect.lock;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
......@@ -28,12 +29,11 @@ import java.util.Objects;
* @version 1.0.0
* @since 2017-11-23
*/
@Slf4j
@Aspect
@Component
public class PasswordErrorFiniteValidateAdvisor {
private static final Logger LOGGER = LoggerFactory.getLogger(PasswordErrorFiniteValidateAdvisor.class);
@Autowired
@Qualifier("stringRedisTemplate")
private RedisTemplate<String, String> redisTemplate;
......@@ -56,9 +56,9 @@ public class PasswordErrorFiniteValidateAdvisor {
private Object doFiniteValidate(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 客户端IP
String clientIp = IPUtil.getRemoteIP(request);
String clientIp = IpUtil.getRemoteIP(request);
// 白名单
if (IPUtil.whiteOf(clientIp)) {
if (IpUtil.whiteOf(clientIp)) {
return pjp.proceed();
}
// 补充白名单
......@@ -66,20 +66,20 @@ public class PasswordErrorFiniteValidateAdvisor {
return pjp.proceed();
}
// 入口服务器IP
if (StringUtils.startsWith(clientIp, "139.198.")) {
if (StringUtils.startsWith(clientIp, IpUtil.IO_IP)) {
return pjp.proceed();
}
// 黑名单
if (redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_BLACK, clientIp)) {
IPUtil.logIp(LOGGER, request);
LOGGER.info("Lock_ipv4: black ip access:{}", clientIp);
IpUtil.logIp(log, request);
log.info("Lock_ipv4: black ip access:{}", clientIp);
return JsonResult.buildErrorStateResult("登录失败", null);
}
String lockIpv4Key = getLockIpv4Key(clientIp);
String lock = redisTemplate.opsForValue().get(lockIpv4Key);
if (Objects.equals(Boolean.TRUE.toString(), lock)) {
IPUtil.logIp(LOGGER, request);
LOGGER.info("Lock_ipv4: locked ip access:{}", clientIp);
IpUtil.logIp(log, request);
log.info("Lock_ipv4: locked ip access:{}", clientIp);
return JsonResult.buildErrorStateResult("登录失败", null);
}
return pjp.proceed();
......
package cn.quantgroup.xyqb.aspect.logcaller;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import com.google.common.base.Stopwatch;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
......@@ -21,13 +22,12 @@ import java.util.concurrent.TimeUnit;
* 调用者记录
* Created by Administrator on 2017/5/15.
*/
@Slf4j
@Aspect
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class LogCallHttpAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(LogCallHttpAspect.class);
@Pointcut(value = "execution(public * cn.quantgroup.xyqb.controller..*.*(..)) " +
"&& !execution(* cn.quantgroup.xyqb.controller.ExceptionHandlingController.*(..))")
private void logHttpCaller() {
......@@ -38,7 +38,7 @@ public class LogCallHttpAspect {
Stopwatch stopwatch = Stopwatch.createStarted();
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attrs.getRequest();
String remoteIP = IPUtil.getRemoteIP(request);
String remoteIP = IpUtil.getRemoteIP(request);
Object[] args = pjp.getArgs();
boolean hasException = false;
Object result;
......@@ -50,7 +50,7 @@ public class LogCallHttpAspect {
} finally {
Stopwatch stop = stopwatch.stop();
long elapsed = stop.elapsed(TimeUnit.MILLISECONDS);
LOGGER.info("[httpRequestLog],url:[{}],remoteIP:[{}],args:[{}],duration:[{}],exception:[{}]",
log.info("[httpRequestLog],url:[{}],remoteIP:[{}],args:[{}],duration:[{}],exception:[{}]",
request.getRequestURL(), remoteIP, args, elapsed, hasException);
}
return result;
......
......@@ -25,7 +25,7 @@ public class CaptchaConfig {
@Bean
public CaptchaEngine initCaptchaEngine() {
return new CustomJCaptchaEngine();
return new CustomCaptchaEngine();
}
@Bean
......@@ -39,7 +39,7 @@ public class CaptchaConfig {
@Bean(name = "customCaptchaService")
@Autowired
public AbstractManageableImageCaptchaService initCaptchaService(CaptchaStore captchaStore, CaptchaEngine captchaEngine) {
return new CustomJCaptchaService(captchaStore, captchaEngine);
return new CustomCaptchaService(captchaStore, captchaEngine);
}
}
......@@ -23,7 +23,7 @@ import java.awt.*;
import java.awt.image.ImageFilter;
/**
* 类名称:CustomJCaptchaEngine
* 类名称:CustomCaptchaEngine
* 类描述:
*
* @author 李宁
......@@ -33,7 +33,7 @@ import java.awt.image.ImageFilter;
* 修改时间:15/11/17 12:04
* 修改备注:
*/
public class CustomJCaptchaEngine extends ListImageCaptchaEngine {
public class CustomCaptchaEngine extends ListImageCaptchaEngine {
private static final int MIN_WORD_LEN = 4;
private static final int MAX_WORD_LEN = 4;
......
......@@ -5,14 +5,13 @@ import com.octo.captcha.Captcha;
import com.octo.captcha.engine.CaptchaEngine;
import com.octo.captcha.service.CaptchaServiceException;
import com.octo.captcha.service.captchastore.CaptchaStore;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Locale;
/**
* 类名称:CustomJCaptchaService
* 类名称:CustomCaptchaService
* 类描述:自定义的验证马实现服务
*
* @author 李宁
......@@ -22,9 +21,8 @@ import java.util.Locale;
* 修改时间:15/11/17 19:41
* 修改备注:
*/
public class CustomJCaptchaService extends AbstractManageableImageCaptchaService {
private static final Logger LOGGER = LoggerFactory.getLogger(CustomJCaptchaService.class);
@Slf4j
public class CustomCaptchaService extends AbstractManageableImageCaptchaService {
/*
* 验证码管理策略:
......@@ -35,12 +33,12 @@ public class CustomJCaptchaService extends AbstractManageableImageCaptchaService
private static final Integer MAX_CAPTCHA_STORE_SIZE = 70000; // 最大容量, 默认值是10w
private static final Integer CAPTCHA_STORE_LOAD_BEFORE_GARBAGE_COLLECTION = 52500; // 配额, 超过此配额时执行一次垃圾清除, 默认值是:75000
public CustomJCaptchaService(CaptchaStore captchaStore, CaptchaEngine captchaEngine) {
public CustomCaptchaService(CaptchaStore captchaStore, CaptchaEngine captchaEngine) {
this(captchaStore, captchaEngine, MIN_GUARANTED_STORAGE_DELAY_IN_SECONDS, MAX_CAPTCHA_STORE_SIZE, CAPTCHA_STORE_LOAD_BEFORE_GARBAGE_COLLECTION);
}
protected CustomJCaptchaService(CaptchaStore captchaStore, CaptchaEngine captchaEngine, int minGuarantedStorageDelayInSeconds, int maxCaptchaStoreSize, int captchaStoreLoadBeforeGarbageCollection) {
protected CustomCaptchaService(CaptchaStore captchaStore, CaptchaEngine captchaEngine, int minGuarantedStorageDelayInSeconds, int maxCaptchaStoreSize, int captchaStoreLoadBeforeGarbageCollection) {
super(captchaStore, captchaEngine, minGuarantedStorageDelayInSeconds, maxCaptchaStoreSize, captchaStoreLoadBeforeGarbageCollection);
}
......@@ -70,7 +68,7 @@ public class CustomJCaptchaService extends AbstractManageableImageCaptchaService
}
valid = captcha.validateResponse(response);
} catch (Exception ex) {
LOGGER.warn("can not get captcha from redis");
log.warn("can not get captcha from redis");
valid = false;
}
......@@ -92,6 +90,7 @@ public class CustomJCaptchaService extends AbstractManageableImageCaptchaService
* @return
* @throws CaptchaServiceException
*/
@Override
public Object getChallengeForID(String ID, Locale locale) throws CaptchaServiceException {
Captcha captcha = this.generateAndStoreCaptcha(locale, ID);
Object challenge = this.getChallengeClone(captcha);
......
......@@ -5,6 +5,7 @@ import cn.quantgroup.xyqb.thirdparty.jcaptcha.SimpleCaptcha;
import com.octo.captcha.Captcha;
import com.octo.captcha.service.CaptchaServiceException;
import com.octo.captcha.service.captchastore.CaptchaStore;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
......@@ -25,9 +26,9 @@ import java.util.concurrent.TimeUnit;
* 修改时间:15/12/17 06:39
* 修改备注:
*/
@Slf4j
public class RedisCaptchaStore implements CaptchaStore {
private static final Logger LOGGER = LoggerFactory.getLogger(RedisCaptchaStore.class);
private static final long DEFAULT_EXPIRED_IN = 120L;
private static final TimeUnit DEFAULT_EXPIRED_TIMEUNIT = TimeUnit.SECONDS;
......@@ -103,7 +104,7 @@ public class RedisCaptchaStore implements CaptchaStore {
String captcharKey = buildCaptcharKey(captchaId);
Long expire = stringRedisTemplate.getExpire(captcharKey, TimeUnit.SECONDS);
Object value = stringRedisTemplate.opsForValue().get(captcharKey);
LOGGER.info("captchaId={},captchaCode={},expire={}秒", captcharKey, value, expire);
log.info("captchaId={},captchaCode={},expire={}秒", captcharKey, value, expire);
stringRedisTemplate.delete(captcharKey);
return value != null ? new SimpleCaptcha(captchaId, String.valueOf(value)) : null;
}
......
......@@ -114,7 +114,7 @@ public class RedisConfig {
template.setDefaultSerializer(jdkSerializationRedisSerializer);
template.setConnectionFactory(factory);
XyqbSessionContextHolder.redisTemplate = stringRedisTemplate(factory);
XyqbSessionContextHolder.setRedisTemplate(stringRedisTemplate(factory));
return template;
}
......
......@@ -10,13 +10,15 @@ final class IntegerToEnumConverterFactory implements ConverterFactory<String, En
IntegerToEnumConverterFactory() {
}
@Override
public <T extends Enum> Converter<String, T> getConverter(Class<T> targetType) {
Class<?> enumType = targetType;
while (enumType != null && !enumType.isEnum()) {
enumType = enumType.getSuperclass();
}
if (enumType == null) {
if (targetType == null) {
throw new IllegalArgumentException("The target type null does not refer to an enum");
}else if (enumType == null) {
throw new IllegalArgumentException("The target type " + targetType.getName() + " does not refer to an enum");
} else {
return new IntegerToEnumConverterFactory.IntegerToEnum(enumType);
......@@ -30,6 +32,7 @@ final class IntegerToEnumConverterFactory implements ConverterFactory<String, En
this.enumType = enumType;
}
@Override
public T convert(String source) {
T[] ts = enumType.getEnumConstants();
int ordinal = Integer.parseInt(source);
......
......@@ -19,7 +19,7 @@ import javax.annotation.Resource;
*/
@Primary
@Configuration
public class LoanVestMQConfig {
public class LoanVestMqConfig {
@Value("${loanvest.rabbitmq.queue}")
private String queueName;
@Value("${loanvest.rabbitmq.exchange}")
......
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 cn.quantgroup.xyqb.util.IpUtil;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
......@@ -24,13 +22,12 @@ import java.util.Set;
* Created by Miraculous on 15/7/6.
* 出现异常,进入这个handler。
*/
@Slf4j
@ControllerAdvice
@RestController
public class ExceptionHandlingController implements IBaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(ExceptionHandlingController.class);
private static final JsonResult EXCEPTION_RESULT = new JsonResult("internal error", 500L, "");
private static final JsonResult EXCEPTION_RESULT = new JsonResult("internal error", (long)HttpStatus.INTERNAL_SERVER_ERROR.value(), "");
/**
* 密码错误次数达到上限异常
......@@ -40,7 +37,7 @@ public class ExceptionHandlingController implements IBaseController {
*/
@ExceptionHandler(PasswordErrorLimitException.class)
public JsonResult passwordErrorLimitException(PasswordErrorLimitException vce) {
LOGGER.info("throw PasswordErrorLimitException,msg={},businessCode={}, clientIp={}", vce.getMessage(), 2L, IPUtil.getRemoteIP(getRequest()));
log.info("throw PasswordErrorLimitException,msg={},businessCode={}, clientIp={}", vce.getMessage(), 2L, IpUtil.getRemoteIP(getRequest()));
return JsonResult.buildErrorStateResult(vce.getMessage(), null, 2L);
}
......@@ -52,7 +49,7 @@ public class ExceptionHandlingController implements IBaseController {
*/
@ExceptionHandler(VerificationCodeErrorException.class)
public JsonResult verificationCodeErrorException(VerificationCodeErrorException vce) {
LOGGER.info("throw VerificationCodeErrorException,msg={},businessCode={}, clientIp={}", vce.getMessage(), 1L, IPUtil.getRemoteIP(getRequest()));
log.info("throw VerificationCodeErrorException,msg={},businessCode={}, clientIp={}", vce.getMessage(), 1L, IpUtil.getRemoteIP(getRequest()));
return JsonResult.buildErrorStateResult(vce.getMessage(), null, 1L);
}
......@@ -65,8 +62,20 @@ public class ExceptionHandlingController implements IBaseController {
@ExceptionHandler(UserNotExistException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public JsonResult userNotExistException(UserNotExistException unee) {
LOGGER.info("throw UserNotExistException,msg={},businessCode={},code={}", unee.getMessage(), 1L, 401L);
return new JsonResult(unee.getMessage(), 401L, null);
log.info("throw UserNotExistException,msg={},businessCode={},code={}", unee.getMessage(), 1L, (long)HttpStatus.UNAUTHORIZED.value());
return new JsonResult(unee.getMessage(), (long)HttpStatus.UNAUTHORIZED.value(), null);
}
/**
* 用户查询或导出异常
*
* @param uqle
* @return
*/
@ExceptionHandler(UserQueryLogException.class)
public JsonResult userQueryLogException(UserQueryLogException uqle) {
log.info("throw UserQueryLogException,msg={},businessCode={},code={}", uqle.getMessage(), 1L, 0L);
return JsonResult.buildErrorStateResult(uqle.getMessage(), null);
}
/**
......@@ -78,8 +87,8 @@ public class ExceptionHandlingController implements IBaseController {
@ExceptionHandler(WechatRelateUserException.class)
@ResponseStatus(HttpStatus.UNAUTHORIZED)
public JsonResult wechatRelateUserException(WechatRelateUserException wrue) {
LOGGER.info("throw WechatRelateUserException,msg={},businessCode={},code={}", wrue.getMessage(), 1L, 401L);
return new JsonResult(wrue.getMessage(), 401L, null);
log.info("throw WechatRelateUserException,msg={},businessCode={},code={}", wrue.getMessage(), 1L, (long)HttpStatus.UNAUTHORIZED.value());
return new JsonResult(wrue.getMessage(), (long)HttpStatus.UNAUTHORIZED.value(), null);
}
/**
......@@ -93,7 +102,7 @@ public class ExceptionHandlingController implements IBaseController {
HttpServletRequest request = getRequest();
String uri = request.getRequestURI();
String registerFrom = request.getParameter("registerFrom");
LOGGER.error("[exception][global_exception]接口异常 URI:{}, registerFrom:{},error={}", uri, registerFrom, e);
log.error("[exception][global_exception]接口异常 URI:{}, registerFrom:{},error={}", uri, registerFrom, e);
return EXCEPTION_RESULT;
}
......@@ -102,7 +111,7 @@ public class ExceptionHandlingController implements IBaseController {
ConstraintViolationException exs = (ConstraintViolationException) exception;
Set<ConstraintViolation<?>> constraintViolations = exs.getConstraintViolations();
if (constraintViolations.isEmpty()) {
LOGGER.error("这里出了个错....", exception.getMessage());
log.error("这里出了个错....", exception.getMessage());
return null;
}
String message = constraintViolations.iterator().next().getMessage();
......
......@@ -2,7 +2,7 @@ package cn.quantgroup.xyqb.controller;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
......@@ -56,7 +56,7 @@ public interface IBaseController {
default String getIp() {
HttpServletRequest request = getRequest();
return IPUtil.getRemoteIP(request);
return IpUtil.getRemoteIP(request);
}
default String getProtocol() {
......
......@@ -4,6 +4,7 @@ import cn.quantgroup.xyqb.entity.UserAuthorized;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserAuthorizedParam;
import cn.quantgroup.xyqb.service.auth.IUserAuthorizedService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -14,19 +15,18 @@ import javax.annotation.Resource;
/**
* @author xufei on 2018/1/5.
*/
@Slf4j
@RestController
@RequestMapping("/user/auth")
public class UserAuthorizedController {
private static final Logger LOGGER = LoggerFactory.getLogger(UserAuthorizedController.class);
@Resource
private IUserAuthorizedService userAuthorizedService;
@RequestMapping(value = "/hasUserAuthorized")
public JsonResult hasUserAuthorized(String idNo) {
LOGGER.info("[hasUserAuthorized]需要校验的用户的身份证号为idNo:{}", idNo);
log.info("[hasUserAuthorized]需要校验的用户的身份证号为idNo:{}", idNo);
if (userAuthorizedService.hasUserAuthorized(idNo)) {
return JsonResult.buildSuccessResult(null, true);
} else {
......@@ -37,13 +37,13 @@ public class UserAuthorizedController {
@RequestMapping(value = "/createUserAuthorized")
public JsonResult createUserAuthorized(UserAuthorizedParam userAuthorizedParam) {
LOGGER.info("[createUserAuthorized]创建实名账户,userAuthorizedParam:{},", userAuthorizedParam);
log.info("[createUserAuthorized]创建实名账户,userAuthorizedParam:{},", userAuthorizedParam);
try {
if (userAuthorizedService.checkUserAuthorizedParam(userAuthorizedParam)) {
return JsonResult.buildErrorStateResult("参数异常", null);
}
} catch (Exception e) {
LOGGER.info("[createUserAuthorized]创建实名账户失败e:{}", e);
log.info("[createUserAuthorized]创建实名账户失败e:{}", e);
return JsonResult.buildErrorStateResult("参数异常", null);
}
UserAuthorized userAuthorized = userAuthorizedService.createUserAuthorized(userAuthorizedParam);
......@@ -57,7 +57,7 @@ public class UserAuthorizedController {
@RequestMapping(value = "/getUserAuthorizedId")
public JsonResult getUserAuthorizedId(String userUuid) {
LOGGER.info("[getUserAuthorizedId]获取实名账户的id,userUuid:{}", userUuid);
log.info("[getUserAuthorizedId]获取实名账户的id,userUuid:{}", userUuid);
return JsonResult.buildSuccessResult(null, userAuthorizedService.getUserAuthorizedId(userUuid));
}
}
......@@ -24,7 +24,7 @@ import cn.quantgroup.xyqb.service.user.IUserDetailService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.user.UserCenterService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.MqUtils;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
......@@ -121,7 +121,7 @@ public class UserController implements IBaseController {
if (merchant == null) {
return JsonResult.buildErrorStateResult("未知的连接", null);
}
if (!StringUtils.isEmpty(userId) && userId.length() > 10) {
if (StringUtils.length(userId) > Constants.UUID_MIN_LENGTH) {
return loginWithUserId(channelId, appChannel, createdFrom, userId, merchant, dimension, request);
} else {
return loginWithHttpBasic(channelId, appChannel, createdFrom, merchant, dimension, request);
......@@ -166,8 +166,9 @@ public class UserController implements IBaseController {
HttpServletRequest request) {
Map<String, JsonResult> validMap = getHeaderParam(request);
log.info("login/fast -> channelId:{},appChannel:{},createdFrom:{},btRegisterChannelId:{},key:{},dimension:{},clickId:{}", channelId, appChannel, createdFrom, btRegisterChannelId, key, dimension, clickId);
if (null != validMap.get("fail")) {
return validMap.get("fail");
JsonResult failResult = validMap.get(Constants.CHECK_FAIL);
if (null != failResult) {
return failResult;
}
Merchant merchant = merchantService.findMerchantByName(key);
if (merchant == null) {
......@@ -214,26 +215,26 @@ public class UserController implements IBaseController {
String verificationHeader = "Verification ";
String credential = request.getHeader("authorization");
if (StringUtils.isBlank(credential)) {
result.put("fail", JsonResult.buildErrorStateResult("登录失败", null));
result.put(Constants.CHECK_FAIL, JsonResult.buildErrorStateResult("登录失败", null));
return result;
}
if (!credential.startsWith(verificationHeader)) {
result.put("fail", JsonResult.buildErrorStateResult("登录失败", null));
result.put(Constants.CHECK_FAIL, JsonResult.buildErrorStateResult("登录失败", null));
return result;
}
credential = credential.substring(verificationHeader.length(), credential.length());
byte[] buf = Base64.decodeBase64(credential);
credential = new String(buf, Charset.forName("UTF-8"));
String[] credentialArr = credential.split(":");
if (credentialArr.length != 2) {
result.put("fail", JsonResult.buildErrorStateResult("登录失败", null));
String[] credentialArr = credential.split(Constants.SPLIT_CHAR);
if (credentialArr.length != Constants.VERIFICATION_LEN) {
result.put(Constants.CHECK_FAIL, JsonResult.buildErrorStateResult("登录失败", null));
return result;
}
String phoneNo = credentialArr[0];
String verificationCode = credentialArr[1];
log.info("用户快速登录,phoneNo:{} , verificationCode:{}", phoneNo, verificationCode);
if (!ValidationUtil.validatePhoneNo(phoneNo) || StringUtils.isBlank(verificationCode)) {
result.put("fail", JsonResult.buildErrorStateResult("登录失败", null));
result.put(Constants.CHECK_FAIL, JsonResult.buildErrorStateResult("登录失败", null));
return result;
}
result.put("success", JsonResult.buildSuccessResult(verificationCode, phoneNo));
......@@ -403,7 +404,7 @@ public class UserController implements IBaseController {
if (StringUtils.isEmpty(token)) {
return JsonResult.buildSuccessResult(null, false);
}
if (token.contains("*")) {
if (token.contains(Constants.TOKEN_MASTER)) {
return JsonResult.buildSuccessResult(null, false);
}
String tokenKey = Constants.SESSION_PREFIX + token;
......@@ -463,10 +464,10 @@ public class UserController implements IBaseController {
private User verificateUserNameAndPassword(HttpServletRequest request) {
String credential = request.getHeader("authorization");
if (StringUtils.isBlank(credential) || !credential.startsWith("Basic ")) {
if (StringUtils.isBlank(credential) || !credential.startsWith(Constants.PASSWORD_HEADER)) {
return null;
}
credential = credential.substring("Basic ".length(), credential.length());
credential = credential.substring(Constants.PASSWORD_HEADER.length());
byte[] buf = Base64.decodeBase64(credential);
String bufStr = "";
try {
......@@ -476,7 +477,7 @@ public class UserController implements IBaseController {
}
String clientIp = getIp();
String[] credentialArr = bufStr.split(":");
if (credentialArr.length != 2) {
if (credentialArr.length != Constants.AUTHORIZE_HEADER_SIZE) {
log.info("用户登录失败:{}", bufStr);
// 向该ipv4添加错误计数器
lockIpv4Service.countErrorByIpv4(clientIp);
......@@ -528,7 +529,7 @@ public class UserController implements IBaseController {
*/
private boolean wechatRelateUserIfNecessary(User user, HttpServletRequest request) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IPUtil.getRemoteIP(request);
String clientIp = IpUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
boolean ready = paramKeys.contains(Constants.WECHAT_OPEN_ID);
if (!ready) {
......
......@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -28,9 +29,10 @@ import java.util.UUID;
* @author 李宁
* @version 1.0.0 创建时间:15/11/17 11:49 修改人: 修改时间:15/11/17 11:49 修改备注:
*/
@Api(value = "/api", description = "叫Api, 实际上是图形验证码. 你说神奇不神奇...")
@Slf4j
@RestController
@RequestMapping("/api")
@Api(value = "/api", description = "叫Api, 实际上是图形验证码. 你说神奇不神奇...")
public class ImageCaptchaController {
private static final String IMAGE_FORMAT_PNG = "png";
......@@ -51,14 +53,12 @@ public class ImageCaptchaController {
BufferedImage challenge = imageCaptchaService.getImageChallengeForID(Constants.IMAGE_CAPTCHA_KEY + imageId, request.getLocale());
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
boolean write = ImageIO.write(challenge, IMAGE_FORMAT_PNG, jpegOutputStream);
ImageIO.write(challenge, IMAGE_FORMAT_PNG, jpegOutputStream);
} catch (IOException e) {
e.printStackTrace();
return JsonResult.buildErrorStateResult("", "fail");
log.error("图形验证码图片流返回失败", e);
return JsonResult.buildErrorStateResult("", Constants.CHECK_FAIL);
}
String imageBase64 = Base64.encodeBase64String(jpegOutputStream.toByteArray());
Map<String, String> data = new HashMap<>();
data.put("imageId", imageId);
data.put("image", String.format(IMG_BASE64_PATTREN, imageBase64));
......
......@@ -5,7 +5,7 @@ import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.service.captcha.IGeetestCaptchaService;
import cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.PasswordUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
......@@ -41,7 +41,7 @@ public class NewCaptchaController {
@RequestMapping(value = "/captcha/new")
@ApiOperation(value = "获取新图形验证码", notes = "获取新图形验证码", httpMethod = "POST")
public JsonResult getCaptcha(String phoneNo, String clientType, HttpServletRequest request) {
String remoteIp = IPUtil.getRemoteIP(request);
String remoteIp = IpUtil.getRemoteIP(request);
log.info("获取验证码, phoneNo:{}, clientType:{}, ip:{}, verifyType-qg:{}", phoneNo, clientType, remoteIp, geetestClose);
if (StringUtils.isNotBlank(phoneNo) && !ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult("手机号格式错误", null);
......
......@@ -5,6 +5,7 @@ import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.util.ValidationUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -26,10 +27,10 @@ import java.util.concurrent.TimeUnit;
* @version 1.0.0
* @since 2017-11-25
*/
@Slf4j
@RestController
@RequestMapping("/lock")
public class LockIpv4Controller implements IBaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(LockIpv4Controller.class);
private static final String WORD = "Are you a robot monkey?(^_^)";
@Autowired
@Qualifier("stringRedisTemplate")
......@@ -74,7 +75,7 @@ public class LockIpv4Controller implements IBaseController {
@RequestParam(required = false) String act,
HttpServletRequest request) {
if (!ValidationUtil.validateIpv4(ip) || StringUtils.isBlank(act) || StringUtils.isBlank(key)) {
LOGGER.info("Lock_ipv4: fail to clear_or_lock ip:{}", ip);
log.info("Lock_ipv4: fail to clear_or_lock ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD, null);
}
if (Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act)) {
......@@ -86,7 +87,7 @@ public class LockIpv4Controller implements IBaseController {
return JsonResult.buildSuccessResult("Success", null);
}
}
LOGGER.info("Lock_ipv4: fail to clear_or_lock ip:{}", ip);
log.info("Lock_ipv4: fail to clear_or_lock ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD, null);
}
......@@ -113,10 +114,10 @@ public class LockIpv4Controller implements IBaseController {
minutes = Integer.valueOf(redisMinutes);
}
redisTemplate.opsForValue().set(lockIpv4Key, Boolean.TRUE.toString(), minutes, TimeUnit.MINUTES);
LOGGER.info("Lock_ipv4: locked ip Success. ip:{}, error overstep {} times in {} minutes, do lock {} minutes", ip, counts, Constants.IPV4_FAILED_COUNT_MINUTES, minutes);
log.info("Lock_ipv4: locked ip Success. ip:{}, error overstep {} times in {} minutes, do lock {} minutes", ip, counts, Constants.IPV4_FAILED_COUNT_MINUTES, minutes);
} else {
redisTemplate.delete(lockIpv4Key);
LOGGER.info("Lock_ipv4: unlocked ip Success. ip:{}", ip);
log.info("Lock_ipv4: unlocked ip Success. ip:{}", ip);
}
}
......@@ -137,7 +138,7 @@ public class LockIpv4Controller implements IBaseController {
@RequestParam(required = false) String type,
HttpServletRequest request) {
if (!ValidationUtil.validateIpv4(ip) || StringUtils.isBlank(key) || StringUtils.isBlank(act) || StringUtils.isBlank(type)) {
LOGGER.info("Lock_ipv4: fail to config hit list for ip:{}", ip);
log.info("Lock_ipv4: fail to config hit list for ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD, null);
}
boolean actOk = Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act);
......@@ -150,7 +151,7 @@ public class LockIpv4Controller implements IBaseController {
configHitList(ip, operate, lock);
return JsonResult.buildSuccessResult("Success", null);
}
LOGGER.info("Lock_ipv4: fail to config hit list for ip:{}", ip);
log.info("Lock_ipv4: fail to config hit list for ip:{}", ip);
return JsonResult.buildErrorStateResult(WORD, null);
}
......@@ -168,21 +169,21 @@ public class LockIpv4Controller implements IBaseController {
if (operate) {
if (lock) {
redisTemplate.opsForSet().add(Constants.IPV4_LOCK_BLACK, ip);
LOGGER.info("Lock_ipv4: add black-list item Success, ip:{}", ip);
log.info("Lock_ipv4: add black-list item Success, ip:{}", ip);
} else {
redisTemplate.opsForSet().add(Constants.IPV4_LOCK_WHITE, ip);
LOGGER.info("Lock_ipv4: add white-list item Success, ip:{}", ip);
log.info("Lock_ipv4: add white-list item Success, ip:{}", ip);
}
} else {
if (lock) {
redisTemplate.opsForSet().remove(Constants.IPV4_LOCK_BLACK, ip);
LOGGER.info("Lock_ipv4: remove black-list item Success, ip:{}", ip);
log.info("Lock_ipv4: remove black-list item Success, ip:{}", ip);
} else {
redisTemplate.opsForSet().remove(Constants.IPV4_LOCK_WHITE, ip);
LOGGER.info("Lock_ipv4: remove white-list item Success, ip:{}", ip);
log.info("Lock_ipv4: remove white-list item Success, ip:{}", ip);
}
}
LOGGER.info("Lock_ipv4: white-list:{},black-list:{}", JSONObject.toJSON(redisTemplate.opsForSet().members(Constants.IPV4_LOCK_WHITE)), JSONObject.toJSON(redisTemplate.opsForSet().members(Constants.IPV4_LOCK_BLACK)));
log.info("Lock_ipv4: white-list:{},black-list:{}", JSONObject.toJSON(redisTemplate.opsForSet().members(Constants.IPV4_LOCK_WHITE)), JSONObject.toJSON(redisTemplate.opsForSet().members(Constants.IPV4_LOCK_BLACK)));
}
/**
......@@ -202,7 +203,7 @@ public class LockIpv4Controller implements IBaseController {
@RequestParam(required = false) String minutes,
HttpServletRequest request) {
if (StringUtils.isBlank(key) || StringUtils.isBlank(act) || !StringUtils.isNumeric(counts) || !StringUtils.isNumeric(minutes)) {
LOGGER.info("Lock_ipv4: fail to config noun");
log.info("Lock_ipv4: fail to config noun");
return JsonResult.buildErrorStateResult(WORD, null);
}
boolean actOk = Objects.equals(Boolean.TRUE.toString(), act) || Objects.equals(Boolean.FALSE.toString(), act);
......@@ -219,7 +220,7 @@ public class LockIpv4Controller implements IBaseController {
return JsonResult.buildSuccessResult("Success", null);
}
}
LOGGER.info("Lock_ipv4: fail to config noun");
log.info("Lock_ipv4: fail to config noun");
return JsonResult.buildErrorStateResult(WORD, null);
}
......@@ -234,16 +235,16 @@ public class LockIpv4Controller implements IBaseController {
if (operate) {
if (counts > 0) {
redisTemplate.opsForValue().set(Constants.IPV4_LOCK_ON_COUNTS_REDIS, String.valueOf(counts));
LOGGER.info("Lock_ipv4: config redis-param counts Success, counts:{}", counts);
log.info("Lock_ipv4: config redis-param counts Success, counts:{}", counts);
}
if (minutes > 0) {
redisTemplate.opsForValue().set(Constants.IPV4_LOCK_MINUTES_REDIS, String.valueOf(minutes));
LOGGER.info("Lock_ipv4: config redis-param minutes Success, minutes:{}", minutes);
log.info("Lock_ipv4: config redis-param minutes Success, minutes:{}", minutes);
}
} else {
redisTemplate.delete(Constants.IPV4_LOCK_ON_COUNTS_REDIS);
redisTemplate.delete(Constants.IPV4_LOCK_MINUTES_REDIS);
LOGGER.info("Lock_ipv4: remove redis-param counts、minutes Success, counts:{},minutes:{}, current default:[counts:{},minutes:{}]", Constants.IPV4_LOCK_ON_FAILED_COUNTS, Constants.IPV4_FAILED_LOCK_MINUTES);
log.info("Lock_ipv4: remove redis-param counts、minutes Success, counts:{},minutes:{}, current default:[counts:{},minutes:{}]", Constants.IPV4_LOCK_ON_FAILED_COUNTS, Constants.IPV4_FAILED_LOCK_MINUTES);
}
}
......
package cn.quantgroup.xyqb.controller.external.platform;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.MerchantConfig;
......@@ -21,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
*/
@RestController
@RequestMapping("/platform/api")
public class PlatformAPIController implements IBaseController {
public class PlatformApiController implements IBaseController {
@Autowired
private IPageService pageService;
......@@ -52,7 +53,7 @@ public class PlatformAPIController implements IBaseController {
Tuple<String, Boolean> nextPageTuple = pageService.nextPage(user, target, currentPage);
Boolean isFinal = nextPageTuple.getValue();
String nextPage = nextPageTuple.getKey();
if ("xyqb".equals(key)) {
if (Constants.PAGE_NEXT_KEY_XYQB.equals(key)) {
MerchantConfig merchantConfig = merchantService.findConfigByMerchantIdAndConfigName(4L, "returnUrl");
return JsonResult.buildSuccessResult("", ImmutableMap.of("type", "external", "transition", merchantConfig.getConfigValue()));
}
......
......@@ -13,9 +13,10 @@ import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.register.IUserRegisterService;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -34,11 +35,11 @@ import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ER
* @author mengfan.feng
* @time 2015-10-27 11:41
*/
@Slf4j
@RestController
@RequestMapping("/app")
public class AppController implements IBaseController {
private static final Logger LOGGER = LoggerFactory.getLogger(AppController.class);
@Autowired
private ISessionService sessionService;
@Autowired
......@@ -77,7 +78,7 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
LOGGER.info("第三方用户登录 [AppController] login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, channelId, btRegisterChannelId, IPUtil.getRemoteIP(request), idNo, name);
log.info("第三方用户登录 [AppController] login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, channelId, btRegisterChannelId, IpUtil.getRemoteIP(request), idNo, name);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
user = userRegisterService.register(registerFrom, phoneNo, idNo, name, channelId, btRegisterChannelId);
......@@ -94,7 +95,7 @@ public class AppController implements IBaseController {
}
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, merchant.getId(), merchant.getName());
AuthBean bean = sessionService.createSession(user, loginProperties);
LOGGER.info("第三方用户登录成功 [AppController] login --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
log.info("第三方用户登录成功 [AppController] login --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
return JsonResult.buildSuccessResult("登录成功", bean);
}
......@@ -128,7 +129,7 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
LOGGER.info("第三方用户登录 [AppController] loginSuper --> loginFrom:{},phoneNo:{},appChannel:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, phoneNo, appChannel, channelId, btRegisterChannelId, IPUtil.getRemoteIP(request), idNo, name);
log.info("第三方用户登录 [AppController] loginSuper --> loginFrom:{},phoneNo:{},appChannel:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom, phoneNo, appChannel, channelId, btRegisterChannelId, IpUtil.getRemoteIP(request), idNo, name);
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
try {
......@@ -158,7 +159,7 @@ public class AppController implements IBaseController {
context.setCreatedFrom(registerFrom);
context.setAppChannel(appChannel);
loginInfo.setLoginContext(context);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel, channelId);
log.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel, channelId);
return JsonResult.buildSuccessResult("登陆成功", loginInfo);
}
......@@ -187,7 +188,7 @@ public class AppController implements IBaseController {
if (!ValidationUtil.validatePhoneNo(phoneNo)) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
LOGGER.info("第三方用户登录 [AppController] login2 --> loginFrom:{},channelId:{}, requestIp:{}", registerFrom, channelId, IPUtil.getRemoteIP(request));
log.info("第三方用户登录 [AppController] login2 --> loginFrom:{},channelId:{}, requestIp:{}", registerFrom, channelId, IpUtil.getRemoteIP(request));
User user = userService.findByPhoneInDb(phoneNo);
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -197,7 +198,7 @@ public class AppController implements IBaseController {
}
LoginProperties loginProperties = new LoginProperties("", 4, channelId, registerFrom, appChannel, null, "");
AuthBean bean = sessionService.createSession(user, loginProperties);
LOGGER.info("第三方用户登录成功 [AppController] login2 --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
log.info("第三方用户登录成功 [AppController] login2 --> loginFrom:{}, phoneNo:{},appChannel:{}", registerFrom, phoneNo, appChannel);
return JsonResult.buildSuccessResult("登录成功", bean);
}
......
......@@ -41,15 +41,15 @@ public class UserApiController {
private ISmsService smsService;
@RequestMapping("/user/is_passwd_set")
public JsonResult isPasswordSet(String key, String phoneNo) {
if (!"abc1234".equals(key) || StringUtils.isEmpty(phoneNo)) {
public JsonResult isPasswordSet(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
return JsonResult.buildErrorStateResult(null, null);
}
User user = userService.findByPhoneWithCache(phoneNo);
if (null == user) {
return JsonResult.buildErrorStateResult(null, null);
}
if (StringUtils.length(user.getPassword()) == 32) {
if (StringUtils.length(user.getPassword()) == Constants.MD5_LENGTH) {
return JsonResult.buildSuccessResult(null, null);
}
return JsonResult.buildErrorStateResult(null, null, 2L);
......
......@@ -12,6 +12,7 @@ import cn.quantgroup.xyqb.service.user.*;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
......@@ -24,11 +25,11 @@ import java.sql.Timestamp;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/**
* Created by 11 on 2017/3/22.
*/
@Slf4j
@RestController
@RequestMapping("/user/center")
public class UserCenterController {
......@@ -46,8 +47,6 @@ public class UserCenterController {
@Autowired
private IUserService userService;
private static final Logger LOGGER = LoggerFactory.getLogger(UserCenterController.class);
/**
* 根据用户手机号查询昵称.
*
......@@ -58,7 +57,7 @@ public class UserCenterController {
@ApiOperation(value = "查询昵称", notes = "查询用户昵称", httpMethod = "POST")
public JsonResult queryUserNick(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
......@@ -67,7 +66,7 @@ public class UserCenterController {
}
UserAttached userAttached = userCenterService.searchUserAttachedByUserId(userId);
if (null != userAttached) {
LOGGER.info("获取用户昵称:{}", userAttached.getNick());
log.info("获取用户昵称:{}", userAttached.getNick());
return JsonResult.buildSuccessResult(null, userAttached.getNick());
}
return JsonResult.buildSuccessResult(null, null);
......@@ -84,7 +83,7 @@ public class UserCenterController {
@ApiOperation(value = "保存昵称", notes = "保存用户昵称", httpMethod = "POST")
public JsonResult saveUserNick(String phoneNo, String nick) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
......@@ -106,7 +105,7 @@ public class UserCenterController {
@ApiOperation(value = "保存头像", notes = "保存用户头像", httpMethod = "POST")
public JsonResult SaveUserAvatarAddr(String phoneNo, String avatarUrl) {
if (StringUtils.isBlank(avatarUrl) || StringUtils.isBlank(phoneNo)) {
LOGGER.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
log.error("参数不合法:avatarUrl:{}, phoneNo:{}", avatarUrl, phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
......@@ -118,7 +117,7 @@ public class UserCenterController {
}
UserAttached userAttached = userCenterService.saveUserAvatar(userId, avatarUrl);
if (null == userAttached) {
LOGGER.error("保存用户头像昵称失败.");
log.error("保存用户头像昵称失败.");
return JsonResult.buildErrorStateResult("信息保存失败,请稍后再试.", null);
}
return JsonResult.buildSuccessResult("保存成功", userAttached);
......@@ -134,7 +133,7 @@ public class UserCenterController {
@ApiOperation(value = "查询用户是否实名认证", notes = "查询用户是否实名认证", httpMethod = "POST")
public JsonResult queryVerified(String phoneNo) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
......@@ -160,7 +159,7 @@ public class UserCenterController {
@ApiOperation(value = "查询个人资料信息", notes = "查询个人资料信息", httpMethod = "POST")
public JsonResult personalData(String phoneNo) {
if (StringUtils.isBlank(phoneNo)) {
LOGGER.error("手机号为空,phoneNo:{}", phoneNo);
log.error("手机号为空,phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数不合法", null);
}
Long userId = queryUserId(phoneNo);
......@@ -202,27 +201,27 @@ public class UserCenterController {
@ApiOperation(value = "保存用户联系人", notes = "保存用户联系人", httpMethod = "POST")
public JsonResult saveUserContact(String phoneNo, String contactJson) {
if (StringUtils.isEmpty(phoneNo)) {
LOGGER.error("保存联系人,参数错误. phoneNo:{}", phoneNo);
log.error("保存联系人,参数错误. phoneNo:{}", phoneNo);
return JsonResult.buildErrorStateResult("参数有误.", null);
}
Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
log.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
if (StringUtils.isEmpty(contactJson)) {
LOGGER.error("保存联系人,联系人参数为空.contactJson:{}", contactJson);
log.error("保存联系人,联系人参数为空.contactJson:{}", contactJson);
return JsonResult.buildErrorStateResult(null, null);
}
List<Contact> contacts = JSONObject.parseObject(contactJson, new TypeReference<List<Contact>>() {
});
if (CollectionUtils.isEmpty(contacts)) {
LOGGER.info("联系人不能空");
log.info("联系人不能空");
return JsonResult.buildErrorStateResult(null, null);
}
for (Contact contact : contacts) {
if (!contact.valid()) {
LOGGER.info("用户手机号或姓名错误, phoneNo:{},name:{}", contact.getPhoneNo(), contact.getName());
log.info("用户手机号或姓名错误, phoneNo:{},name:{}", contact.getPhoneNo(), contact.getName());
return JsonResult.buildErrorStateResult(null, null);
}
}
......@@ -244,13 +243,13 @@ public class UserCenterController {
@ApiOperation(value = "保存用户地址", notes = "保存用户地址", httpMethod = "POST")
public JsonResult saveUserAddress(String phoneNo, String province, Long provinceCode, String city, Long cityCode, String address,
Long districtCode, String district) {
LOGGER.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address);
log.info("保存用户地址信息, phoneNo:{}, province:{}, provinceCode:{}, city:{}, cityCode:{},district:{}, address:{}", phoneNo, province, provinceCode, city, cityCode, district, address);
if (StringUtils.isEmpty(phoneNo) || provinceCode == null || cityCode == null || StringUtils.isBlank(address)) {
return JsonResult.buildErrorStateResult("参数错误", null);
}
Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
log.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
//查询用户是否有保存地址信息
......@@ -287,7 +286,7 @@ public class UserCenterController {
}
Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
log.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
Address address = addressService.findByUserId(userId);
......@@ -308,7 +307,7 @@ public class UserCenterController {
}
Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) {
LOGGER.error("保存联系人,未获取到用户id. userId:{}", userId);
log.error("保存联系人,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
List<Contact> contacts = contactService.findByUserId(userId, true);
......@@ -332,7 +331,7 @@ public class UserCenterController {
}
Long userId = queryUserId(phoneNo);
if (null == userId || userId == 0L) {
LOGGER.error("保存用户经济信息,未获取到用户id. userId:{}", userId);
log.error("保存用户经济信息,未获取到用户id. userId:{}", userId);
return JsonResult.buildErrorStateResult("该用户不存在", null);
}
//查询用户是否保存过.
......
......@@ -8,8 +8,6 @@ import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
//import cn.quantgroup.xyqb.entity.enumerate.*;
/**
* Created by 11 on 2016/12/30.
*/
......
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum EducationEnum {
UNKNOWN("暂无"),
MASTER("硕士及以上"),
UNDER_GRADUATE("本科"),
JUNIOR_COLLEGE("大专"),
TECHNICAL_SECONDARY_SCHOOL("中专"),
TECHNICAL_SCHOOL("技校"),
HIGH_SCHOOL("高中"),
MIDDLE_SCHOOL("初中"),
PRIMARY_SCHOOL("小学"),
OTHER("其他");
private String name;
EducationEnum(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum IncomeEnum {
UNKNOWN("未知"),
CASH("现金计算"),
PAY_CARD("工资卡"),
CASH_AND_PAY_CARD("混合");
private String desc;
IncomeEnum(String desc) {
this.desc = desc;
}
}
\ No newline at end of file
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum IncomeRangeEnum {
UNKNOWN("暂无"),
BELOW_1000("小于1000元"),
BELOW_3000("1000至3000元"),
BELOW_5000("3000至5000元"),
BELOW_8000("5000至8000元"),
BELOW_10000("8000至10000元"),
BELOW_15000("10000至15000元"),
BELOW_20000("15000至20000元"),
ABOVE_20000("大于20000元");
private String desc;
IncomeRangeEnum(String desc) {
this.desc = desc;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by sunnan on 2016-11-24.
*/
public enum MaritalStatus {
UNKNOWN("未知"),
SINGLE("未婚"), // 1
MARRIED("已婚"), // 2
DIVORCED("离异"), // 3
WINDOWED("丧偶"), // 4
OTHER("其他");
String description;
MaritalStatus(String desc) {
description = desc;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
String sb = "MaritalStatus{" + "description='" + description + '\'' +
'}';
return sb;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by 11 on 2016/12/30.
*/
public enum OccupationEnum {
UNKNOWN("暂未填写"),
WORKER("工人"),
TEACHER("教师"),
WHITE_COLLAR("白领"),
STUDENT("学生"),
CAREER_BUILDER("创业者"),
SELF_EMPLOYER("个体户"),
EMPLOYEE("公司职员"),
BISUNESS_ENTITY("企业法人"),
ONLINE_STORE_OWNER("网店店主"),
UNEMPLOYED("暂无职业"),
OTHER("其他");
private String name;
OccupationEnum(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return name;
}
}
package cn.quantgroup.xyqb.entity.enumerate;
/**
* Created by Miraculous on 2017/1/3.
*/
public enum Relation {
PARENT("父母"),
CHILDREN("子女"),
BROTHER("兄弟姐妹"),
COLLEAGUE("同事"),
CLASSMATE("同学"),
FRIEND("朋友"),
SPOUSE("夫妻"),
SELF("本人"),
OTHER("其他");
String description;
Relation(String desc) {
description = desc;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
String sb = "Relation{" + "description='" + description + '\'' +
'}';
return sb;
}
}
......@@ -13,7 +13,7 @@ import org.springframework.stereotype.Component;
* @author ag
*/
@Component
public class MQRegisteredEventListener implements ApplicationListener<RegisterEvent> {
public class MqRegisteredEventListener implements ApplicationListener<RegisterEvent> {
@Override
public void onApplicationEvent(RegisterEvent event) {
......
......@@ -3,7 +3,7 @@ package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.UserHashMapping;
import cn.quantgroup.xyqb.model.UserRegisterParam;
import cn.quantgroup.xyqb.repository.IUserHashMappingRepository;
import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -35,14 +35,14 @@ public class PhoneHashEventListener implements ApplicationListener<RegisterEvent
userHashMapping = new UserHashMapping(userId);
}
//无论如何都更新手机号
String phoneNoMd5 = MD5Util.build(phoneNo);
String phoneNoMd5 = Md5Util.build(phoneNo);
userHashMapping.setPhoneNoMd5(phoneNoMd5);
String idNo = userRegisterParam.getIdNo();
//如果有身份证号. 更新一下
if (StringUtils.isNotEmpty(idNo)) {
idNo = idNo.toUpperCase();
userHashMapping.setIdNoMd5(MD5Util.build(idNo));
userHashMapping.setIdNoMd5(Md5Util.build(idNo));
}
try {
......
......@@ -3,7 +3,7 @@ package cn.quantgroup.xyqb.event;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.entity.UserHashMapping;
import cn.quantgroup.xyqb.repository.IUserHashMappingRepository;
import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -34,14 +34,14 @@ public class UserDetailHashEventListener implements ApplicationListener<UserDeta
if (userHashMapping == null) {
userHashMapping = new UserHashMapping(userDetail.getUserId());
String phoneNo = userDetail.getPhoneNo();
userHashMapping.setPhoneNoMd5(MD5Util.build(phoneNo));
userHashMapping.setPhoneNoMd5(Md5Util.build(phoneNo));
}
String idNoMd5 = userHashMapping.getIdNoMd5();
String idNo = userDetail.getIdNo().toUpperCase();
String idNoMd5New = MD5Util.build(idNo);
String idNoMd5New = Md5Util.build(idNo);
//新旧相同, 直接跳过
if (StringUtils.equals(idNoMd5, idNoMd5New)) {
......
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);
}
}
......@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
......@@ -49,7 +50,7 @@ public class RequestFilter implements Filter {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis();
if (Objects.isNull(sessionStruct)) {
/* 如果没有获取到session信息则返回错误信息 */
response.setStatus(401);
response.setStatus(HttpStatus.SC_UNAUTHORIZED);
response.setHeader("Content-Type", "application/json;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print(UNAUTH_RESULT);
......
......@@ -26,9 +26,9 @@ public class ApiResponse {
public static final int OK = 4;
public static final int TOO_BUSY = 5;
int code;
String type;
String message;
private int code;
private String type;
private String message;
public ApiResponse(){}
......
......@@ -8,7 +8,7 @@ import java.io.Serializable;
* Created by xuran on 2017/8/1.
*/
@Data
public class XContactInfo implements Serializable {
public class ContactInfo implements Serializable {
private static final long serialVersionUID = -1L;
private Long id;
private Long userId;
......
......@@ -32,7 +32,7 @@ public class ContactModel implements Serializable {
ContactModel model = new ContactModel();
model.setName(entity.getName());
model.setPhoneNo(entity.getPhoneNo());
model.setRelationName(Optional.ofNullable(entity.getRelation()).orElse(Relation.OTHER).getDescription());
model.setRelationName(Optional.ofNullable(entity.getRelation()).orElse(Relation.OTHER).getDesc());
model.setRelation(entity.getRelation().name());
return model;
}
......
......@@ -9,6 +9,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
* Created by Miraculous on 2017/2/14.
......@@ -36,8 +37,12 @@ public class ContactRet implements Serializable {
ret.setName(c.getName());
ret.setPhoneNo(c.getPhoneNo());
ret.setRelation(c.getRelation());
if(Objects.nonNull(c.getCreatedAt())){
ret.setCreatedAt(c.getCreatedAt().getTime());
}
if(Objects.nonNull(c.getUpdateAt())) {
ret.setUpdateAt(c.getUpdateAt().getTime());
}
return ret;
}
......
......@@ -25,10 +25,10 @@ public class JsonResult<T> implements Serializable {
private String msg = "";
// 0成功,1失败
private String code = "0000";
private String code = Constants.SUCCESS_CODE;
// 业务错误码
private String businessCode = "0000";
private String businessCode = Constants.SUCCESS_CODE;
private T data = null;
......
......@@ -24,5 +24,5 @@ public class UserAssociation implements Serializable {
private String district;
private String address;
private String qq;
private List<XContactInfo> contractResults;
private List<ContactInfo> contractResults;
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.user.enums.EducationEnum;
import cn.quantgroup.user.enums.IncomeEnum;
import cn.quantgroup.user.enums.IncomeRangeEnum;
import cn.quantgroup.user.enums.OccupationEnum;
import cn.quantgroup.xyqb.entity.Address;
import cn.quantgroup.xyqb.entity.Contact;
import lombok.Data;
import javax.persistence.Column;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import org.springframework.util.Assert;
import java.io.Serializable;
......@@ -25,7 +26,7 @@ public class UserInfo implements Serializable {
private String IdNo;
public UserInfo(User user, UserDetail userDetail) {
assert user != null;
Assert.notNull(user, "User信息无效");
this.id = user.getId();
this.phoneNo = user.getPhoneNo();
this.registerFrom = user.getRegisteredFrom();
......
......@@ -3,6 +3,7 @@ package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import org.springframework.util.Assert;
import java.io.Serializable;
import java.util.Optional;
......@@ -35,7 +36,7 @@ public class UserModel implements Serializable {
}
public UserModel(User user, UserDetail userDetail) {
assert user != null;
Assert.notNull(user, "User信息无效");
this.id = user.getId();
this.phoneNo = user.getPhoneNo();
this.registerFrom = user.getRegisteredFrom();
......
......@@ -20,17 +20,17 @@ public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,
UserDetail findByPhoneNo(String phone);
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update user_detail set qq = ?1 where user_id = ?2", nativeQuery = true)
void updateUserQQ(String qq, Long userId);
void updateUserQq(String qq, Long userId);
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update user_detail set email = ?1 where user_id = ?2", nativeQuery = true)
void updateUserEmail(String email, Long userId);
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update user_detail set gender = ?1 where user_id = ?2", nativeQuery = true)
void updateGender(int gender, Long userId);
......@@ -42,11 +42,10 @@ public interface IUserDetailRepository extends JpaRepository<UserDetail, Long>,
*
* @return
*/
@Modifying
@Query(value = "select * from user_detail where gender!=1 and gender!=2 and id_no is not null", nativeQuery = true)
List<UserDetail> selectUserDetailsBy();
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update user_detail set name=?1,id_no=?2,gender=?3 where phone_no=?4", nativeQuery = true)
int updateNameAndIdNoByPhoneNo(String name, String idNo, int gender, String phoneNo);
......
......@@ -14,7 +14,7 @@ import java.util.List;
*/
public interface IUserQueryLogRepository extends JpaRepository<UserQueryLog, Long> {
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(nativeQuery = true, value = "select * from user_query_log ul where created_At between ?1 and ?2 limit ?3 ,?4 ")
List<UserQueryLog> findQueryLogCreatedAt(Date beginDate, Date endDate, Integer pageId, Integer pageSize);
......
......@@ -42,7 +42,7 @@ public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecifica
@Query(value = "select * from user where created_at>=?1 and created_at<?2 ", nativeQuery = true)
List<User> findRegisterUserByTime(String beginTime, String endTime);
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update user set enable=?1 where phone_no=?2", nativeQuery = true)
int forbiddenUser(Boolean enable, String phoneNo);
......
......@@ -28,7 +28,7 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
* @param userId
* @return
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where user_id=?1", nativeQuery = true)
int dissociateByUserId(Long userId);
......@@ -41,7 +41,7 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
* @param openId - 微信标识
* @return 记录更新行数
*/
@Transactional
@Transactional(rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=?1,phone_no=?2 where open_id=?3 and user_id is null", nativeQuery = true)
int relateUser(Long userId, String phoneNo, String openId);
......@@ -54,7 +54,7 @@ public interface IWeChatUserRepository extends JpaRepository<WechatUserInfo, Lon
* @param userId - 用户标识
* @return 记录更新行数
*/
@Transactional(propagation = MANDATORY)
@Transactional(propagation = MANDATORY, rollbackFor = Exception.class)
@Modifying
@Query(value = "update wechat_userinfo set user_id=null,phone_no='*' where open_id=?1 or user_id=?2", nativeQuery = true)
int dissociateUser(String openId, Long userId);
......
package cn.quantgroup.xyqb.service.auth.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.exception.IdCardException;
import cn.quantgroup.xyqb.model.Gender;
import cn.quantgroup.xyqb.model.IdCardInfo;
......@@ -80,10 +81,10 @@ public class IdCardServiceImpl implements IIdCardService {
return false;
}
String actualId;
if (idCardStr.length() == 18) {
actualId = idCardStr.substring(0, 17);
} else if (idCardStr.length() == 15) {
actualId = idCardStr.substring(0, 6) + "19" + idCardStr.substring(6, 15);
if (idCardStr.length() == Constants.ID_NO_STANDARD_LENGTH) {
actualId = idCardStr.substring(0, Constants.ID_NO_CHECK_LENGTH);
} else if (idCardStr.length() == Constants.ID_NO_OLD_LENGTH) {
actualId = idCardStr.substring(0, 6) + "19" + idCardStr.substring(6, Constants.ID_NO_OLD_LENGTH);
} else {
return false;
}
......@@ -104,26 +105,26 @@ 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 < 1 || month > 12) {
if (month < Constants.MONTH_NO_MIN || month > Constants.MONTH_NO_MAX) {
return false;
}
if (day < 1 || day > 31) {
if (day < Constants.DAY_NO_MIN || day > Constants.DAY_NO_MAX) {
return false;
}
String areaCode = actualId.substring(0, 2);
String areaCode = actualId.substring(0, Constants.ID_NO_AREA_CODE_LENGTH);
if (!areaCodes.containsKey(areaCode)) {
return false;
}
// 校验码
int acurateCode = 0;
for (int i = 0; i < 17; ++i) {
for (int i = 0; i < Constants.ID_NO_CHECK_LENGTH; ++i) {
acurateCode += ((actualId.charAt(i) - '0') * wi[i]);
}
actualId += validCodes[acurateCode % 11];
return idCardStr.length() != 18 || actualId.equalsIgnoreCase(idCardStr);
actualId += validCodes[acurateCode % Constants.ID_NO_CHECK_MASK];
return idCardStr.length() != Constants.ID_NO_STANDARD_LENGTH || actualId.equalsIgnoreCase(idCardStr);
}
@Override
......@@ -135,11 +136,11 @@ public class IdCardServiceImpl implements IIdCardService {
}
String actualId;
String lastChar;
if (idCardStr.length() == 18) {
actualId = idCardStr.substring(0, 17);
lastChar = idCardStr.substring(16, 17).toLowerCase();
} else if (idCardStr.length() == 15) {
actualId = idCardStr.substring(0, 6) + "19" + idCardStr.substring(6, 15);
if (idCardStr.length() == Constants.ID_NO_STANDARD_LENGTH) {
actualId = idCardStr.substring(0, Constants.ID_NO_CHECK_LENGTH);
lastChar = idCardStr.substring(16, Constants.ID_NO_CHECK_LENGTH).toLowerCase();
} else if (idCardStr.length() == Constants.ID_NO_OLD_LENGTH) {
actualId = idCardStr.substring(0, 6) + "19" + idCardStr.substring(6, Constants.ID_NO_OLD_LENGTH);
lastChar = idCardStr.substring(13, 14).toLowerCase();
} else {
return cardInfo;
......@@ -168,28 +169,28 @@ 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 < 1 || month > 12) {
if (month < Constants.MONTH_NO_MIN || month > Constants.MONTH_NO_MAX) {
return cardInfo;
}
if (day < 1 || day > 31) {
if (day < Constants.DAY_NO_MIN || day > Constants.DAY_NO_MAX) {
return cardInfo;
}
String areaCode = actualId.substring(0, 2);
String areaCode = actualId.substring(0, Constants.ID_NO_AREA_CODE_LENGTH);
if (!areaCodes.containsKey(areaCode)) {
return cardInfo;
}
// 校验码
int checkCode = 0;
for (int i = 0; i < 17; ++i) {
for (int i = 0; i < Constants.ID_NO_CHECK_LENGTH; ++i) {
checkCode += ((actualId.charAt(i) - '0') * wi[i]);
}
actualId += validCodes[checkCode % 11];
actualId += validCodes[checkCode % Constants.ID_NO_CHECK_MASK];
if (idCardStr.length() == 18) {
if (idCardStr.length() == Constants.ID_NO_STANDARD_LENGTH) {
if (!actualId.equalsIgnoreCase(idCardStr)) {
return cardInfo;
}
......@@ -197,7 +198,7 @@ public class IdCardServiceImpl implements IIdCardService {
cardInfo.setIsValid(true);
// 判断男女
if (Integer.parseInt(lastChar) % 2 == 0) {
if (Integer.parseInt(lastChar) % Constants.GENDER_MASK == 0) {
cardInfo.setGender(Gender.FEMALE);
} else {
cardInfo.setGender(Gender.MALE);
......@@ -215,11 +216,11 @@ public class IdCardServiceImpl implements IIdCardService {
}
String actualId;
String lastValue;
if (idCardStr.length() == 18) {
actualId = idCardStr.substring(0, 17);
lastValue = idCardStr.substring(16, 17).toLowerCase();
} else if (idCardStr.length() == 15) {
actualId = idCardStr.substring(0, 6) + "19" + idCardStr.substring(6, 15);
if (idCardStr.length() == Constants.ID_NO_STANDARD_LENGTH) {
actualId = idCardStr.substring(0, Constants.ID_NO_CHECK_LENGTH);
lastValue = idCardStr.substring(16, Constants.ID_NO_CHECK_LENGTH).toLowerCase();
} else if (idCardStr.length() == Constants.ID_NO_OLD_LENGTH) {
actualId = idCardStr.substring(0, 6) + "19" + idCardStr.substring(6, Constants.ID_NO_OLD_LENGTH);
lastValue = idCardStr.substring(13, 14).toLowerCase();
} else {
throw new IdCardException("身份证号码必须为18位或15位");
......@@ -228,7 +229,7 @@ public class IdCardServiceImpl implements IIdCardService {
throw new IdCardException("身份证格式不正确");
}
String yearStr = actualId.substring(6, 10);
String monthStr = actualId.substring(10, 12);
String monthStr = actualId.substring(10, Constants.MONTH_NO_MAX);
String dayStr = actualId.substring(12, 14);
int year = Integer.parseInt(yearStr);
int month = Integer.parseInt(monthStr);
......@@ -240,28 +241,28 @@ 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 < 1 || month > 12) {
if (month < Constants.MONTH_NO_MIN || month > Constants.MONTH_NO_MAX) {
throw new IdCardException("身份证出生月份不正确");
}
if (day < 1 || day > 31) {
if (day < Constants.DAY_NO_MIN || day > Constants.DAY_NO_MAX) {
throw new IdCardException("身份证出生日期不正确");
}
String areaCode = actualId.substring(0, 2);
String areaCode = actualId.substring(0, Constants.ID_NO_AREA_CODE_LENGTH);
if (!areaCodes.containsKey(areaCode)) {
throw new IdCardException("身份证省份不正确");
}
// 校验码
int checkCode = 0;
for (int i = 0; i < 17; ++i) {
for (int i = 0; i < Constants.ID_NO_CHECK_LENGTH; ++i) {
checkCode += ((actualId.charAt(i) - '0') * wi[i]);
}
actualId += validCodes[checkCode % 11];
actualId += validCodes[checkCode % Constants.ID_NO_CHECK_MASK];
if (idCardStr.length() == 18) {
if (idCardStr.length() == Constants.ID_NO_STANDARD_LENGTH) {
if (!actualId.equalsIgnoreCase(idCardStr)) {
throw new IdCardException("身份证校验不正确");
}
......@@ -270,7 +271,7 @@ public class IdCardServiceImpl implements IIdCardService {
IdCardInfo cardInfo = new IdCardInfo();
cardInfo.setIsValid(true);
// 判断男女
if (Integer.parseInt(lastValue) % 2 == 0) {
if (Integer.parseInt(lastValue) % Constants.GENDER_MASK == 0) {
cardInfo.setGender(Gender.FEMALE);
} else {
cardInfo.setGender(Gender.MALE);
......
......@@ -7,6 +7,7 @@ import cn.quantgroup.xyqb.repository.IUserAuthorizedRepository;
import cn.quantgroup.xyqb.repository.IUserRepository;
import cn.quantgroup.xyqb.service.auth.IIdCardService;
import cn.quantgroup.xyqb.service.auth.IUserAuthorizedService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -21,9 +22,9 @@ import java.util.Objects;
/**
* @author xufei on 2018/1/5.
*/
@Slf4j
@Service
public class UserAuthorizedServiceImpl implements IUserAuthorizedService {
private static final Logger LOGGER = LoggerFactory.getLogger(UserAuthorizedServiceImpl.class);
@Resource
private IIdCardService iIdCardService;
......@@ -41,12 +42,12 @@ public class UserAuthorizedServiceImpl implements IUserAuthorizedService {
return Boolean.FALSE;
}
} catch (ParseException e) {
LOGGER.error("[hasUserAuthorized]参数异常e:{}", e);
log.error("[hasUserAuthorized]参数异常e:{}", e);
return Boolean.FALSE;
}
UserAuthorized userAuthorized = userAuthorizedRepository.findByIdNo(idNo);
LOGGER.info("[hasUserAuthorized]查询实名账户userAuthorized:{}", userAuthorized);
log.info("[hasUserAuthorized]查询实名账户userAuthorized:{}", userAuthorized);
return null != userAuthorized;
}
......@@ -86,10 +87,10 @@ public class UserAuthorizedServiceImpl implements IUserAuthorizedService {
try {
userAuthorized = userAuthorizedRepository.save(userAuthorized);
LOGGER.info("[createUserAuthorized]创建实名账户成功,userAuthorized:{}", userAuthorized);
log.info("[createUserAuthorized]创建实名账户成功,userAuthorized:{}", userAuthorized);
return userAuthorized;
} catch (Exception e) {
LOGGER.error("[createUserAuthorized]创建实名账户异常e:{}", e);
log.error("[createUserAuthorized]创建实名账户异常e:{}", e);
return null;
}
}
......@@ -102,7 +103,7 @@ public class UserAuthorizedServiceImpl implements IUserAuthorizedService {
}
UserAuthorized userAuthorized = userAuthorizedRepository.findByUserUuid(userUuid);
LOGGER.info("[getUserAuthorizedId]获取实名账户的id,userUuid:{},userAuthorized:{}", userUuid, userAuthorized);
log.info("[getUserAuthorizedId]获取实名账户的id,userUuid:{},userAuthorized:{}", userUuid, userAuthorized);
if (null == userAuthorized) {
return null;
}
......
package cn.quantgroup.xyqb.service.captcha;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpStatus;
import org.json.JSONException;
import org.json.JSONObject;
......@@ -9,8 +12,6 @@ import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
......@@ -22,7 +23,6 @@ import java.util.Objects;
*/
@Slf4j
public class GeetestLib {
protected final String verName = "4.0";
private String apiUrl;
......@@ -147,7 +147,7 @@ public class GeetestLib {
gtlog("GET_URL:" + getUrl + param);
String result_str = readContentFromGet(getUrl + param);
if (Objects.equals(result_str, "fail")) {
if (Objects.equals(result_str, Constants.CHECK_FAIL)) {
gtlog("gtServer register challenge failed");
return 0;
......@@ -160,9 +160,9 @@ public class GeetestLib {
gtlog("return_challenge:" + return_challenge);
if (return_challenge.length() == 32) {
if (return_challenge.length() == Constants.MD5_LENGTH) {
this.responseStr = this.getSuccessPreProcessRes(this.md5Encode(return_challenge + this.privateKey));
this.responseStr = this.getSuccessPreProcessRes(Md5Util.build(return_challenge + this.privateKey));
return 1;
......@@ -278,14 +278,14 @@ public class GeetestLib {
response = readContentFromPost(postUrl, param);
gtlog("response: " + response);
} catch (Exception e) {
e.printStackTrace();
log.error("向gt-server进行二次验证", e);
}
String return_seccode = "";
try {
JSONObject return_map = new JSONObject(response);
return_seccode = return_map.getString("seccode");
gtlog("md5: " + md5Encode(return_seccode));
if (return_seccode.equals(md5Encode(seccode))) {
gtlog("md5: " + Md5Util.build(return_seccode));
if (return_seccode.equals(Md5Util.build(seccode))) {
return 1;
} else {
return 0;
......@@ -328,7 +328,7 @@ public class GeetestLib {
}
protected boolean checkResultByPrivate(String challenge, String validate) {
String encodeStr = md5Encode(privateKey + "geetest" + challenge);
String encodeStr = Md5Util.build(privateKey + "geetest" + challenge);
return validate.equals(encodeStr);
}
......@@ -344,14 +344,15 @@ public class GeetestLib {
URL getUrl = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) getUrl
.openConnection();
connection.setConnectTimeout(2000);// 设置连接主机超时(单位:毫秒)
connection.setReadTimeout(2000);// 设置从主机读取数据超时(单位:毫秒)
// 设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(2000);
// 设置从主机读取数据超时(单位:毫秒)
connection.setReadTimeout(2000);
// 建立与服务器的连接,并未发送数据
connection.connect();
if (connection.getResponseCode() == 200) {
if (connection.getResponseCode() == HttpStatus.SC_OK) {
// 发送数据到服务器并使用Reader读取返回的数据
StringBuilder sBuffer = new StringBuilder();
......@@ -362,12 +363,12 @@ public class GeetestLib {
sBuffer.append(new String(buf, 0, n, "UTF-8"));
}
inStream.close();
connection.disconnect();// 断开连接
// 断开连接
connection.disconnect();
return sBuffer.toString();
} else {
return "fail";
return Constants.CHECK_FAIL;
}
}
......@@ -385,9 +386,10 @@ public class GeetestLib {
URL postUrl = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setConnectTimeout(2000);// 设置连接主机超时(单位:毫秒)
connection.setReadTimeout(2000);// 设置从主机读取数据超时(单位:毫秒)
// 设置连接主机超时(单位:毫秒)
connection.setConnectTimeout(2000);
// 设置从主机读取数据超时(单位:毫秒)
connection.setReadTimeout(2000);
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
......@@ -401,7 +403,7 @@ public class GeetestLib {
outputStreamWriter.flush();
outputStreamWriter.close();
if (connection.getResponseCode() == 200) {
if (connection.getResponseCode() == HttpStatus.SC_OK) {
// 发送数据到服务器并使用Reader读取返回的数据
StringBuilder sBuffer = new StringBuilder();
......@@ -412,47 +414,14 @@ public class GeetestLib {
sBuffer.append(new String(buf, 0, n, "UTF-8"));
}
inStream.close();
connection.disconnect();// 断开连接
// 断开连接
connection.disconnect();
return sBuffer.toString();
} else {
return "fail";
}
}
/**
* md5 加密
*
* @param plainText
* @return
* @time 2014年7月10日 下午3:30:01
*/
private String md5Encode(String plainText) {
String re_md5 = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(plainText.getBytes());
byte b[] = md.digest();
int i;
StringBuilder buf = new StringBuilder();
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0) {
i += 256;
}
if (i < 16) {
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
re_md5 = buf.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return Constants.CHECK_FAIL;
}
return re_md5;
}
}
......@@ -2,8 +2,9 @@ package cn.quantgroup.xyqb.service.http.impl;
import cn.quantgroup.tech.brave.service.ITechHttpClient;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.util.Utils;
import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.Charsets;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
......@@ -52,11 +53,10 @@ import java.util.*;
* @author mengfan.feng
* @time 2015-08-13 10:19
*/
@Slf4j
@Service
public class HttpServiceImpl implements IHttpService {
private static final Logger LOGGER = LoggerFactory.getLogger(HttpServiceImpl.class);
private static final int TIME_OUT = 60 * 1000; // 超时时间
//注入brave-spring-boot-starter提供的techHttpClient
@Resource
......@@ -103,12 +103,12 @@ public class HttpServiceImpl implements IHttpService {
*/
private String doHttp(RequestBuilder requestBuilder, String uri, Map<String, String> headers, Map<String, String> parameters) {
if (StringUtils.isEmpty(uri)) {
LOGGER.info("uri cannot be empty, uri:{}", uri);
log.info("uri cannot be empty, uri:{}", uri);
return null;
}
String method = requestBuilder.getMethod();
LOGGER.info("{}, uri:{}, headers:{}, parameters:{}", method, uri, headers, StringUtils.substring(Utils.safeMap2Str(parameters), 0, 200));
log.info("{}, uri:{}, headers:{}, parameters:{}", method, uri, headers, StringUtils.substring(PasswordUtil.filterPasswordToString(parameters), 0, 200));
HttpEntity httpEntity = null;
CloseableHttpResponse httpResponse = null;
try {
......@@ -129,11 +129,11 @@ public class HttpServiceImpl implements IHttpService {
httpEntity = httpResponse.getEntity();
String response = EntityUtils.toString(httpEntity, Charsets.UTF_8);
LOGGER.info("{}, uri:{}, response:{}", method, uri, StringUtils.substring(response, 0, 200));
log.info("{}, uri:{}, response:{}", method, uri, StringUtils.substring(response, 0, 200));
return response;
} catch (Exception e) {
LOGGER.info("{}, uri:{}, headers:{}, parameters:{}", method, uri, headers, StringUtils.substring(Utils.safeMap2Str(parameters), 0, 200), e);
log.info("{}, uri:{}, headers:{}, parameters:{}", method, uri, headers, StringUtils.substring(PasswordUtil.filterPasswordToString(parameters), 0, 200), e);
return null;
} finally {
EntityUtils.consumeQuietly(httpEntity);
......@@ -142,7 +142,7 @@ public class HttpServiceImpl implements IHttpService {
httpResponse.close();
}
} catch (Exception e) {
LOGGER.error("{}, httpResponse.close error", method, e);
log.error("{}, httpResponse.close error", method, e);
}
}
}
......
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.service.mq.impl;
import cn.quantgroup.xyqb.service.mq.IRegisterMqService;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Queue;
......@@ -16,20 +17,20 @@ import java.io.Serializable;
/**
* Created by xuran on 2017/9/7.
*/
@Slf4j
@Service("registerMqService")
public class IRegisterMqServiceImpl implements IRegisterMqService {
private static final Logger LOGGER = LoggerFactory.getLogger(IRegisterMqServiceImpl.class);
@Autowired
@Qualifier("registerRabbitTemplate")
RabbitTemplate registerRabTemplate;
private RabbitTemplate registerRabTemplate;
@Autowired
@Qualifier("registerRabbitTemplate4Gdt")
RabbitTemplate registerRabbitTemplate4Gdt;
private RabbitTemplate registerRabbitTemplate4Gdt;
@Autowired
@Qualifier(value = "registerMqQueue")
Queue registerMqQueue;
private Queue registerMqQueue;
/**
* 发送用登陆统计信息
......@@ -40,12 +41,12 @@ public class IRegisterMqServiceImpl implements IRegisterMqService {
@Async
public void send(Serializable message) {
if (null == message) {
LOGGER.error("广播用户注册消息不能为空");
log.error("广播用户注册消息不能为空");
}
LOGGER.info("广播用户注册消息,message={}", message);
log.info("广播用户注册消息,message={}", message);
String msg = JSONObject.toJSONString(message);
registerRabTemplate.convertAndSend(msg);
LOGGER.info("广播用户注册消息,message={}", msg);
log.info("广播用户注册消息,message={}", msg);
}
/**
......@@ -57,12 +58,12 @@ public class IRegisterMqServiceImpl implements IRegisterMqService {
@Async
public void send4Gdt(Serializable message) {
if (null == message) {
LOGGER.error("广点通用户注册消息不能为空");
log.error("广点通用户注册消息不能为空");
}
LOGGER.info("广点通用户注册消息,message={}", message);
log.info("广点通用户注册消息,message={}", message);
String msg = JSONObject.toJSONString(message);
registerRabbitTemplate4Gdt.convertAndSend(msg);
LOGGER.info("广点通用户注册消息,message={}", msg);
log.info("广点通用户注册消息,message={}", msg);
}
}
......@@ -3,9 +3,7 @@ package cn.quantgroup.xyqb.service.mq.impl;
import cn.quantgroup.xyqb.model.UserStatistics;
import cn.quantgroup.xyqb.service.mq.IVestService;
import com.alibaba.fastjson.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Queue;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.scheduling.annotation.Async;
......@@ -17,18 +15,14 @@ import javax.annotation.Resource;
* Created by xuran on 2017/6/21.
* 用户统计信息
*/
@Service("loanVestMQService")
public class LoanVestMQServiceImpl implements IVestService {
private static final Logger LOGGER = LoggerFactory.getLogger(LoanVestMQServiceImpl.class);
@Slf4j
@Service("loanVestMqService")
public class LoanVestMqServiceImpl implements IVestService {
@Resource
@Qualifier("rabbitTemplate")
private RabbitTemplate rabbitTemplate;
@Resource
@Qualifier(value = "loanVestQueue")
Queue loanVestQueue;
/**
* 发送用登陆统计信息
*
......@@ -38,12 +32,13 @@ public class LoanVestMQServiceImpl implements IVestService {
@Async
public void send(UserStatistics message) {
if (null == message) {
LOGGER.error("用户登陆统计消息不能为空");
log.error("用户登陆统计消息不能为空");
return;
}
LOGGER.info("用户登陆统计发送,message={}", message);
log.info("用户登陆统计发送,message={}", message);
String msg = JSONObject.toJSONString(message);
rabbitTemplate.convertAndSend("statistics-user", msg);
LOGGER.info("用户登陆统计成功,message={}", msg);
log.info("用户登陆统计成功,message={}", msg);
}
}
......@@ -5,11 +5,11 @@ import cn.quantgroup.xyqb.entity.User;
/**
* Created by Miraculous on 2017/1/3.
*/
public abstract class PageType {
public abstract class BasePageType {
protected String name;
protected Boolean needShow;
public PageType(String name, Boolean needShow) {
public BasePageType(String name, Boolean needShow) {
this.name = name;
this.needShow = needShow;
}
......
......@@ -3,7 +3,7 @@ package cn.quantgroup.xyqb.service.page.impl;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.model.Tuple;
import cn.quantgroup.xyqb.service.page.IPageService;
import cn.quantgroup.xyqb.service.page.bean.PageType;
import cn.quantgroup.xyqb.service.page.bean.BasePageType;
import cn.quantgroup.xyqb.service.user.IAddressService;
import cn.quantgroup.xyqb.service.user.IContactService;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
......@@ -22,10 +22,10 @@ import java.util.Map;
@Service
public class PageServiceImpl implements IPageService {
private Map<String, PageType[]> routerDefinetion;
private Map<String, BasePageType[]> routerDefinetion;
@Autowired
private IUserDetailService userDetailService;
private PageType pageIdNo = new PageType("name", false) {
private BasePageType pageIdNo = new BasePageType("name", false) {
@Override
public boolean canPass(User user) {
UserDetail userDetail = userDetailService.findByUserId(user.getId());
......@@ -34,7 +34,7 @@ public class PageServiceImpl implements IPageService {
};
@Autowired
private IUserExtInfoService userExtInfoService;
private PageType pageUserFinance = new PageType("info", false) {
private BasePageType pageUserFinance = new BasePageType("info", false) {
@Override
public boolean canPass(User user) {
UserExtInfo extInfo = userExtInfoService.findByUserId(user.getId());
......@@ -43,7 +43,7 @@ public class PageServiceImpl implements IPageService {
};
@Autowired
private IAddressService addressService;
private PageType pageAddress = new PageType("address", false) {
private BasePageType pageAddress = new BasePageType("address", false) {
@Override
public boolean canPass(User user) {
Address address = addressService.findByUserId(user.getId());
......@@ -52,7 +52,7 @@ public class PageServiceImpl implements IPageService {
};
@Autowired
private IContactService contactService;
private PageType pageContacts = new PageType("contacts", false) {
private BasePageType pageContacts = new BasePageType("contacts", false) {
@Override
public boolean canPass(User user) {
List<Contact> contacts = contactService.findByUserId(user.getId(), true);
......@@ -64,19 +64,19 @@ public class PageServiceImpl implements IPageService {
private void init() {
routerDefinetion = new HashMap<>();
routerDefinetion.put("cashTarget1", new PageType[]{
routerDefinetion.put("cashTarget1", new BasePageType[]{
pageIdNo, pageUserFinance
});
routerDefinetion.put("cashTarget2", new PageType[]{
routerDefinetion.put("cashTarget2", new BasePageType[]{
pageIdNo, pageAddress
});
routerDefinetion.put("cashTarget3", new PageType[]{
routerDefinetion.put("cashTarget3", new BasePageType[]{
pageIdNo, pageContacts
});
routerDefinetion.put("cashTarget4", new PageType[]{
routerDefinetion.put("cashTarget4", new BasePageType[]{
pageIdNo
});
routerDefinetion.put("cashTarget5", new PageType[]{
routerDefinetion.put("cashTarget5", new BasePageType[]{
});
}
......@@ -85,7 +85,7 @@ public class PageServiceImpl implements IPageService {
if (user == null) {
return new Tuple<>("", false);
}
PageType[] processLists = routerDefinetion.getOrDefault(target, null);
BasePageType[] processLists = routerDefinetion.getOrDefault(target, null);
if (processLists == null) {
return new Tuple<>("", false);
}
......@@ -93,7 +93,7 @@ public class PageServiceImpl implements IPageService {
return new Tuple<>("", true);
}
boolean isBeforeCurrentPage = true;
for (PageType page : processLists) {
for (BasePageType page : processLists) {
if (!page.canPass(user)) {
return new Tuple<>(page.getName(), false);
}
......
......@@ -69,7 +69,7 @@ public class UserRegisterServiceImpl implements IUserRegisterService {
registerFrom = 1L;
}
Long channelId = userRegisterParam.getChannelId();
if (Objects.equals(channelId, 222L)) {
if (Objects.equals(channelId, Constants.Channel.BAITIAO)) {
user.setRegisteredFrom(channelId);
} else {
user.setRegisteredFrom(registerFrom);
......
......@@ -3,12 +3,11 @@ package cn.quantgroup.xyqb.service.session.aspect;
import cn.quantgroup.xyqb.entity.UserBtRegister;
import cn.quantgroup.xyqb.model.session.SessionValue;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
......@@ -17,16 +16,17 @@ import org.springframework.stereotype.Component;
/**
* Created by Administrator on 2017/5/16.
*/
@Slf4j
@Aspect
@Component
@Order(value = Ordered.HIGHEST_PRECEDENCE + 200)
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class UserBtRegisterFillAspect {
private static final Logger LOGGER = LoggerFactory.getLogger(UserBtRegisterFillAspect.class);
@Autowired
private IUserBtRegisterService userBtRegisterService;
@Pointcut("@annotation(cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill)") //生成还款计划的时候,去生成趸交服务费
/** 生成还款计划的时候,去生成趸交服务费 */
@Pointcut("@annotation(cn.quantgroup.xyqb.service.session.aspect.UserBtRegisterFill)")
public void userBtRegisterFillCut() {
}
......@@ -36,7 +36,7 @@ public class UserBtRegisterFillAspect {
try {
args = fillUserBtRegister(args);
} catch (Exception e) {
LOGGER.error("补充用户白条登录渠道信息失败", e);
log.error("补充用户白条登录渠道信息失败", e);
}
return pjp.proceed(args);
}
......
......@@ -53,10 +53,10 @@ public class SessionServiceImpl implements ISessionService {
//找到用户
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
SessionStruct sessionStruct = null;
if (org.apache.commons.lang.StringUtils.isNotEmpty(sessionId)) {
if (StringUtils.isNotEmpty(sessionId)) {
sessionStruct = findSessionBySessionId(sessionId);
}
if (Objects.nonNull(sessionStruct)) {
if (Objects.nonNull(sessionStruct) && Objects.nonNull(properties)) {
sessionStruct.setAttribute("channelId", String.valueOf(properties.getChannelId()));
sessionStruct.setAttribute("createdFrom", String.valueOf(properties.getCreatedFrom()));
sessionStruct.setAttribute("appChannel", String.valueOf(properties.getAppChannel()));
......@@ -80,7 +80,7 @@ public class SessionServiceImpl implements ISessionService {
SessionStruct sessionStruct;
//获取sessionid
String sessionId = findSessionIdByUserIdLoginProperties(user.getId(), properties);
if (StringUtils.length(sessionId) == 36) {
if (StringUtils.length(sessionId) == Constants.TOKEN_LENGTH) {
sessionStruct = findSessionBySessionId(sessionId);
if (sessionStruct == null) {
sessionStruct = newSession(user, properties);
......
......@@ -8,8 +8,6 @@ import cn.quantgroup.xyqb.service.sms.ISmsService;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
......@@ -23,14 +21,9 @@ import java.util.Collections;
* @author mengfan.feng
* @time 2015-07-25 18:47
*/
@Service
@Slf4j
@Service
public class SmsServiceImpl implements ISmsService {
private static final Logger LOGGER = LoggerFactory.getLogger(SmsServiceImpl.class);
private static final int SMS_VERIFICATION_MAXLEN = 4;
private static final String SMS_VERIFY_PREFIX = "sms:verify:";
private static SmsSender smsSender = null;
@Value("${sms.is.debug}")
......@@ -64,7 +57,7 @@ public class SmsServiceImpl implements ISmsService {
//smsSender.sendAndForget(new SendAndForgetMsg(Collections.emptyList(), "24", "1", phoneNo));
log.info("注册完成,发送短信, phoneNo:{}", phoneNo);
} catch (Exception e) {
e.printStackTrace();
log.error("注册完成短信发送异常", e);
}
}
......@@ -98,7 +91,7 @@ public class SmsServiceImpl implements ISmsService {
return false;
}
String[] arr = randomCode.split(":");
if (arr.length != 2) {
if (arr.length != Constants.VERIFICATION_LEN) {
return false;
}
String uniqueId = arr[0];
......@@ -115,7 +108,7 @@ public class SmsServiceImpl implements ISmsService {
//smsSender.confirmSmsResult("1", unqiueId);
log.info("confirmMsg send success, uniqueId={}", unqiueId);
} catch (Exception e) {
log.info("短信验证向短信中心确认失效");
log.info("短信验证向短信中心确认失效", e);
}
return StringUtils.equals(code, smsVerificationCode);
}
......
......@@ -17,7 +17,7 @@ public interface IUserDetailService {
UserDetail findByPhoneNo(String phoneNo);
void updateUserQQ(Long userId, String qq);
void updateUserQq(Long userId, String qq);
void updateUserEmail(Long userId, String email);
......
......@@ -4,6 +4,7 @@ import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.xyqb.repository.IContactRepository;
import cn.quantgroup.xyqb.service.user.IContactService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -15,13 +16,14 @@ import org.springframework.util.CollectionUtils;
import java.sql.Timestamp;
import java.util.List;
import java.util.Objects;
/**
* Created by Miraculous on 2017/1/3.
*/
@Slf4j
@Service
public class ContactServiceImpl implements IContactService {
private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(ContactServiceImpl.class);
@Autowired
private IContactRepository contactRepository;
......@@ -84,7 +86,7 @@ public class ContactServiceImpl implements IContactService {
if (null != relation) {
contact.setRelation(relation);
}
LOGGER.info("修改前联系人信息:{}", contact);
log.info("修改前联系人信息:{}", contact);
Timestamp now = new Timestamp(System.currentTimeMillis());
contact.setUpdateAt(now);
contact = save(contact);
......@@ -100,18 +102,26 @@ public class ContactServiceImpl implements IContactService {
private void mergeContacts(Long userId, List<Contact> contacts) {
// 当前联系人列表
List<Contact> userContact = contactRepository.findByUserId(userId);
int userContactCount = (userContact == null) ? 0 : userContact.size();
Timestamp now = new Timestamp(System.currentTimeMillis());
for (int i = 0; i < contacts.size(); i++) {
Contact c = contacts.get(i);
c.setId(null);
c.setUserId(userId);
c.setRelation(c.getRelation() == null ? Relation.OTHER : c.getRelation());
if(Objects.isNull(c.getRelation())){
c.setRelation(Relation.OTHER);
}
c.setCreatedAt(now);
c.setUpdateAt(now);
if (userContactCount > i) {
c.setId(userContact.get(i).getId());
c.setCreatedAt(userContact.get(i).getCreatedAt() == null ? now : userContact.get(i).getCreatedAt());
if (CollectionUtils.isEmpty(userContact) || userContact.size() <= i) {
continue;
}
Contact old = userContact.get(i);
if(Objects.isNull(old)){
continue;
}
c.setId(old.getId());
if(Objects.nonNull(old.getCreatedAt())){
c.setCreatedAt(old.getCreatedAt());
}
}
}
......
......@@ -8,8 +8,6 @@ import cn.quantgroup.xyqb.util.PasswordUtil;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -26,9 +24,8 @@ import java.util.Optional;
@Slf4j
public class LkbUserviceImpl implements ILkbUserService {
private static final Logger LOGGER = LoggerFactory.getLogger(LkbUserviceImpl.class);
private static final String TOKEN_PATTERN = "timeunit=%sappkey=lkb010203#$%%";
private static final String LKB_CODE = "0002";
@Autowired
private IHttpService httpService;
......@@ -41,7 +38,7 @@ public class LkbUserviceImpl implements ILkbUserService {
String timeunit = System.currentTimeMillis() + "";
String token = PasswordUtil.MD5(String.format(TOKEN_PATTERN, timeunit));
Map<String, String> parameters = Maps.newHashMap();
parameters.put("appId", Constants.Channel.LKB_CODE);
parameters.put("appId", LKB_CODE);
parameters.put("timeunit", timeunit);
parameters.put("token", token);
parameters.put("userId", uuid);
......@@ -54,8 +51,8 @@ public class LkbUserviceImpl implements ILkbUserService {
}
String response = httpService.post(clientUrl + "/user/push.json", parameters);
Optional<Map> resultOptional = JsonUtil.fromJson(response, Map.class);
if (!resultOptional.isPresent() || !"0000".equals(resultOptional.get().get("code"))) {
LOGGER.error("[lkb_user_push]向LKB同步用户失败,phoneNo:{},response={}", phoneNo, response);
if (!resultOptional.isPresent() || !Constants.SUCCESS_CODE.equals(resultOptional.get().get(Constants.RESULT_CODE))) {
log.error("[lkb_user_push]向LKB同步用户失败,phoneNo:{},response={}", phoneNo, response);
return false;
}
return true;
......
......@@ -5,8 +5,9 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.exception.PasswordErrorLimitException;
import cn.quantgroup.xyqb.service.user.ILockIpv4Service;
import cn.quantgroup.xyqb.util.DateUtils;
import cn.quantgroup.xyqb.util.IPUtil;
import cn.quantgroup.xyqb.util.IpUtil;
import cn.quantgroup.xyqb.util.ValidationUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -23,9 +24,9 @@ import java.util.concurrent.TimeUnit;
*
* @author renwc
*/
@Slf4j
@Service
public class LockIpv4ServiceImpl implements ILockIpv4Service {
private static final Logger LOGGER = LoggerFactory.getLogger(ILockIpv4Service.class);
@Autowired
@Qualifier("stringRedisTemplate")
......@@ -36,16 +37,16 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
// 密码错误时,给该账号添加计数器
String key = Constants.REDIS_PASSWORD_ERROR_COUNT + phoneNo;
if (!stringRedisTemplate.hasKey(key)) {
LOGGER.info("添加错误计数器,key={}", key);
log.info("添加错误计数器,key={}", key);
stringRedisTemplate.opsForValue().set(key, String.valueOf(0), DateUtils.getSeconds(), TimeUnit.SECONDS);
}
// 密码错误计数
Long errorCount = stringRedisTemplate.opsForValue().increment(key, 1L);
if (errorCount > Constants.Image_Need_Count) {
LOGGER.info("用户名或密码不正确,phoneNo={}", phoneNo);
log.info("用户名或密码不正确,phoneNo={}", phoneNo);
throw new PasswordErrorLimitException("用户名或密码不正确");
} else if (Objects.equals(errorCount, Constants.Image_Need_Count)) {
LOGGER.info("请输入图形验证码,phoneNo={}", phoneNo);
log.info("请输入图形验证码,phoneNo={}", phoneNo);
throw new PasswordErrorLimitException("请输入图形验证码");
}
}
......@@ -57,14 +58,14 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
*/
@Override
public void countErrorByIpv4(String ipv4) {
if (ValidationUtil.validateIpv4(ipv4) && !IPUtil.whiteOf(ipv4)) {
if (ValidationUtil.validateIpv4(ipv4) && !IpUtil.whiteOf(ipv4)) {
String ipv4Key = getErrorIpKey(ipv4);
if (!stringRedisTemplate.hasKey(ipv4Key)) {
// 计数周期1分钟
stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_FAILED_COUNT_MINUTES, TimeUnit.MINUTES);
}
Long count = stringRedisTemplate.opsForValue().increment(ipv4Key, 1L);
LOGGER.info("Lock_ipv4: count deny ip access: ip={}, count={}", ipv4, count);
log.info("Lock_ipv4: count deny ip access: ip={}, count={}", ipv4, count);
lockErrorIpv4(ipv4, count);
}
}
......@@ -88,7 +89,7 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
}
String lockIpv4Key = getLockIpv4Key(ip);
stringRedisTemplate.opsForValue().set(lockIpv4Key, Boolean.TRUE.toString(), minutes, TimeUnit.MINUTES);
LOGGER.info("Lock_ipv4: locked error ip access:{}, error overstep {} times in {} minutes, do lock {} minutes", ip, counts, Constants.IPV4_FAILED_COUNT_MINUTES, minutes);
log.info("Lock_ipv4: locked error ip access:{}, error overstep {} times in {} minutes, do lock {} minutes", ip, counts, Constants.IPV4_FAILED_COUNT_MINUTES, minutes);
}
/**
......@@ -98,14 +99,14 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
*/
@Override
public void countSuccessByIpv4(String ipv4) {
if (ValidationUtil.validateIpv4(ipv4) && !IPUtil.whiteOf(ipv4)) {
if (ValidationUtil.validateIpv4(ipv4) && !IpUtil.whiteOf(ipv4)) {
String ipv4Key = getSuccessIpKey(ipv4);
if (!stringRedisTemplate.hasKey(ipv4Key)) {
// 计数周期1分钟
stringRedisTemplate.opsForValue().set(ipv4Key, String.valueOf(0), Constants.IPV4_SUCCESS_COUNT_MINUTES, TimeUnit.MINUTES);
}
Long count = stringRedisTemplate.opsForValue().increment(ipv4Key, 1L);
LOGGER.info("Lock_ipv4: count success ip access: ip={}, count={}", ipv4, count);
log.info("Lock_ipv4: count success ip access: ip={}, count={}", ipv4, count);
// 恢复规则,观察 // Todo -- 误伤业务方,暂时下线[比如网贷之家:121.40.207.133] -- lockSuccessIpv4(ipv4, count);
lockSuccessIpv4(ipv4, count);
}
......@@ -120,7 +121,7 @@ public class LockIpv4ServiceImpl implements ILockIpv4Service {
// 锁定时长
String lockIpv4Key = getLockIpv4Key(ip);
stringRedisTemplate.opsForValue().set(lockIpv4Key, Boolean.TRUE.toString(), Constants.IPV4_SUCCESS_LOCK_MINUTES, TimeUnit.MINUTES);
LOGGER.info("Lock_ipv4: locked success ip access:{}, success overstep {} times in {} minutes, do lock {} minutes", ip, Constants.IPV4_LOCK_ON_SUCCESS_COUNTS, Constants.IPV4_SUCCESS_COUNT_MINUTES, Constants.IPV4_SUCCESS_LOCK_MINUTES);
log.info("Lock_ipv4: locked success ip access:{}, success overstep {} times in {} minutes, do lock {} minutes", ip, Constants.IPV4_LOCK_ON_SUCCESS_COUNTS, Constants.IPV4_SUCCESS_COUNT_MINUTES, Constants.IPV4_SUCCESS_LOCK_MINUTES);
}
private static String getErrorIpKey(String ipv4) {
......
......@@ -68,8 +68,8 @@ public class UserDetailServiceImpl implements IUserDetailService {
}
@Override
public void updateUserQQ(Long userId, String qq) {
userDetailRepository.updateUserQQ(qq, userId);
public void updateUserQq(Long userId, String qq) {
userDetailRepository.updateUserQq(qq, userId);
}
@Override
......@@ -180,7 +180,7 @@ public class UserDetailServiceImpl implements IUserDetailService {
private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
Sort sort = null;
if ("auto".equals(sortType)) {
if (Constants.AUTO_SORT_TYPE.equals(sortType)) {
sort = new Sort(Sort.Direction.ASC, "userId");
}
......
......@@ -25,7 +25,7 @@ public class UserExtInfoServiceImpl implements IUserExtInfoService {
}
@Override
@Transactional
@Transactional(rollbackFor = Exception.class)
@CacheEvict(value = "userextinfocache", key = "'extinfo' + #info.userId", cacheManager = "cacheManager")
public UserExtInfo save(UserExtInfo info) {
return userExtInfoRepository.save(info);
......
......@@ -37,7 +37,7 @@ import java.util.concurrent.TimeUnit;
public class UserServiceImpl implements IUserService {
@Autowired
RedisTemplate<String, String> stringRedisTemplate;
private RedisTemplate<String, String> stringRedisTemplate;
@Autowired
private IUserRepository userRepository;
......
package cn.quantgroup.xyqb.service.wechat.impl;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.WechatUserInfo;
import cn.quantgroup.xyqb.exception.WechatRelateUserException;
import cn.quantgroup.xyqb.model.webchat.AccessTokenResponse;
......@@ -32,7 +33,6 @@ import java.util.concurrent.TimeUnit;
@Service
public class WechatServiceImpl implements IWechatService {
private static final String WECHAT_TOKEN_KEY_PREFIX = "wechat:token:";
private static final String WECHAT_USERINFO_KEY_PREFIX = "wechat:userinfo:";
@Value("${wechat.appid}")
private String appId;
@Value("${wechat.secret}")
......@@ -42,8 +42,6 @@ public class WechatServiceImpl implements IWechatService {
@Resource
private IHttpService httpService;
@Resource
private ISessionService sessionService;
@Resource
private IWeChatUserRepository weChatUserRepository;
@Autowired
@Qualifier("stringRedisTemplate")
......@@ -75,8 +73,8 @@ public class WechatServiceImpl implements IWechatService {
if (accessTokenResponse == null) {
return null;
}
accessTokenResponse.setInitialTime(System.currentTimeMillis() - 10000);
redisTemplate.opsForValue().set(key, JSONObject.toJSONString(accessTokenResponse), accessTokenResponse.getExpiresIn() + 1000, TimeUnit.SECONDS);
accessTokenResponse.setInitialTime(System.currentTimeMillis() - Constants.MILLIS_OF_TEN_SECOND);
redisTemplate.opsForValue().set(key, JSONObject.toJSONString(accessTokenResponse), accessTokenResponse.getExpiresIn() + Constants.THOUSAND_SECOND, TimeUnit.SECONDS);
return accessTokenResponse;
} catch (Exception ex) {
return null;
......@@ -85,15 +83,15 @@ public class WechatServiceImpl implements IWechatService {
try {
AccessTokenResponse response = JSONObject.parseObject(resultStr, AccessTokenResponse.class);
// 刷新
if (response.getInitialTime() + response.getExpiresIn() * 1000 > System.currentTimeMillis()) {
if (response.getInitialTime() + response.getExpiresIn() * Constants.MILLIS_PER_SECOND > System.currentTimeMillis()) {
String refreshTokenStr = refreshToken(response.getRefreshToken());
response = JSONObject.parseObject(refreshTokenStr, AccessTokenResponse.class);
if (response == null) {
return null;
}
response.setInitialTime(System.currentTimeMillis() - 10000);
response.setInitialTime(System.currentTimeMillis() - Constants.MILLIS_OF_TEN_SECOND);
}
redisTemplate.opsForValue().set(key, JSONObject.toJSONString(response), response.getExpiresIn() + 1000, TimeUnit.SECONDS);
redisTemplate.opsForValue().set(key, JSONObject.toJSONString(response), response.getExpiresIn() + Constants.THOUSAND_SECOND, TimeUnit.SECONDS);
return response;
} catch (Exception ex) {
return null;
......@@ -118,7 +116,7 @@ public class WechatServiceImpl implements IWechatService {
}
@Override
@Transactional
@Transactional(rollbackFor = Exception.class)
public WechatUserInfo saveWechatUserInfo(WechatUserInfo userInfo) {
if (Objects.isNull(userInfo) || Objects.isNull(userInfo.getOpenId())) {
return null;
......
......@@ -20,7 +20,11 @@ import java.util.Objects;
public class XyqbSessionContextHolder {
private static final ThreadLocal<SessionStruct> threadSession = new ThreadLocal<>();
public static RedisTemplate<String, String> redisTemplate = null;
private static RedisTemplate<String, String> redisTemplate = null;
public static void setRedisTemplate(RedisTemplate<String, String> redisTemplate){
XyqbSessionContextHolder.redisTemplate = redisTemplate;
}
public static SessionStruct getXSession() {
SessionStruct sessionStruct;
......@@ -40,7 +44,7 @@ public class XyqbSessionContextHolder {
}
public static SessionStruct getXSessionFromRedis(String token) {
if (Objects.isNull(token) || token.length() != 36 || Objects.isNull(redisTemplate)) {
if (StringUtils.length(token) != Constants.TOKEN_LENGTH || Objects.isNull(redisTemplate)) {
return null;
}
String result = redisTemplate.opsForValue().get(Constants.Session.USER_SESSION_CACHE + token);
......
......@@ -15,7 +15,7 @@ import javax.crypto.spec.SecretKeySpec;
* @version 1.0
*/
@Slf4j
public class AESUtil {
public class AesUtil {
/**
* KEY算法
......@@ -60,7 +60,7 @@ public class AESUtil {
*/
private static byte[] decryptAfterBase64DecodeToByte(String data, String key) {
try {
if (key == null || "".equals(key.trim().length())) {
if (StringUtils.isBlank(key)) {
return null;
}
byte[] raw = key.getBytes(DATA_ENCODING);
......
......@@ -16,7 +16,7 @@ import java.util.Set;
* @author renwc
* @date 2017-12-01
*/
public class IPUtil {
public class IpUtil {
/**
* IP白名单
* <p>
......@@ -30,6 +30,8 @@ public class IPUtil {
*/
private static final Set<String> WHITE_ADDRESS = Sets.newHashSet();
private static final String LOCAL_ADDRESS = "127.0.0.1";
/** 入口服务器IP */
public static final String IO_IP = "139.198.";
static {
String[] ips = {"172.16.", "172.18.", "172.20.", "172.21.", "172.30.", "172.41.", "192.168.3.", "192.168.4."};
......@@ -96,13 +98,14 @@ public class IPUtil {
}
//过滤反向代理的ip
String[] stemps = ip.split(",");
if (stemps != null && stemps.length >= 1) {
if (stemps != null && stemps.length > 0) {
//得到第一个IP,即客户端真实IP
ip = stemps[0];
}
ip = ip.trim();
if (ip.length() > 23) {
ip = ip.substring(0, 23);
int twentyThree = 23;
if (ip.length() > twentyThree) {
ip = ip.substring(0, twentyThree);
}
return ip;
}
......
......@@ -24,7 +24,7 @@ public class MqUtils {
*/
public static void sendLoanVest(UserStatistics vest) {
try {
IVestService mqService = ApplicationContextHolder.getBean("loanVestMQService");
IVestService mqService = ApplicationContextHolder.getBean("loanVestMqService");
mqService.send(vest);
} catch (Exception e) {
log.error("[MQUtils][MQUtils_exception]发送用户统计信息,vest={},error={}",
......
package cn.quantgroup.xyqb.util;
import cn.quantgroup.xyqb.Constants;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Preconditions;
import org.apache.commons.lang.StringUtils;
import java.security.MessageDigest;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ThreadLocalRandom;
......@@ -89,4 +92,20 @@ public class PasswordUtil {
return Objects.equals(thePassword, targetPassword);
}
public static String filterPasswordToString(Map<String, String> info) {
if (null == info) {
return null;
}
if(!info.containsKey(Constants.PASSWORD)){
return JSON.toJSONString(info);
}
String password = info.get(Constants.PASSWORD);
// 先删掉
info.remove(Constants.PASSWORD);
String infoString = JSON.toJSONString(info);
// 再回填
info.put(Constants.PASSWORD, password);
return infoString;
}
}
package cn.quantgroup.xyqb.util;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author mengfan.feng
*/
public class Utils {
private static Pattern pattern = Pattern.compile("(?<!\\d)(?:(?:1[34578]\\d{9})|(?:861[34578]\\d{9}))(?!\\d)");
public static String safeMap2Str(Map<String, String> info) {
if (null == info) {
return null;
}
StringBuilder builder = new StringBuilder();
builder.append("{");
info.forEach((key, value) -> {
if ("password".equals(key)) {
return;
}
builder.append(key);
builder.append("=");
builder.append(value);
builder.append(",");
});
builder.append("}");
return builder.toString();
}
public static String coverPhone(String str) {
if (str.length() <= 0) {
return "";
}
if (str.length() > 1024) //长度超过1024的字符串不走正则匹配过滤手机号
{
return "";
}
Matcher matcher = pattern.matcher(str);
Map<String, String> replaceMap = new HashMap<>();
while (matcher.find()) {
String group = matcher.group();
String replace = group.substring(0, 3).concat("****").concat(group.substring(7)).concat(" [".concat(PasswordUtil.MD5(group)).concat("]"));
replaceMap.put(group, replace);
}
Set<Map.Entry<String, String>> entries = replaceMap.entrySet();
for (Map.Entry<String, String> entry : entries) {
str = str.replaceAll(entry.getKey(), entry.getValue());
}
return str;
}
}
package cn.quantgroup.xyqb.util;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.util.encrypt.MD5Util;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
......@@ -180,7 +180,7 @@ public class ValidationUtil {
public static String getMd5Key(boolean lock) {
Calendar today = Calendar.getInstance();
int hour_24 = today.get(Calendar.HOUR_OF_DAY);
return MD5Util.build(Constants.CLEAR_LOCK_FOR_IPV4_KEY + lock + hour_24);
return Md5Util.build(Constants.CLEAR_LOCK_FOR_IPV4_KEY + lock + hour_24);
}
}
package cn.quantgroup.xyqb.util.encrypt;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -9,16 +10,15 @@ import java.security.NoSuchAlgorithmException;
/**
* Created by tums on 2015/11/30.
*/
public final class MD5Util {
private static final Logger LOGGER = LoggerFactory.getLogger(MD5Util.class);
@Slf4j
public final class Md5Util {
public static String build(String content) {
MessageDigest messageDigest;
try {
messageDigest = MessageDigest
.getInstance("md5");
messageDigest = MessageDigest.getInstance("md5");
} catch (NoSuchAlgorithmException e) {
LOGGER.error(e.getMessage(), e);
log.error("MessageDigest获取实例失败", e);
return null;
}
messageDigest.update(content.getBytes());
......
package cn.quantgroup.xyqb.util.encrypt;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.math.BigInteger;
......@@ -10,7 +12,8 @@ import java.security.spec.X509EncodedKeySpec;
import java.util.HashMap;
import java.util.Map;
public class RSA {
@Slf4j
public class Rsa {
/**
* 指定key的大小
*/
......@@ -166,19 +169,14 @@ public class RSA {
Base64.decodeBase64(privateKey.getBytes()));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initSign(priKey);
signature.update(content.getBytes(charset));
byte[] signed = signature.sign();
return new String(Base64.encodeBase64(signed));
} catch (Exception e) {
log.error("出错了", e);
}
return null;
}
......@@ -187,19 +185,13 @@ public class RSA {
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
byte[] encodedKey = Base64.decode2(publicKey);
PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
Signature signature = Signature
.getInstance("SHA1WithRSA");
Signature signature = Signature.getInstance("SHA1WithRSA");
signature.initVerify(pubKey);
signature.update(content.getBytes("utf-8"));
boolean bverify = signature.verify(Base64.decode2(sign));
return bverify;
} catch (Exception e) {
e.printStackTrace();
log.error("出错了", e);
}
return false;
......
......@@ -5,4 +5,4 @@ import service.QuantgroupCaptchaServiceTest;
@RunWith(Suite.class)
@Suite.SuiteClasses({GeetestCaptchaServiceTest.class, QuantgroupCaptchaServiceTest.class})
public class CaptchaVerifyTests {}
\ No newline at end of file
public class CaptchaVerifyTest {}
\ No newline at end of file
import demo.*;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({DynamicTest.class, MockMvcTest.class, MvcTest.class,
ParametersJunit4Test.class, ParametersJunit5Test.class,
RepsitoryJpaTest.class, RepsitoryTest.class, ServiceTest.class, WebTest.class})
public class DemoTest {}
\ No newline at end of file
import demo.*;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({DynamicTests.class, MockMvcTests.class, MvcTests.class,
ParametersJunit4Tests.class, ParametersJunit5Tests.class,
RepsitoryJpaTests.class, RepsitoryTests.class, ServiceTests.class, WebTests.class})
public class DemoTests {}
\ No newline at end of file
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import repsitory.UserAuthorizedRepsitoryTest;
import service.UserAuthorizedServiceTest;
import web.UserAuthorizedControllerTest;
@RunWith(Suite.class)
@Suite.SuiteClasses({UserAuthorizedRepsitoryTest.class, UserAuthorizedServiceTest.class, UserAuthorizedControllerTest.class})
public class UserAuthorizedTest {}
\ No newline at end of file
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import repsitory.UserAuthorizedRepsitoryTests;
import service.UserAuthorizedServiceTests;
import web.UserAuthorizedControllerTests;
@RunWith(Suite.class)
@Suite.SuiteClasses({UserAuthorizedRepsitoryTests.class, UserAuthorizedServiceTests.class, UserAuthorizedControllerTests.class})
public class UserAuthorizedTests {}
\ No newline at end of file
......@@ -2,12 +2,11 @@ package common;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import java.util.stream.Collectors;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.util.AESUtil;
import cn.quantgroup.xyqb.util.AesUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.RandomStringUtils;
import org.junit.Assert;
......@@ -19,8 +18,8 @@ import cn.quantgroup.xyqb.util.ValidationUtil;
@Slf4j
@RunWith(JUnit4.class)
public class TestJdk8 {
final static String RANDOM_CHARS = "0123456789";
public class Jdk8Test {
private final static String RANDOM_CHARS = "0123456789";
@Test
public void testString() {
......@@ -39,7 +38,7 @@ public class TestJdk8 {
@Test
public void wechatContent() {
String userId = String.valueOf(50963791);
String content = AESUtil.encryptAndBase64Encode(userId, Constants.AES_KEY);
String content = AesUtil.encryptAndBase64Encode(userId, Constants.AES_KEY);
log.info("50963791:{}", content);
}
......@@ -51,7 +50,8 @@ public class TestJdk8 {
@Test
public void random() {
for(int i=0; i<10; i++){
int count = 10;
for(int i=0; i<count; i++){
log.info("{}-random:{}", i, RandomStringUtils.random(6, RANDOM_CHARS));
}
}
......
package common;
import cn.quantgroup.xyqb.util.encrypt.Md5Util;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@Slf4j
@RunWith(JUnit4.class)
public class Md5Test {
private final static String PWD = "123456";
@Test
public void test() {
log.info("pwd:{},Md5Util:{}", PWD, Md5Util.build(PWD));
}
}
......@@ -9,7 +9,7 @@ import cn.quantgroup.xyqb.util.ValidationUtil;
@Slf4j
@RunWith(JUnit4.class)
public class TestValidationUtil {
public class ValidationUtilTest {
public static void main(String[] args){
String[][] contacts = {
......
......@@ -8,7 +8,7 @@ import org.springframework.test.context.junit4.AbstractTransactionalJUnit4Spring
* @author renwc
* @date 2018-01-05
*/
public abstract class BaseParametersTests extends AbstractTransactionalJUnit4SpringContextTests {
public abstract class BaseParametersTest extends AbstractTransactionalJUnit4SpringContextTests {
private TestContextManager testContextManager;
@Before
public void setUpContext() throws Exception {
......
......@@ -31,7 +31,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@RunWith(SpringRunner.class)
@WebMvcTest({UserController.class})
@ContextConfiguration(classes = {JpaConfig.class, RedisConfig.class}, initializers = ApolloPropertySourceInitializer.class)
public class MockMvcTests {
public class MockMvcTest {
@Resource
private MockMvc mvc;
@MockBean
......
......@@ -26,10 +26,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Bootstrap.class)
@ContextConfiguration(initializers = ApolloPropertySourceInitializer.class)
public class MvcTests {
public class MvcTest {
private MockMvc mvc;
@Resource
WebApplicationContext webApplicationConnect;
private WebApplicationContext webApplicationConnect;
@Before
public void setUp() throws JsonProcessingException {
......
......@@ -15,10 +15,10 @@ import java.util.Collection;
*/
@Tag("Parameters")
@RunWith(value = Parameterized.class)
public class ParametersJunit4Tests {
public class ParametersJunit4Test {
private String key;
private int value;
public ParametersJunit4Tests(String key, int value) {
public ParametersJunit4Test(String key, int value) {
this.key = key;
this.value = value;
}
......
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