Commit 435fc48c authored by 朱劲松​'s avatar 朱劲松​

refactor: just code refactor.

parent 6e4b8416
......@@ -10,7 +10,7 @@ public enum IncomeEnum {
CASH_AND_PAY_CARD("混合");
private String desc;
private IncomeEnum(String desc){
private IncomeEnum(String desc) {
this.desc = desc;
}
}
\ No newline at end of file
......@@ -16,7 +16,7 @@ public enum IncomeRangeEnum {
private String desc;
private IncomeRangeEnum(String desc){
private IncomeRangeEnum(String desc) {
this.desc = desc;
}
......
......@@ -26,47 +26,87 @@ public interface Constants {
Long VERIFICATION_CODE_FINITE_COUNT = 3L;
String X_AUTH_TOKEN = "x-auth-token";
/** 登录账号/手机号参数名 */
/**
* 登录账号/手机号参数名
*/
String PHONE_NO = "phoneNo";
/** 微信标识参数名 */
/**
* 微信标识参数名
*/
String WECHAT_OPEN_ID = "wechat_open_id";
// -- Start -- IPV4安全策略常量组
/** 账密不匹配错误 - 按账号计数 */
/**
* 账密不匹配错误 - 按账号计数
*/
String REDIS_PASSWORD_ERROR_COUNT = "password_error_count:";
/** 账密不匹配错误 - 按IP计数 */
/**
* 账密不匹配错误 - 按IP计数
*/
String REDIS_PASSWORD_ERROR_COUNT_FOR_IPV4 = "password_error_count_4_ipv4:";
/** 账密匹配成功 - 按IP计数 */
/**
* 账密匹配成功 - 按IP计数
*/
String REDIS_PASSWORD_SUCCESS_COUNT_FOR_IPV4 = "password_success_count_4_ipv4:";
/** 账密安全策略 - 白名单 */
/**
* 账密安全策略 - 白名单
*/
String IPV4_LOCK_WHITE = "lock_ipv4:white:";
/** 账密安全策略 - 黑名单 */
/**
* 账密安全策略 - 黑名单
*/
String IPV4_LOCK_BLACK = "lock_ipv4:black:";
/** 账密安全策略 - 锁机制自定义参数 - 锁定分钟数 */
/**
* 账密安全策略 - 锁机制自定义参数 - 锁定分钟数
*/
String IPV4_LOCK_MINUTES_REDIS = "lock_ipv4:minutes:";
/** 账密安全策略 - 锁机制自定义参数 - 锁开关阈值 */
/**
* 账密安全策略 - 锁机制自定义参数 - 锁开关阈值
*/
String IPV4_LOCK_ON_COUNTS_REDIS = "lock_ipv4:on_counts:";
/** 账密安全策略 - 锁机制 - IPV4锁 */
/**
* 账密安全策略 - 锁机制 - IPV4锁
*/
String IPV4_LOCK = "lock_ipv4:";
/** 账密不匹配错误 - 锁机制默认参数 - 锁定分钟数 */
/**
* 账密不匹配错误 - 锁机制默认参数 - 锁定分钟数
*/
Long IPV4_FAILED_LOCK_MINUTES = 3 * 60L;
/** 账密不匹配错误 - 锁机制默认参数 - 计数周期 */
/**
* 账密不匹配错误 - 锁机制默认参数 - 计数周期
*/
Long IPV4_FAILED_COUNT_MINUTES = 1L;
/** 账密不匹配错误 - 锁机制默认参数 - 锁开关阈值 */
/**
* 账密不匹配错误 - 锁机制默认参数 - 锁开关阈值
*/
Long IPV4_LOCK_ON_FAILED_COUNTS = 60L;
/** 账密匹配成功 - 锁机制默认参数 - 锁定分钟数 */
/**
* 账密匹配成功 - 锁机制默认参数 - 锁定分钟数
*/
Long IPV4_SUCCESS_LOCK_MINUTES = 30L;
/** 账密匹配成功 - 锁机制默认参数 - 计数周期 */
/**
* 账密匹配成功 - 锁机制默认参数 - 计数周期
*/
Long IPV4_SUCCESS_COUNT_MINUTES = 1 * 60L;
/** 账密匹配成功 - 锁机制默认参数 - 锁开关阈值 */
/**
* 账密匹配成功 - 锁机制默认参数 - 锁开关阈值
*/
Long IPV4_LOCK_ON_SUCCESS_COUNTS = 40L;
/** 危险期 - 起始时间(Hour) */
/**
* 危险期 - 起始时间(Hour)
*/
int DANGEROUS_TIME_START = 22;
/** 危险期 - 结束时间(Hour) */
/**
* 危险期 - 结束时间(Hour)
*/
int DANGEROUS_TIME_END = 6;
/** 安全策略参数设置 - 秘钥 - 口令 */
/**
* 安全策略参数设置 - 秘钥 - 口令
*/
String CLEAR_LOCK_FOR_IPV4 = "x-clear-lock-11241842-y";
/** 安全策略参数设置 - 私钥 */
/**
* 安全策略参数设置 - 私钥
*/
String CLEAR_LOCK_FOR_IPV4_KEY = "lhp.family.dwy.sjs.yym.cxy.cpg";
// -- End -- IPV4安全策略常量组
/**
......@@ -99,20 +139,28 @@ public interface Constants {
String AES_KEY = "ScnmRBhuQpo9kBdn";
// -- Start -- 验证码常量组
int GT_CAPTCHA_VALIDATE_SUCCESS =1;
int GT_CAPTCHA_VALIDATE_SUCCESS = 1;
String GT_UNIQUE_KEY = "uniqueKey";
String FN_GEETEST_CHALLENGE = "geetest_challenge";
String FN_GEETEST_VALIDATE = "geetest_validate";
String FN_GEETEST_SECCODE = "geetest_seccode";
String QG_CAPTCHA_ID = "captchaId";
String QG_CAPTCHA_VALUE = "captchaValue";
/** 客户端类型参数名 */
/**
* 客户端类型参数名
*/
String CLIENT_TYPE = "clientType";
/** 验证类型请求参数名 */
/**
* 验证类型请求参数名
*/
String VERIFY_PARAM = "verifyType";
/** 验证类型 - 极验 */
/**
* 验证类型 - 极验
*/
String VERIFY_TYPE_GT = "gt";
/** 验证类型 - 量化派图形验证 */
/**
* 验证类型 - 量化派图形验证
*/
String VERIFY_TYPE_QG = "qg";
// -- End -- 验证码常量组
}
......@@ -31,11 +31,11 @@ public class IpValidateAdvisor {
@Around("whiteIpMatch()")
private Object doWhiteIpMatch(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 客户端IP
String clientIp = IPUtil.getRemoteIP(request);
// 白名单
if(IPUtil.whiteOf(clientIp)){
if (IPUtil.whiteOf(clientIp)) {
return pjp.proceed();
}
IPUtil.logIp(LOGGER, request);
......
......@@ -24,13 +24,15 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.UUID;
/**
* 限次图形验证码校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-07
......@@ -83,13 +85,13 @@ public class CaptchaFiniteValidateAdvisor {
private Object doCapchaValidate(ProceedingJoinPoint pjp) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
Map<String, String> phonePasswordMap = getHeaderParam(request);
if(phonePasswordMap == null || phonePasswordMap.isEmpty()){
if (phonePasswordMap == null || phonePasswordMap.isEmpty()) {
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}
// 当前用户手机号
String phoneNo = phonePasswordMap.get(Constants.PHONE_NO);
Long countErrorByPhone = getCount(phoneNo);
if(countErrorByPhone == null){
if (countErrorByPhone == null) {
LOGGER.info("用户名或密码不正确, phoneNo={}, countErrorByPhone={}, clientIp={}", phoneNo, countErrorByPhone, IPUtil.getRemoteIP(request));
return JsonResult.buildErrorStateResult("用户名或密码不正确", null);
}
......@@ -142,8 +144,8 @@ public class CaptchaFiniteValidateAdvisor {
return Long.valueOf(countString);
}
private final static String getKey(String phoneNo){
if(StringUtils.isBlank(phoneNo)){
private final static String getKey(String phoneNo) {
if (StringUtils.isBlank(phoneNo)) {
return null;
}
return Constants.REDIS_PASSWORD_ERROR_COUNT + phoneNo;
......@@ -166,7 +168,7 @@ public class CaptchaFiniteValidateAdvisor {
byte[] buf = Base64.decodeBase64(credential);
credential = new String(buf, Charset.forName("UTF-8"));
String[] credentialArr = credential.split(":");
boolean headerParamValid = credentialArr.length==2;
boolean headerParamValid = credentialArr.length == 2;
if (!headerParamValid) {
LOGGER.info("参数无效, credential:{}", credential);
return null;
......
......@@ -4,6 +4,7 @@ import java.lang.annotation.*;
/**
* 限次的图形验证码校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-07
......
......@@ -6,7 +6,6 @@ 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.PasswordUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
......@@ -39,7 +38,8 @@ public class CaptchaNewValidateAdvisor {
* 图形验证码切面
*/
@Pointcut("@annotation(cn.quantgroup.xyqb.aspect.captcha.CaptchaNewValidator)")
private void needCaptchaValidate(){}
private void needCaptchaValidate() {
}
/**
* 在受图形验证码保护的接口方法执行前, 校验图形验证码
......@@ -53,12 +53,12 @@ public class CaptchaNewValidateAdvisor {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 验证码类别:gt - 极验,qg - 量化派图形验证
if (Objects.equals(Constants.VERIFY_TYPE_GT, request.getParameter(Constants.VERIFY_PARAM))) {
if(StringUtils.isBlank(request.getParameter(Constants.FN_GEETEST_CHALLENGE))){
if (StringUtils.isBlank(request.getParameter(Constants.FN_GEETEST_CHALLENGE))) {
return JsonResult.buildErrorStateResult("操作过快,请稍后重试", "");
}
if(gtValid(request)){
if (gtValid(request)) {
return pjp.proceed();
}else{
} else {
return JsonResult.buildErrorStateResult("验证码不正确", "");
}
} else {
......@@ -72,6 +72,7 @@ public class CaptchaNewValidateAdvisor {
/**
* 极验校验
*
* @param request
* @return
* @throws Throwable
......@@ -89,6 +90,7 @@ public class CaptchaNewValidateAdvisor {
/**
* 量化派图形码校验
*
* @param request
* @return
* @throws Throwable
......
......@@ -18,7 +18,8 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.Objects;
import java.util.Set;
/**
* 免密访问校验切面
......@@ -38,7 +39,8 @@ public class PasswordFreeAccessValidateAdvisor {
* 免密访问校验切面
*/
@Pointcut("@annotation(cn.quantgroup.xyqb.aspect.limit.PasswordFreeAccessValidator)")
private void passwordFreeAccess() {}
private void passwordFreeAccess() {
}
/**
* 执行免密访问校验
......@@ -58,20 +60,21 @@ public class PasswordFreeAccessValidateAdvisor {
/**
* 校验免密访问
* 规则:token 与 身份标记(phoneNo、userId匹配)
*
* @return True or False
*/
private boolean tokenValid(HttpServletRequest request) {
Objects.requireNonNull(request, "无效请求");
String clientIp = IPUtil.getRemoteIP(request);
Set<String> paramKeys = request.getParameterMap().keySet();
if(!paramKeys.contains(Constants.PHONE_NO) && !paramKeys.contains(USER_ID)){
if (!paramKeys.contains(Constants.PHONE_NO) && !paramKeys.contains(USER_ID)) {
LOGGER.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)){
if (StringUtils.isBlank(phoneNo) && StringUtils.isBlank(userId)) {
LOGGER.info("非法请求 - 缺少参数, phoneNo={}, userId={}, clientIp={}", phoneNo, userId, clientIp);
return false;
}
......@@ -83,20 +86,20 @@ public class PasswordFreeAccessValidateAdvisor {
}
// 当前session
SessionStruct session = XyqbSessionContextHolder.getXSessionFromRedis(token);
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())){
if (Objects.isNull(session) || Objects.isNull(session.getValues()) || Objects.isNull(session.getValues().getUser())) {
LOGGER.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())){
if (Objects.isNull(user.getId()) && StringUtils.isBlank(user.getPhoneNo())) {
LOGGER.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) {
if (!valid) {
LOGGER.info("非法请求 - 身份不匹配, token={}, phoneNo=({},{}), userId=({},{}), clientIp={}", token, phoneNo, user.getPhoneNo(), userId, user.getId(), clientIp);
}
return valid;
......
......@@ -4,6 +4,7 @@ import java.lang.annotation.*;
/**
* 免密访问校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-21
......
......@@ -23,6 +23,7 @@ import java.util.Objects;
/**
* 密码错误限次的校验
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-23
......@@ -57,26 +58,26 @@ public class PasswordErrorFiniteValidateAdvisor {
// 客户端IP
String clientIp = IPUtil.getRemoteIP(request);
// 白名单
if(IPUtil.whiteOf(clientIp)){
if (IPUtil.whiteOf(clientIp)) {
return pjp.proceed();
}
// 补充白名单
if(redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_WHITE, clientIp)){
if (redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_WHITE, clientIp)) {
return pjp.proceed();
}
// 入口服务器IP
if(StringUtils.startsWith(clientIp, "139.198.")){
if (StringUtils.startsWith(clientIp, "139.198.")) {
return pjp.proceed();
}
// 黑名单
if(redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_BLACK, clientIp)){
if (redisTemplate.opsForSet().isMember(Constants.IPV4_LOCK_BLACK, clientIp)) {
IPUtil.logIp(LOGGER, request);
LOGGER.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)){
if (Objects.equals(Boolean.TRUE.toString(), lock)) {
IPUtil.logIp(LOGGER, request);
LOGGER.info("Lock_ipv4: locked ip access:{}", clientIp);
return JsonResult.buildErrorStateResult("登录失败", null);
......@@ -84,7 +85,7 @@ public class PasswordErrorFiniteValidateAdvisor {
return pjp.proceed();
}
private final static String getLockIpv4Key(String ipv4){
private final static String getLockIpv4Key(String ipv4) {
return Constants.IPV4_LOCK + ipv4;
}
......
......@@ -4,6 +4,7 @@ import java.lang.annotation.*;
/**
* 密码错误限次的校验标记
*
* @author 任文超
* @version 1.0.0
* @since 2017-11-23
......
......@@ -37,14 +37,14 @@ public class LogCallHttpAspect {
public Object record(ProceedingJoinPoint pjp) throws Throwable {
Object result = pjp.proceed();
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if(Objects.nonNull(attrs)){
if (Objects.nonNull(attrs)) {
try {
HttpServletRequest request = attrs.getRequest();
String remoteIP = IPUtil.getRemoteIP(request);
LogCallHttpAspect logCallHttpAspect = ApplicationContextHolder.getBean(LogCallHttpAspect.class);
// 异步记录日志
logCallHttpAspect.asyncRecordIt(pjp,result,remoteIP);
}catch (Exception e){
logCallHttpAspect.asyncRecordIt(pjp, result, remoteIP);
} catch (Exception e) {
LOGGER.error("打印http请求日志出错", e);
}
}
......@@ -53,16 +53,17 @@ public class LogCallHttpAspect {
/**
* 异步记录日志
*
* @param pjp
* @param result
* @param remoteIP
*/
@Async("logExecutor")
public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP){
public void asyncRecordIt(ProceedingJoinPoint pjp, Object result, String remoteIP) {
Object[] args = pjp.getArgs();
String methodName = pjp.getSignature().getName();
String targetName = pjp.getTarget().getClass().getName();
LOGGER.info("http api is called,from IP:[{}],method :[{}],args:[{}],response:[{}]",remoteIP,targetName.concat(".").concat(methodName),args,result);
LOGGER.info("http api is called,from IP:[{}],method :[{}],args:[{}],response:[{}]", remoteIP, targetName.concat(".").concat(methodName), args, result);
}
}
......@@ -4,7 +4,6 @@ package cn.quantgroup.xyqb.config.data;
* Created by Miraculous on 2016/11/16.
*/
import cn.quantgroup.xyqb.util.ApplicationContextHolder;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Value;
......
......@@ -86,6 +86,7 @@ public class HttpConfig {
addFormatters(conversionService);
return conversionService;
}
@Bean
public ConverterRegistry integrationConversionService() {
FormattingConversionService conversionService = new DefaultFormattingConversionService();
......@@ -96,7 +97,7 @@ public class HttpConfig {
private void addFormatters(FormattingConversionService conversionService) {
IntegerToEnumConverterFactory factory = new IntegerToEnumConverterFactory();
conversionService.removeConvertible(String.class,Enum.class);
conversionService.removeConvertible(String.class, Enum.class);
conversionService.addConverterFactory(factory);
}
......
......@@ -9,7 +9,7 @@ public class MyWebMvcConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addFormatters(FormatterRegistry registry) {
registry.removeConvertible(String.class,Enum.class);
registry.removeConvertible(String.class, Enum.class);
registry.addConverterFactory(new IntegerToEnumConverterFactory());
}
......
package cn.quantgroup.xyqb.config.mq;
import cn.quantgroup.xyqb.service.mq.IVestService;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
......@@ -58,28 +50,33 @@ public class LoanVestMQConfig {
connectionFactory.setPublisherConfirms(false);
return connectionFactory;
}
@Primary
@Bean(name= "loanVestAmqpAdmin")
@Bean(name = "loanVestAmqpAdmin")
public AmqpAdmin loanVestAdmin(@Qualifier("vestFactory") ConnectionFactory vestFactory) {
return new RabbitAdmin(vestFactory);
}
@Primary
@Bean(name = "loanVestExchange")
public FanoutExchange loanVestExchange() {
return new FanoutExchange(loanVestExchange);
}
@Primary
@Bean(name = "loanVestQueue")
public Queue loanVestQueue() {
return new Queue(queueName);
}
@Primary
@Bean(name = "loanVestBinding")
public Binding bindingLoanVest(@Qualifier("loanVestAmqpAdmin")AmqpAdmin loanVestAdmin, @Qualifier("loanVestQueue")Queue loanVestQueue, @Qualifier("loanVestExchange")FanoutExchange loanVestExchange) {
public Binding bindingLoanVest(@Qualifier("loanVestAmqpAdmin") AmqpAdmin loanVestAdmin, @Qualifier("loanVestQueue") Queue loanVestQueue, @Qualifier("loanVestExchange") FanoutExchange loanVestExchange) {
Binding binding = BindingBuilder.bind(loanVestQueue).to(loanVestExchange);
loanVestAdmin.declareBinding(binding);
return binding;
}
@Primary
@Bean(name = "rabbitTemplate")
public RabbitTemplate loanVestTemplate(@Qualifier("vestFactory") ConnectionFactory vestFactory) {
......
package cn.quantgroup.xyqb.config.mq;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
......@@ -13,7 +9,6 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
/**
* Created by xuran on 2017/9/7.
......@@ -43,7 +38,6 @@ public class RegisterMqConfig {
private String virtualHost;
@Bean(name = "registerMqFactory")
public ConnectionFactory registerMqFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
......@@ -59,7 +53,7 @@ public class RegisterMqConfig {
return connectionFactory;
}
@Bean(name= "registerMqAmqpAdmin")
@Bean(name = "registerMqAmqpAdmin")
public AmqpAdmin registerMqAmqpAdmin(@Qualifier("registerMqFactory") ConnectionFactory registerMqFactory) {
return new RabbitAdmin(registerMqFactory);
}
......@@ -75,7 +69,7 @@ public class RegisterMqConfig {
}
@Bean(name = "registerMqBinding")
public Binding registerMqBinding(@Qualifier("registerMqAmqpAdmin")AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue")Queue registerMqQueue, @Qualifier("registerMqExchange")FanoutExchange registerMqExchange) {
public Binding registerMqBinding(@Qualifier("registerMqAmqpAdmin") AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue") Queue registerMqQueue, @Qualifier("registerMqExchange") FanoutExchange registerMqExchange) {
Binding binding = BindingBuilder.bind(registerMqQueue).to(registerMqExchange);
registerMqAmqpAdmin.declareBinding(binding);
return binding;
......@@ -100,7 +94,7 @@ public class RegisterMqConfig {
}
@Bean(name = "registerMqBinding4Gdt")
public Binding registerMqBinding4Gdt(@Qualifier("registerMqAmqpAdmin")AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue4Gdt")Queue registerMqQueue4Gdt, @Qualifier("registerMqExchange4Gdt")FanoutExchange registerMqExchange4Gdt) {
public Binding registerMqBinding4Gdt(@Qualifier("registerMqAmqpAdmin") AmqpAdmin registerMqAmqpAdmin, @Qualifier("registerMqQueue4Gdt") Queue registerMqQueue4Gdt, @Qualifier("registerMqExchange4Gdt") FanoutExchange registerMqExchange4Gdt) {
Binding binding = BindingBuilder.bind(registerMqQueue4Gdt).to(registerMqExchange4Gdt);
registerMqAmqpAdmin.declareBinding(binding);
return binding;
......
......@@ -18,6 +18,7 @@ public class AsyncConfig {
/**
* 生成线程池
*
* @param corePoolSize
* @param maxPoolSize
* @param queueCapacity
......@@ -37,14 +38,16 @@ public class AsyncConfig {
executor.setWaitForTasksToCompleteOnShutdown(waitForCompleteOnShutdown);
executor.setThreadNamePrefix(prefix);
executor.initialize();
return executor ;
return executor;
}
/**
* 日志线程池
*
* @return
*/
@Bean(name = "logExecutor")
public Executor loanMqExecutor(){
public Executor loanMqExecutor() {
return generateThreadPoolTaskExecutor(100, 2000, 2000, true, 30, true, "loanMqExecutor-");
}
}
......@@ -54,6 +54,7 @@ public class ExceptionHandlingController implements IBaseController {
/**
* 用户不存在异常
*
* @param unee
* @return
*/
......@@ -66,6 +67,7 @@ public class ExceptionHandlingController implements IBaseController {
/**
* 微信关联异常
*
* @param wrue
* @return
*/
......@@ -78,6 +80,7 @@ public class ExceptionHandlingController implements IBaseController {
/**
* 其他全局异常
*
* @param e
* @return
*/
......
......@@ -8,7 +8,6 @@ import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
......@@ -16,6 +15,7 @@ import java.util.Objects;
import static cn.quantgroup.xyqb.session.XyqbSessionContextHolder.getXSession;
import static cn.quantgroup.xyqb.session.XyqbSessionContextHolder.getXSessionFromRedis;
/**
* Created by Miraculous on 15/7/5.
*/
......@@ -43,7 +43,7 @@ public interface IBaseController {
return session.getValues().getUser();
}
default SessionStruct getCurrentSessionFromRedis(){
default SessionStruct getCurrentSessionFromRedis() {
return getXSessionFromRedis();
}
......@@ -68,7 +68,7 @@ public interface IBaseController {
HashMap<String, String> map = new HashMap<>();
while (headerNames.hasMoreElements()) {
String key = headerNames.nextElement();
if(Objects.equals("authorization", key)){
if (Objects.equals("authorization", key)) {
continue;
}
map.put(key, request.getHeader(key));
......
......@@ -4,8 +4,6 @@ import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaValidator;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.thirdparty.jcaptcha.AbstractManageableImageCaptchaService;
import java.util.*;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -17,6 +15,9 @@ import javax.servlet.http.HttpServletRequest;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
/**
* 类名称:ImgCaptchaController
......@@ -59,6 +60,7 @@ public class ImageCaptchaController {
data.put("image", String.format(IMG_BASE64_PATTREN, imageBase64));
return JsonResult.buildSuccessResult("", data);
}
/**
* 图片验证码验证
* 注意:本方法有中间层在用,用于QG图形验证码检验
......
package cn.quantgroup.xyqb.controller.external.captcha;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaNewValidator;
import cn.quantgroup.xyqb.aspect.logcaller.LogHttpCaller;
import cn.quantgroup.xyqb.model.ClientType;
import cn.quantgroup.xyqb.model.JsonResult;
......@@ -18,7 +17,10 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
/**
* @author xufei on 2018/1/30.
......@@ -52,17 +54,17 @@ public class NewCaptchaController {
Map<String, String> data = new HashMap<String, String>();
Map<String, String> imgMap = null;
// 优先获取极验
if(!Boolean.valueOf(geetestClose)){
if (!Boolean.valueOf(geetestClose)) {
imgMap = geetestCaptchaService.fetchGeetestCaptcha(keyMd5, remoteIp, ClientType.valueByName(clientType));
data.put(Constants.VERIFY_PARAM, Constants.VERIFY_TYPE_GT);
}
// 备选方案:量化派图形验证码
if(Objects.isNull(imgMap) || imgMap.isEmpty()){
if (Objects.isNull(imgMap) || imgMap.isEmpty()) {
imgMap = quantgroupCaptchaService.fetchQuantgroupCaptcha(request.getLocale());
data.put(Constants.VERIFY_PARAM, Constants.VERIFY_TYPE_QG);
}
// 返回结果
if(Objects.isNull(imgMap) || imgMap.isEmpty()){
if (Objects.isNull(imgMap) || imgMap.isEmpty()) {
return JsonResult.buildErrorStateResult("获取验证码失败", "");
}
// 填充数据并返回
......
......@@ -17,7 +17,7 @@ public class HelloController {
@RequestMapping("/hello")
public String hello(HttpServletRequest request) {
String ip = IPUtil.getRemoteIP(request);
if(ip.startsWith("192.168.12.")){
if (ip.startsWith("192.168.12.")) {
log.error("测试:", new Exception("Sentry捕获异常"));
}
return "ok";
......
......@@ -7,8 +7,10 @@ import cn.quantgroup.motan.vo.UserSysResult;
import cn.quantgroup.user.enums.*;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.entity.*;
import cn.quantgroup.xyqb.model.*;
import cn.quantgroup.xyqb.model.IdCardInfo;
import cn.quantgroup.xyqb.model.IdType;
import cn.quantgroup.xyqb.model.LoginProperties;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.session.LoginInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.api.IUserApiService;
......@@ -128,7 +130,7 @@ public class MotanUserServiceImpl implements UserMotanService {
}
user.setUpdatedAt(now);
user.setUuid(userBean.getUuid());
user.setRegisteredFrom(null==userBean.getRegisteredFrom()?0L:userBean.getRegisteredFrom());
user.setRegisteredFrom(null == userBean.getRegisteredFrom() ? 0L : userBean.getRegisteredFrom());
User saveUser = userService.saveUser(user);
return returnSuccessValue(fromUser(saveUser));
}
......@@ -276,7 +278,7 @@ public class MotanUserServiceImpl implements UserMotanService {
log.info("第三方用户登录, loginFrom:{}, requestIp:{}", appLoginParam.getRegisterFrom(), requestIp);
User user = userService.findByPhoneInDb(appLoginParam.getPhoneNo());
if (user == null) {
user = userRegisterService.register(appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getIdNo(), appLoginParam.getName(),appLoginParam.getChannelId());
user = userRegisterService.register(appLoginParam.getRegisterFrom(), appLoginParam.getPhoneNo(), appLoginParam.getIdNo(), appLoginParam.getName(), appLoginParam.getChannelId());
}
if (user == null) {
return returnErrorValue("账户或者密码错误");
......@@ -349,7 +351,8 @@ public class MotanUserServiceImpl implements UserMotanService {
String jsonContacts = JSON.toJSONString(contacts);
List<Contact> contactList = null;
try {
contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>(){});
contactList = MAPPER.readValue(jsonContacts, new TypeReference<List<Contact>>() {
});
} catch (Exception e) {
log.error("联系人列表转换错误", e);
return returnErrorValue("联系人转换错误");
......@@ -361,7 +364,8 @@ public class MotanUserServiceImpl implements UserMotanService {
}
}
List<Contact> result = contactService.save(userId, contactList);
List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>(){});
List<XContact> xResult = convertObject(JSON.toJSONString(result), new TypeReference<List<XContact>>() {
});
return returnSuccessValue(xResult);
}
......@@ -471,7 +475,7 @@ public class MotanUserServiceImpl implements UserMotanService {
}
User user = userService.findById(userId);
if (null == user) {
throw new RuntimeException("未查询到该用户,用户id:"+userId);
throw new RuntimeException("未查询到该用户,用户id:" + userId);
}
user.setEnable(false);
user.setUpdatedAt(new Timestamp(System.currentTimeMillis()));
......@@ -541,7 +545,7 @@ public class MotanUserServiceImpl implements UserMotanService {
}
private XUserExtInfo fromUserExtInfo(UserExtInfo userExtInfo) {
return null==userExtInfo?null:userExtInfo.toXUserExtInfo();
return null == userExtInfo ? null : userExtInfo.toXUserExtInfo();
}
@Override
......@@ -644,7 +648,7 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override
public UserSysResult<XLoginInfo> getLoginInfo(String token) {
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token);
if(null != sessionStruct) {
if (null != sessionStruct) {
log.info("从用户中心获取到了用户登录信息:phone:[{}]", sessionStruct.getValues().getUser().getPhoneNo());
XLoginInfo loginInfo = new XLoginInfo();
loginInfo.setUser(sessionStruct.getValues().getUser().toXUser());
......@@ -700,10 +704,10 @@ public class MotanUserServiceImpl implements UserMotanService {
@Override
public UserSysResult<Map<Long, String>> findPhoneByUserIds(List<Long> userIds) {
if(!CollectionUtils.isEmpty(userIds) && userIds.size()<=500) {
if (!CollectionUtils.isEmpty(userIds) && userIds.size() <= 500) {
Map<Long, String> userIdAndPhoneMap = userService.findPhoneByIdsInDb(userIds);
return returnSuccessValue(userIdAndPhoneMap);
}else {
} else {
return returnErrorValue("批量查询每次最多进行500条用户信息的查询");
}
}
......
......@@ -28,6 +28,7 @@ import static cn.quantgroup.xyqb.constant.UserConstant.USER_ERROR_OR_PASSWORD_ER
/**
* 第三方用户免密登录
*
* @author mengfan.feng
* @time 2015-10-27 11:41
*/
......@@ -75,10 +76,10 @@ public class AppController implements IBaseController {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
}
// Todo -- 截止2017-12-08 13:44:00只有52次调用记录,来自222(白条),最近一次:2017-11-11 12:15:53
LOGGER.info("第三方用户登录 [AppController] login --> loginFrom:{},channelId:{},btRegisterChannelId:{} requestIp:{},idNo:{},name:{}", registerFrom,channelId,btRegisterChannelId, IPUtil.getRemoteIP(request),idNo,name);
LOGGER.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);
user = userRegisterService.register(registerFrom, phoneNo, idNo, name, channelId, btRegisterChannelId);
}
if (user == null) {
return JsonResult.buildErrorStateResult(USER_ERROR_OR_PASSWORD_ERROR, null);
......@@ -132,7 +133,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);
LOGGER.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) {
user = userRegisterService.register(registerFrom, phoneNo, idNo, name, channelId, btRegisterChannelId);
......@@ -161,13 +162,13 @@ public class AppController implements IBaseController {
context.setCreatedFrom(sessionStruct.getValues().getLoginProperties().getCreatedFrom());
context.setAppChannel(appChannel);
loginInfo.setLoginContext(context);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel,channelId);
LOGGER.info("第三方用户获取信息登录成功 [AppController] loginSuper --> loginFrom:{}, phoneNo:{},appChannel:{},channelId:{}", registerFrom, phoneNo, appChannel, channelId);
/*
* 部分免密渠道登录统计,用户中心不需识别,由统计平台来过滤
* 贷款导航(84660);壹账通H5(159384)
*/
user.setRegisteredFrom(registerFrom);
UserStatistics statistics = new UserStatistics(user, null,4, channelId);
UserStatistics statistics = new UserStatistics(user, null, 4, channelId);
//增加登陆统计发送
MqUtils.sendLoanVest(statistics);
......@@ -197,7 +198,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));
LOGGER.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);
......
......@@ -83,7 +83,7 @@ public class SyncUserController {
}
String phoneNo = userDetail.getPhoneNo();
User user = userService.findByPhoneWithCache(phoneNo);
if(Objects.isNull(user)){
if (Objects.isNull(user)) {
return JsonResult.buildErrorStateResult(null, null);
}
userDetail.setUserId(user.getId());
......@@ -91,16 +91,16 @@ public class SyncUserController {
* 如果已存在记录,则更新
*/
UserDetail theUserDetail = userDetailService.findByUserId(user.getId());
if(Objects.isNull(theUserDetail)){
if (Objects.isNull(theUserDetail)) {
theUserDetail = userDetailService.findByPhoneNo(phoneNo);
// 按手机号查出记录,如果userId非空,说明是存疑数据或是其他用户的信息,停止修改操作,返回失败
if(Objects.nonNull(theUserDetail) && Objects.nonNull(theUserDetail.getUserId())){
if (Objects.nonNull(theUserDetail) && Objects.nonNull(theUserDetail.getUserId())) {
return JsonResult.buildErrorStateResult("手机号已使用.", null);
}
}
if(Objects.isNull(theUserDetail)){
if (Objects.isNull(theUserDetail)) {
userDetail.setId(null);
}else {
} else {
userDetail.setId(theUserDetail.getId());
}
userDetailService.saveUserDetail(userDetail);
......
......@@ -88,23 +88,23 @@ public class UserApiController {
@RequestMapping(value = "/valid/{token}", method = RequestMethod.POST)
public JsonResult checkToken(@ApiParam(value = "sid,session的id", required = true) @PathVariable("token") String token,
@ApiParam(value = "是否延续生命期,可选参数,默认为: false - 不延续", required = false) @RequestParam(name = "prolong", required = false, defaultValue = "false") Boolean prolong) {
if(Objects.isNull(token) || !ValidationUtil.validateToken(token)){
if (Objects.isNull(token) || !ValidationUtil.validateToken(token)) {
return JsonResult.buildErrorStateResult("token invalid", token);
}
String tokenKey = Constants.SESSION_PREFIX + token;
String tokenKey2 = Constants.Session.USER_SESSION_CACHE + token;
// 判断token是否存在
boolean exist = stringRedisTemplate.hasKey(tokenKey)||stringRedisTemplate.hasKey(tokenKey2);
boolean exist = stringRedisTemplate.hasKey(tokenKey) || stringRedisTemplate.hasKey(tokenKey2);
log.info("检查token:[{}]有效性[{}],延续生命期[{}]", token, exist, prolong);
/* token存在且需要延续时,进一步判断session是否有效,有效时,自动续期 */
if(Boolean.logicalAnd(exist, prolong)){
if (Boolean.logicalAnd(exist, prolong)) {
// 获取session信息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis(token);
if(Objects.isNull(sessionStruct)) {
if (Objects.isNull(sessionStruct)) {
log.info("延续token:[{}]生命期,result:[{}],SessionStruct:{}", token, false, sessionStruct);
/* 如果没有获取到session信息则返回错误信息 */
return JsonResult.buildErrorStateResult("session invalid", token);
}else{
} else {
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
......@@ -114,9 +114,9 @@ public class UserApiController {
}
}
}
if(exist){
if (exist) {
return JsonResult.buildSuccessResult("token valid", token);
}else{
} else {
return JsonResult.buildErrorStateResult("token invalid", token);
}
}
......
......@@ -14,7 +14,6 @@ import cn.quantgroup.xyqb.service.user.IUserService;
import cn.quantgroup.xyqb.service.wechat.IWechatService;
import cn.quantgroup.xyqb.util.EmojiUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
......@@ -185,7 +184,8 @@ public class WeChatController implements IBaseController {
LOGGER.info("从微信extdata版本接口进入:{}, extData:{}", schema, extData);
HashMap<String, Object> extDataObj;
try {
extDataObj = JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>(){});
extDataObj = JSON.parseObject(extData, new TypeReference<HashMap<String, Object>>() {
});
} catch (Exception ex) {
LOGGER.error("解析extData发生错误", ex);
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
......@@ -201,6 +201,7 @@ public class WeChatController implements IBaseController {
/**
* 前端微信跳转页面
*
* @param code
* @param systemKey
* @param schema
......@@ -208,7 +209,7 @@ public class WeChatController implements IBaseController {
* @param redirect
* @param response
*/
private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, HttpServletResponse response){
private void receiveCodeWithDefault(String code, String systemKey, String schema, Long registerFrom, String redirect, HttpServletResponse response) {
// 微信跳转请求入参监控
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
LOGGER.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:code:{},systemKey:{},schema:{},registerFrom:{},redirect:{},request:{}", code, systemKey, schema, registerFrom, redirect, JSON.toJSONString(getRequestHeaderMap(request)));
......@@ -219,7 +220,7 @@ public class WeChatController implements IBaseController {
redirect = Optional.ofNullable(redirect).orElse("");
schema = StringUtils.isBlank(schema) ? getProtocol() : schema;
String domain = userUiDomain;
if(Objects.equals(schema, "https:")){
if (Objects.equals(schema, "https:")) {
domain = userUiDomainS;
}
// 从code获取token
......@@ -228,7 +229,7 @@ public class WeChatController implements IBaseController {
LOGGER.info("[WeChatController][receiveCodeWithDefault]微信授权及跳转:merchant:{},token:{}", merchant, token);
if (Objects.isNull(token) || StringUtils.isBlank(token.getOpenId())) {
// 让用户登录,不关联微信, 构造不关联微信的url
redirectNormalUrl(response, merchant, registerFrom,domain);
redirectNormalUrl(response, merchant, registerFrom, domain);
return;
}
// 获取已授权信息 - db
......@@ -249,9 +250,9 @@ public class WeChatController implements IBaseController {
String nickName = EmojiUtil.filterUnicode4(userInfo.getNickName());
userInfo.setNickName(nickName);
}
try{
try {
userInfo = wechatService.saveWechatUserInfo(userInfo);
}catch (Exception e){
} catch (Exception e) {
LOGGER.warn("微信用户首次登陆,保存userInfo异常,执行操作:Nick置为*并重新保存.", e);
userInfo.setNickName(EmojiUtil.BYTE_4_REPLACE_TEMPLATE);
userInfo = wechatService.saveWechatUserInfo(userInfo);
......@@ -288,14 +289,14 @@ public class WeChatController implements IBaseController {
Long registerFrom = null;
String redirect = null;
String schema = "http:";
if(Objects.equals("https:", request.getScheme())){
if (Objects.equals("https:", request.getScheme())) {
schema = "https:";
}
receiveCodeWithDefault(code, systemKey, schema, registerFrom, redirect, response);
}
private String createUserSession(User user, Merchant merchant, String redirect, String domain, Long registerFrom) {
LOGGER.info("[WeChatController][createUserSession]微信授权及跳转:user:{},merchant:{},redirect:{},domain:{},registerFrom:{}",user, merchant, redirect, domain, registerFrom);
LOGGER.info("[WeChatController][createUserSession]微信授权及跳转:user:{},merchant:{},redirect:{},domain:{},registerFrom:{}", user, merchant, redirect, domain, registerFrom);
if (StringUtils.isEmpty(redirect) || "redirect".equals(redirect)) {
LOGGER.info("微信登录:redirect为null,走正常流程.");
if ("baitiao".equals(merchant.getName())) {
......@@ -320,29 +321,29 @@ public class WeChatController implements IBaseController {
private String loginInWechatWithSessionCreated(User user, Merchant merchant, String target, Long channelId, String domain, Long registerFrom) {
AuthBean authBean = sessionService.createSession(channelId, registerFrom, "", user, merchant);
LOGGER.info("[WeChatController][loginInWechatWithSessionCreated]微信授权及跳转:user:{},merchant:{},target:{},channelId:{},domain:{},registerFrom:{}",user, merchant, target, channelId, domain, registerFrom);
LOGGER.info("[WeChatController][loginInWechatWithSessionCreated]微信授权及跳转:user:{},merchant:{},target:{},channelId:{},domain:{},registerFrom:{}", user, merchant, target, channelId, domain, registerFrom);
return domain + "/landing?token=" + authBean.getToken() + "&registerFrom=" + registerFrom + "&channelId=" + channelId + "&key=" + merchant.getName() + "&target=" + target;
}
private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String domain) {
String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo, registerFrom,domain);
LOGGER.info("[WeChatController][redirectWechatLoginUrlWithoutLogin]微信授权及跳转:redirectUrl:[{}]",redirectUrl);
private void redirectWechatLoginUrlWithoutLogin(HttpServletResponse response, Merchant merchant, WechatUserInfo userInfo, Long registerFrom, String domain) {
String redirectUrl = assembleWechatRedirectUrl(merchant, userInfo, registerFrom, domain);
LOGGER.info("[WeChatController][redirectWechatLoginUrlWithoutLogin]微信授权及跳转:redirectUrl:[{}]", redirectUrl);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private void redirectNormalUrl(HttpServletResponse response, Merchant merchant, Long registerFrom,String domain) {
String redirectUrl = assembleNormalRedirectUrl(merchant, registerFrom,domain);
LOGGER.info("[WeChatController][redirectNormalUrl]微信授权及跳转: redirectUrl:[{}]",redirectUrl);
private void redirectNormalUrl(HttpServletResponse response, Merchant merchant, Long registerFrom, String domain) {
String redirectUrl = assembleNormalRedirectUrl(merchant, registerFrom, domain);
LOGGER.info("[WeChatController][redirectNormalUrl]微信授权及跳转: redirectUrl:[{}]", redirectUrl);
response.setHeader("Location", redirectUrl);
response.setStatus(301);
}
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom,String domain) {
private String assembleNormalRedirectUrl(Merchant merchant, Long registerFrom, String domain) {
if ("baitiao".equals(merchant.getName())) {
if(registerFrom == 58L || registerFrom == 198L){
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom="+registerFrom;
}else{
if (registerFrom == 58L || registerFrom == 198L) {
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=" + registerFrom;
} else {
return domain + "/landing?key=baitiao&target=cashTarget5&channelId=222&registerFrom=198";
}
} else if ("wechat-pay".equals(merchant.getName())) {
......@@ -352,11 +353,11 @@ public class WeChatController implements IBaseController {
}
}
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom,String domain) {
private String assembleWechatRedirectUrl(Merchant merchant, WechatUserInfo userInfo, Long registerFrom, String domain) {
if ("baitiao".equals(merchant.getName())) {
if(registerFrom == 58L || registerFrom == 198L){
if (registerFrom == 58L || registerFrom == 198L) {
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=" + registerFrom + "&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
}else{
} else {
return domain + "/landing?key=baitiao&target=cashTarget5&registerFrom=198&channelId=222&isWechat=true&openId=" + userInfo.getOpenId();
}
} else if ("wechat-pay".equals(merchant.getName())) {
......@@ -367,11 +368,11 @@ public class WeChatController implements IBaseController {
}
@RequestMapping("/active_redirect")
public void forwardWechatRequest(HttpServletRequest request,HttpServletResponse response){
String redirectUrl = xyqbDomainStr+"/api/coupon/activity/wechat/rent_house/bargain?";
public void forwardWechatRequest(HttpServletRequest request, HttpServletResponse response) {
String redirectUrl = xyqbDomainStr + "/api/coupon/activity/wechat/rent_house/bargain?";
Enumeration<String> parameterNames = request.getParameterNames();
ImmutableList.Builder<String> builder = ImmutableList.builder();
while (parameterNames.hasMoreElements()){
while (parameterNames.hasMoreElements()) {
String name = parameterNames.nextElement();
builder.add(name.concat("=").concat(request.getParameter(name)));
}
......
......@@ -6,13 +6,9 @@ import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.UserRet;
import cn.quantgroup.xyqb.model.session.LoginInfo;
import cn.quantgroup.xyqb.model.session.SessionStruct;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import cn.quantgroup.xyqb.service.user.IUserService;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -32,7 +28,7 @@ public class AuthInfoController implements IBaseController {
@RequestMapping("/info/login")
public JsonResult loginInfo(HttpServletRequest request) {
SessionStruct sessionStruct = getCurrentSessionFromRedis();
if(null != sessionStruct) {
if (null != sessionStruct) {
log.info("从用户中心获取到了用户登录信息:phone:[{}]", sessionStruct.getValues().getUser().getPhoneNo());
LoginInfo loginInfo = new LoginInfo();
loginInfo.setUser(new UserRet(sessionStruct.getValues().getUser()));
......@@ -48,7 +44,7 @@ public class AuthInfoController implements IBaseController {
return JsonResult.buildSuccessResult("", loginInfo);
}
log.info("[/auth/info/login] 未查到用户登录信息, request-Header:{}", JSON.toJSONString(getRequestHeaderMap(request)));
return JsonResult.buildErrorStateResult("用户未登录",null);
return JsonResult.buildErrorStateResult("用户未登录", null);
}
}
......@@ -4,18 +4,13 @@ import cn.quantgroup.xyqb.controller.IBaseController;
import cn.quantgroup.xyqb.entity.Merchant;
import cn.quantgroup.xyqb.entity.MerchantConfig;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import cn.quantgroup.xyqb.model.JsonResult;
import cn.quantgroup.xyqb.model.Tuple;
import cn.quantgroup.xyqb.service.merchant.IMerchantService;
import cn.quantgroup.xyqb.service.page.IPageService;
import cn.quantgroup.xyqb.service.page.bean.PageType;
import cn.quantgroup.xyqb.service.user.IUserDetailService;
import com.google.common.collect.ImmutableMap;
import java.util.HashMap;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
......@@ -57,7 +52,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 ("xyqb".equals(key)) {
MerchantConfig merchantConfig = merchantService.findConfigByMerchantIdAndConfigName(4L, "returnUrl");
return JsonResult.buildSuccessResult("", ImmutableMap.of("type", "external", "transition", merchantConfig.getConfigValue()));
}
......
......@@ -58,14 +58,14 @@ public class UserDetailController implements IBaseController {
* 如果已存在记录,则更新
*/
UserDetail userDetail = userDetailService.findByUserId(user.getId());
if(Objects.isNull(userDetail)){
if (Objects.isNull(userDetail)) {
userDetail = userDetailService.findByPhoneNo(user.getPhoneNo());
// 按手机号查出记录,如果userId非空,说明是存疑数据或是其他用户的信息,停止修改操作,返回失败
if(Objects.nonNull(userDetail) && Objects.nonNull(userDetail.getUserId())){
if (Objects.nonNull(userDetail) && Objects.nonNull(userDetail.getUserId())) {
return JsonResult.buildErrorStateResult("手机号已使用.", null);
}
}
if(Objects.isNull(userDetail)){
if (Objects.isNull(userDetail)) {
userDetail = new UserDetail();
userDetail.setCreatedAt(now);
}
......
......@@ -43,11 +43,11 @@ public class Address implements Serializable {
private Timestamp updateAt;
@PreUpdate
public void preUpdate(){
public void preUpdate() {
this.updateAt = new Timestamp(System.currentTimeMillis());
}
public String toString(){
return province+"(省)"+city+"(市)"+district+"(区/县)"+address;
public String toString() {
return province + "(省)" + city + "(市)" + district + "(区/县)" + address;
}
}
......@@ -36,9 +36,10 @@ public class Contact implements Serializable {
/**
* 数据合法性校验
*
* @return
*/
public boolean valid(){
public boolean valid() {
return (ValidationUtil.validatePhoneNo(this.phoneNo) && ValidationUtil.validateChinese(this.name));
}
......
......@@ -57,7 +57,6 @@ public class User implements Serializable {
private static final long serialVersionUID = -1L;
public XUser toXUser() {
XUser xUser = new XUser();
xUser.setId(this.getId());
......
......@@ -16,7 +16,7 @@ public class UserAttached {
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column( name = "user_id")
@Column(name = "user_id")
private Long userId;
@Column(name = "avatar")
private String avatar;
......
......@@ -18,7 +18,7 @@ public class UserAuthorized {
@Id
@Column(name = "id")
@GeneratedValue(generator = "uuid")
@GenericGenerator(name ="uuid" , strategy = "org.hibernate.id.UUIDGenerator")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
private String id;
@Column(name = "user_uuid")
......
......@@ -46,17 +46,17 @@ public class UserBtRegister implements Serializable {
@PrePersist
public void prePersist(){
public void prePersist() {
Timestamp now = new Timestamp(System.currentTimeMillis());
this.createdAt =now;
this.updatedAt =now;
this.createdAt = now;
this.updatedAt = now;
}
@PreUpdate
public void preUpdate(){
public void preUpdate() {
Timestamp now = new Timestamp(System.currentTimeMillis());
this.createdAt =now;
this.updatedAt =now;
this.createdAt = now;
this.updatedAt = now;
}
}
package cn.quantgroup.xyqb.entity;
import cn.quantgroup.motan.retbean.XUserExtInfo;
//import cn.quantgroup.xyqb.entity.enumerate.*;
import cn.quantgroup.user.enums.*;
import lombok.Data;
......@@ -9,6 +8,8 @@ import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
//import cn.quantgroup.xyqb.entity.enumerate.*;
/**
* Created by 11 on 2016/12/30.
*/
......@@ -47,7 +48,7 @@ public class UserExtInfo implements Serializable {
@Column(name = "updated_at")
private Timestamp updateAt;
public XUserExtInfo toXUserExtInfo(){
public XUserExtInfo toXUserExtInfo() {
XUserExtInfo xUserExtInfo = new XUserExtInfo();
xUserExtInfo.setId(this.id);
xUserExtInfo.setUserId(this.userId);
......
......@@ -5,7 +5,6 @@ import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Date;
/**
......@@ -33,7 +32,7 @@ public class UserQueryLog implements Serializable {
@Column(name = "query_detail")
private String queryDetail;
@Column(name = "created_at")
private Date createdAt=new Date();
private Date createdAt = new Date();
@Transient
private String createDate;
......
......@@ -48,9 +48,10 @@ public class UserSpouse implements Serializable {
/**
* 数据合法性校验
*
* @return
*/
public boolean valid(){
public boolean valid() {
return (ValidationUtil.validatePhoneNo(this.spousePhone) && ValidationUtil.validateChinese(this.spouseName));
}
}
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.exception;
/**
* 密码错误次数达到上限异常
*
* @author 任文超
* @time 2017-11-10
*/
......
......@@ -2,6 +2,7 @@ package cn.quantgroup.xyqb.exception;
/**
* 微信关联用户异常
*
* @author 任文超
* @time 2018-04-03
*/
......
......@@ -7,8 +7,6 @@ import cn.quantgroup.xyqb.service.session.ISessionService;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
......@@ -46,10 +44,10 @@ public class RequestFilter implements Filter {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 带状态接口
if(isMatch(request)){
if (isMatch(request)) {
// 需获取session信息
SessionStruct sessionStruct = XyqbSessionContextHolder.getXSessionFromRedis();
if(Objects.isNull(sessionStruct)) {
if (Objects.isNull(sessionStruct)) {
/* 如果没有获取到session信息则返回错误信息 */
response.setStatus(401);
response.setHeader("Content-Type", "application/json;charset=utf-8");
......@@ -57,7 +55,7 @@ public class RequestFilter implements Filter {
writer.print(UNAUTH_RESULT);
writer.close();
return;
}else{
} else {
/* 延续session生命期 */
try {
sessionService.persistSession(sessionStruct.getSid(), sessionStruct.getValues());
......@@ -71,6 +69,7 @@ public class RequestFilter implements Filter {
/**
* 判断是否带状态请求
*
* @param request
* @return
*/
......
......@@ -7,6 +7,7 @@ import java.io.Serializable;
/**
* 地址信息数据模型
*
* @author renwc
* @date 2018-01-04
*/
......@@ -22,7 +23,9 @@ public class AddressModel implements Serializable {
private String district;
private String address;
private AddressModel(){}
private AddressModel() {
}
public static AddressModel entity2Model(Address entity) {
if (entity == null) {
return null;
......
......@@ -4,23 +4,26 @@ import java.util.Optional;
/**
* 验证码验证类型
*
* @author renwc
* @date 2018-02-02
*/
public enum ClientType {
APP("native"), H5("h5"), WEB("web");
ClientType(String alias){
ClientType(String alias) {
this.alias = alias;
}
private String alias;
public String getAlias(){
public String getAlias() {
return this.alias;
}
public final static ClientType valueByName(String name) {
name = Optional.ofNullable(name).orElse("").toLowerCase();
switch (name){
switch (name) {
case "app":
case "native":
return APP;
......
......@@ -9,6 +9,7 @@ import java.util.Optional;
/**
* 联系人数据模型
*
* @author renwc
* @date 2018-01-04
*/
......@@ -21,7 +22,9 @@ public class ContactModel implements Serializable {
private String relationName;
private String relation;
private ContactModel(){}
private ContactModel() {
}
public static ContactModel entity2Model(Contact entity) {
if (entity == null) {
return null;
......
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.Contact;
import cn.quantgroup.user.enums.Relation;
import cn.quantgroup.xyqb.entity.Contact;
import lombok.Data;
import org.apache.commons.collections.CollectionUtils;
......
......@@ -123,6 +123,7 @@ public class JsonResult implements Serializable {
return "JsonResult{" +
"businessCode='" + businessCode + '\'' +
", code='" + code + '\'' +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
......
......@@ -11,5 +11,5 @@ public class LoginProperties {
private Long createdFrom = 1L;
private String appChannel = "";
private String merchantName;
private Long btMerchantId =1L;
private Long btMerchantId = 1L;
}
package cn.quantgroup.xyqb.model;
import cn.quantgroup.xyqb.entity.User;
import cn.quantgroup.xyqb.entity.UserDetail;
import lombok.Data;
import java.io.Serializable;
......
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