记得上下班打卡 | git大法好,push需谨慎

Commit b783a8c1 authored by 张国柄's avatar 张国柄

+jwt sso;

+error message;
+exception handler;
+api adam;
parent b018201d
......@@ -4,16 +4,20 @@ import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.Map;
@Data
@Component("jwtValidator")
@ConfigurationProperties(prefix = "jwt")
public class JwtValidator {
private String ssoRedisKey = "adam:identity:sso:";
private String secret;
// 分钟
private Long expireTtl;
private Long refreshTtl;
private Long blacklistGracePeriod;
......@@ -58,20 +62,4 @@ public class JwtValidator {
// 设置需要解析的token
.parseClaimsJws(token).getBody();
}
public void setSecret(String secret) {
this.secret = secret;
}
public void setExpireTtl(Long expireTtl) {
this.expireTtl = expireTtl;
}
public void setRefreshTtl(Long refreshTtl) {
this.refreshTtl = refreshTtl;
}
public void setBlacklistGracePeriod(Long blacklistGracePeriod) {
this.blacklistGracePeriod = blacklistGracePeriod;
}
}
package com.liquidnet.commons.lang.util;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;
import java.util.Map;
public class CurrentUtil {
public static final String uTag = "u_Tag";
public static final String uTag = "u-tag";
public static final String uToken = "u-token";
public static String getToken() {
String authToken = ServletUtils.getRequest().getHeader(uToken);
return StringUtils.isBlank(authToken) ? null : authToken.substring(7);
}
public static Map getTokenClaims() {
return JsonUtils.fromJson(ServletUtils.getRequest().getHeader(uTag), Map.class);
......
......@@ -109,6 +109,21 @@ public final class RedisUtil {
}
/**
* 根据前缀模糊删除
*
* @param prefix Key前缀
*/
public void delKeysByPrefix(String prefix) {
if (null != prefix && prefix.trim().length() > 0) {
Set<String> keys = redisTemplate.keys(prefix.concat("*"));
if (!CollectionUtils.isEmpty(keys)) {
redisTemplate.delete(keys);
}
}
}
/**
......
/**
* $Id: PayException.java 6383 2016-04-23 03:23:29Z huangcheng $
* Copyright(C) 2014-2020 netease - easegame, All Rights Reserved.
*/
package com.liquidnet.common.exception;
import com.liquidnet.common.exception.constant.ErrorCode;
/**
*
* @author <a href="mailto:guoxinpeng@youxi.com">Huang Cheng</a>
* @version 1.0 2016年4月22日 下午6:20:42
*/
public class GlobalIdException extends LiquidnetServiceException {
/**
*
*/
private static final long serialVersionUID = 340630753524591474L;
public GlobalIdException() {
super(ErrorCode.GLOBALID_ERROR);
}
public GlobalIdException(String message) {
super(ErrorCode.GLOBALID_ERROR,message);
}
}
/**
* $Id$
* Copyright(C) 2015-2020 liquidnet - internet center, All Rights Reserved.
*/
package com.liquidnet.common.exception;
import com.liquidnet.common.exception.constant.ErrorCode;
/**
* 接口请求异常
* @author fengzheng
*/
public class InterfaceException extends LiquidnetServiceException {
private static final long serialVersionUID = -7974558728088507L;
public InterfaceException() {
super(ErrorCode.INTERFACE_ERROR);
}
}
......@@ -11,13 +11,15 @@ import com.liquidnet.common.exception.constant.ServiceErrorCode;
* @Copyright: LightNet @ Copyright (c) 2020
* @date 2020/9/21 10:37
*/
public class LiquidnetServiceException extends RuntimeException{
public class LiquidnetServiceException extends RuntimeException {
private ServiceErrorCode errorCode;
private String message;
private String url;
public LiquidnetServiceException(){}
public LiquidnetServiceException(ServiceErrorCode errorCode){
public LiquidnetServiceException() {
}
public LiquidnetServiceException(ServiceErrorCode errorCode) {
this.errorCode = errorCode;
}
......@@ -26,11 +28,12 @@ public class LiquidnetServiceException extends RuntimeException{
this.message = message;
}
public LiquidnetServiceException(ServiceErrorCode errorCode, String message){
public LiquidnetServiceException(ServiceErrorCode errorCode, String message) {
super(message);
this.errorCode = errorCode;
this.message = message;
}
public ServiceErrorCode errorCode() {
return errorCode;
}
......@@ -39,7 +42,7 @@ public class LiquidnetServiceException extends RuntimeException{
return message;
}
public LiquidnetServiceException(ServiceErrorCode errorCode, String message, String url){
public LiquidnetServiceException(ServiceErrorCode errorCode, String message, String url) {
super(message);
this.errorCode = errorCode;
this.message = message;
......
......@@ -38,35 +38,8 @@ public enum ErrorCode implements ServiceErrorCode {
ERROR_SYS_UP("-2",""),
REDIRECT("-1",""),
SUCCESS("0",""),
/**
* 服务器内部错误
*
* <b>code: 1</b>
*/
ERROR("1",""),
HTTP_FORBIDDEN("403", ""),
HTTP_RESOURCE_NOT_FOUND("404", ""),
/**
* 登录超时
*/
LOGIN_TIME_OUT("405","login timed out"),
HTTP_SYSTEM_ERROR("500", "system error"),
/**
* 非法参数
*/
ILLEGAL_ARGUMENT("400","非法参数"),
/**
* 接口异常
*/
INTERFACE_ERROR("7000",""),
GLOBALID_ERROR("7001","生成globalId 异常"),
RESPONSE_ERROE_UNKNOWN("ADAM0000001","System busy, please try again later"),
RESPONSE_ERROE_SYSTEM("ADAM0000002","System abnormal"),
RESPONSE_ERROE_BIZ("ADAM0000003","Processing failed"),
REQUEST_REPEATED_SUBMISSION("7001","Please do not submit again"),
HTTP_SYSTEM_ERROR("50000", "System busy, please try again later"),
;
......
......@@ -11,11 +11,12 @@ import java.util.List;
public class Error {
String message;
String code;
List<ErrorDetail> errors;
public Error(){
public Error() {
}
public Error(String code, String message){
public Error(String code, String message) {
this.code = code;
this.message = message;
}
......@@ -35,12 +36,4 @@ public class Error {
public void setCode(String code) {
this.code = code;
}
public List<ErrorDetail> getErrors() {
return errors;
}
public void setErrors(List<ErrorDetail> errors) {
this.errors = errors;
}
}
......@@ -33,14 +33,14 @@ public class RestControllerAdviceHandler {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResponseEntity serviceExceptionHandler(Exception rex, WebRequest request) {
logger.error("serviceExceptionHandler request : {} param:{}", request.getContextPath(), JSON.toJSONString(request.getParameterMap()));
if ( rex instanceof LiquidnetFeignException) {
logger.error("serviceExceptionHandler request:{},param:{}", request.getContextPath(), JSON.toJSONString(request.getParameterMap()));
if (rex instanceof LiquidnetFeignException) {
LiquidnetFeignException ygex = ((LiquidnetFeignException) rex);
String errorCode = ygex.errorCode().getCode();
String message = ygex.getMessage();
message = message == null ? ygex.errorCode().getMessage() : message;
logger.error("LiquidnetServiceException errorCode:{} error : {}", errorCode, ygex.getMessage());
return new ResponseEntity<Error>(new Error(errorCode,message), HttpStatus.EXPECTATION_FAILED);
return new ResponseEntity<Error>(new Error(errorCode, message), HttpStatus.OK);
}
if (rex instanceof LiquidnetServiceException) {
LiquidnetServiceException ygex = ((LiquidnetServiceException) rex);
......@@ -48,10 +48,10 @@ public class RestControllerAdviceHandler {
String message = ygex.getMessage();
message = message == null ? ygex.errorCode().getMessage() : message;
logger.error("LiquidnetServiceException errorCode:{} error : {}", errorCode, ygex.getMessage());
return new ResponseEntity<Error>(new Error(errorCode,message), HttpStatus.EXPECTATION_FAILED);
}else {
logger.error("serviceExceptionHandler : {}", rex);
return new ResponseEntity<Error>(new Error(ErrorCode.RESPONSE_ERROE_UNKNOWN.getCode(), ErrorCode.RESPONSE_ERROE_UNKNOWN.getMessage()), HttpStatus.EXPECTATION_FAILED);
return new ResponseEntity<Error>(new Error(errorCode, message), HttpStatus.OK);
} else {
logger.error("serviceExceptionHandler:{}", rex);
return new ResponseEntity<Error>(new Error(ErrorCode.HTTP_SYSTEM_ERROR.getCode(), ErrorCode.HTTP_SYSTEM_ERROR.getMessage()), HttpStatus.OK);
}
}
}
......@@ -41,7 +41,7 @@ public class BizExceptionFeignErrorDecoder implements feign.codec.ErrorDecoder {
}
} catch (IOException var4) {
var4.printStackTrace();
ex = new LiquidnetFeignException(ErrorCode.ERROR, ErrorCode.RESPONSE_ERROE_UNKNOWN.getMessage());
ex = new LiquidnetFeignException(ErrorCode.ERROR, ErrorCode.HTTP_SYSTEM_ERROR.getMessage());
}
return null != ex ? ex : feign.FeignException.errorStatus(methodKey, response);
}
......
......@@ -23,6 +23,12 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-exception-handler-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
......
package com.liquidnet.service.base;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import lombok.Data;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@Data
public class ErrorMapping {
private static final String errorMapDir = "errormap";
private static Map<String, Object> errorPropertiesMap = new HashMap<>();
static {
try {
URL url = PropertiesUtil.class.getClassLoader().getResource(errorMapDir);
if (null != url) {
File file = new File(url.getFile());
if (file.exists() && file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
if (f.isFile() && f.getName().endsWith("properties")) {
Properties props = PropertiesLoaderUtils.loadAllProperties(errorMapDir.concat("/") + f.getName());
for (Object key : props.keySet()) {
String keyStr = key.toString();
String value = props.getProperty(keyStr);
errorPropertiesMap.put(keyStr, value);
}
}
reload();
}
}
}
System.out.printf("errorPropertiesMap init count: %s\n", errorPropertiesMap.size());
private static Properties errorsProperties;
public static void reload() {
errorsProperties = new Properties();
InputStream in = ErrorMapping.class.getClassLoader().getResourceAsStream("errors.properties");
try {
errorsProperties.load(new InputStreamReader(in, StandardCharsets.UTF_8));
System.out.printf("errorsProperties init count: %s\n", errorsProperties.size());
} catch (IOException e) {
e.printStackTrace();
}
}
public static ErrorMessage get(String code) {
return ErrorMessage.instance.setCode(code).setMessage((String) errorPropertiesMap.get(code));
String value = errorsProperties != null ? errorsProperties.getProperty(code) : "-";
return ErrorMessage.getInstance().setCode(code).setMessage(value);
}
public static class ErrorMessage implements Cloneable, Serializable {
......@@ -49,7 +39,7 @@ public class ErrorMapping {
private String code;
private String message;
public ErrorMessage() {
private ErrorMessage() {
}
public String getCode() {
......
......@@ -15,7 +15,7 @@ import java.util.Properties;
public class SqlMapping {
private static final String sqlMapDir = "sqlmap";
private static Map<String, Object> sqlPropertiesMap = new HashMap<>();
private static Map<String, String> sqlPropertiesMap = new HashMap<>();
static {
try {
......@@ -42,7 +42,7 @@ public class SqlMapping {
}
}
public static Object get(String sql) {
public static String get(String sql) {
return sqlPropertiesMap.get(sql);
}
......@@ -90,9 +90,9 @@ public class SqlMapping {
/* ---------------------- ---------------------- ---------------------- */
public static String get(String sql, Object... params) {
public static String get(String sqlKey, Object... params) {
LinkedList<String> sqls = new LinkedList<>();
sqls.add(sqlPropertiesMap.get(sql).toString());
sqls.add(sqlPropertiesMap.get(sqlKey));
LinkedList<Object[]> paramsList = new LinkedList<>();
paramsList.add(params);
LinkedList<Object[]>[] args = new LinkedList[]{paramsList};
......@@ -103,9 +103,9 @@ public class SqlMapping {
return JsonUtils.toJson(sqlMessage);
}
public static String get(String sql, LinkedList<Object[]> paramsList) {
public static String get(String sqlKey, LinkedList<Object[]> paramsList) {
LinkedList<String> sqls = new LinkedList<>();
sqls.add(sqlPropertiesMap.get(sql).toString());
sqls.add(sqlPropertiesMap.get(sqlKey));
LinkedList<Object[]>[] args = new LinkedList[]{paramsList};
SqlMapping.SqlMessage sqlMessage = SqlMapping.SqlMessage.getInstance();
......
......@@ -34,15 +34,15 @@
<modules>
<module>liquidnet-common-base</module>
<module>liquidnet-common-cache</module>
<module>liquidnet-common-service-base</module>
<module>liquidnet-common-exception</module>
<module>liquidnet-common-web</module>
<!-- <module>liquidnet-common-mybatis</module>-->
<module>liquidnet-common-mq</module>
<module>liquidnet-common-feign</module>
<module>liquidnet-common-swagger</module>
<module>liquidnet-common-sharding-jdbc</module>
<module>liquidnet-common-multidb</module>
<module>liquidnet-common-web</module>
<module>liquidnet-common-swagger</module>
<module>liquidnet-common-service-base</module>
<module>liquidnet-common-feign</module>
<!-- <module>liquidnet-common-mybatis</module>-->
</modules>
<dependencies>
......
......@@ -47,6 +47,10 @@ spring:
# destination: springCloudBus.${liquidnet.info.name}.port${liquidnet.info.port}
# trace:
# enabled: true
redis:
port: ${liquidnet.redis.port}
host: ${liquidnet.redis.host}
password: ${liquidnet.redis.password}
# -----------------------------------------------------------
eureka:
# client:
......@@ -99,6 +103,8 @@ global:
ribbon:
eureka:
enabled: true # 为Ribbon禁用Eureka
ReadTimeout: 60000
SocketTimeout: 60000
#liquidnet-service-sequence:
# ribbon:
# listOfServers: 192.168.137.1:9001
......
package com.liquidnet.service.adam.common;
import com.liquidnet.common.exception.properties.ErrorCodeProperties;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* @author AnJiabin <jiabin.an@lightnet.io>
* @version V1.0
* @Description: TODO
* @class: AdamErrorCode
* @Package com.liquidnet.service.adam.constant
* @Copyright: LightNet @ Copyright (c) 2020
* @date 2020/9/22 11:43
*/
public enum AdamErrorCode {
SUCCESS("0"),
ADAM001_SYSTEM_ERROR("ADAM0010001"),
ADAM001_PARAM_ERROR("ADAM0010002"),
ADAM001_ILLEGAL_PARAM("ADAM0010003"),
ADAM001_ILLEGAL_OPERATION("ADAM0010004"),
ADAM001_OPERATION_FAILED("ADAM0010005"),
ADAM001_REPEAT_SUBMIT("ADAM0010006"),
ADAM001_VERIFYCODE_EXPIRED("ADAM0010007"),
ADAM001_VERIFYCODE_ERROR("ADAM0010008"),
ADAM001_VERIFYCODE_SENT("ADAM0010009"),
PWD_FORMAT_INVALID("ADAM0020001"),
EMAIL_FORMAT_INVALID("ADAM0020002"),
COM_HAS_SIGNED("ADAM0020003"),
EMAIL_HAS_REGIS("ADAM0020004"),
EMAIL_HAS_REGIS_VER("ADAM0020005"),
NAME_LOST("ADAM0020006"),
JOB_TITLE_LOST("ADAM0020007"),
EMAIL_LOST("ADAM0020008"),
PASSWORD_LOST("ADAM0020009"),
COMPANY_LOST("ADAM0020010"),
INVALID_AUTH_ADDRESS("ADAM0020011"),
TOKEN_EXPIRED_OR_BROKEN("ADAM0020012"),
EMAIL_NOT_REGIS("ADAM0020013"),
EMAIL_NOT_ACTIVATED("ADAM0020014"),
VERIF_NOT_PASSED("ADAM0020015"),
ADAM_USER_PW_0020016("ADAM_USER_PW_0020016"),
ILLEGAL_VERIF_CODE("ADAM0020017"),
WRONG_VERIF_CODE("ADAM0020018"),
PARAM_ERROR("ADAM0020020"),
PHONE_NUMBER_EXIST("ADAM0020021"),
ILLEGAL_PARAM("ADAM0020022"),
PASSWORD_RESET_REJECT("ADAM0020023"),
PHONE_AUTH_PASSED("ADAM0020024"),
ADAM_USER_EMAIL_REGISTERED("ADAM0020025"),
ADAM_USER_PASSWORD_FORGET_PHONE("ADAM0020026"),
ADAM_USER_PASSWORD_ERROR_5("ADAM0020027"),
ADAM_USER_PASSWORD_ERROR_7("ADAM0020028"),
ADAM_USER_HAS_BEEN_ACTIVATED("ADAM0020029"),
ADAM_USER_HAS_BEEN_REMOVED("ADAM0020030"),
// Company
ADAM_COM_0030001("ADAM_COM_0030001"),
ADAM_COM_0030002("ADAM_COM_0030002"),
ADAM_COM_0030003("ADAM_COM_0030003"),
ADAM_COM_0030004("ADAM_COM_0030004"),
ADAM_COM_0030005("ADAM_COM_0030005"),
// Account
ADAM_ACCOUNT_004001("ADAM_ACCOUNT_004001"),
ADAM_ACCOUNT_004002("ADAM_ACCOUNT_004002"),
ADAM_ACCOUNT_004003("ADAM_ACCOUNT_004003"),
ADAM_ACCOUNT_004004("ADAM_ACCOUNT_004004"),
// Wallet
ADAM_WALLET_005001("ADAM_WALLET_005001"),
ADAM_WALLET_005002("ADAM_WALLET_005002"),
ADAM_WALLET_005003("ADAM_WALLET_005003"),
ADAM_WALLET_005004("ADAM_WALLET_005004"),
ADAM_WALLET_005005("ADAM_WALLET_005005"),
// Payout
ADAM_PAYOUT_006001("ADAM_PAYOUT_006001"),
ADAM_PAYOUT_006002("ADAM_PAYOUT_006002"),
ADAM_PAYOUT_006003("ADAM_PAYOUT_006003"),
ADAM_PAYOUT_006004("ADAM_PAYOUT_006004"),
ADAM_PAYOUT_006005("ADAM_PAYOUT_006005"),
ADAM_PAYOUT_006006("ADAM_PAYOUT_006006"),
ADAM_PAYOUT_006007("ADAM_PAYOUT_006007"),
ADAM_PAYOUT_006008("ADAM_PAYOUT_006008"),
ADAM_PAYOUT_006009("ADAM_PAYOUT_006009"),
ADAM_PAYOUT_006010("ADAM_PAYOUT_006010"),
// Funding
ADAM_FUNDING_007001("ADAM_FUNDING_007001"),
// Conversion
ADAM_CONVERSION_008001("ADAM_CONVERSION_008001"),
ADAM_CONVERSION_008002("ADAM_CONVERSION_008002"),
ADAM_CONVERSION_008003("ADAM_CONVERSION_008003"),
ADAM_CONVERSION_008004("ADAM_CONVERSION_008004"),
ADAM_CONVERSION_008005("ADAM_CONVERSION_008005"),
ADAM_CONVERSION_008006("ADAM_CONVERSION_008006"),
// Transaction
ADAM_TRANSACTION_008001("ADAM_TRANSACTION_008001"),
// Administration
ADAM_ADMINISTRATION_009001("ADAM_ADMINISTRATION_009001"),
ADAM_ADMINISTRATION_009002("ADAM_ADMINISTRATION_009002"),
ADAM_ADMINISTRATION_009003("ADAM_ADMINISTRATION_009003"),
ADAM_ADMINISTRATION_009004("ADAM_ADMINISTRATION_009004"),
ADAM_ADMINISTRATION_009005("ADAM_ADMINISTRATION_009005"),
// FEGIN Account
ADAM_FEGIN_ACCOUNT_100001("ADAM_FEGIN_ACCOUNT_100001"),
// FEGIN Bank cc
ADAM_FEGIN_BANK_CC_200001("ADAM_FEGIN_BANK_CC_200001"),
;
AdamErrorCode(String code) {
this.code = code;
}
private String code;
private static final Map<String, AdamErrorCode> valueMap;
static {
Map<String, AdamErrorCode> errorMap = new HashMap<>();
for (AdamErrorCode errorCode : AdamErrorCode.values()) {
errorMap.put(errorCode.code, errorCode);
}
valueMap = Collections.unmodifiableMap(errorMap);
}
public static AdamErrorCode getErrorCode(String code) {
return valueMap.get(code);
}
public String getCode() {
return this.code;
}
public String getVal() {
return ErrorCodeProperties.getValue(this.code);
}
}
......@@ -22,4 +22,6 @@ public class AdamThirdPartParam implements Serializable {
private String mobile;
@ApiModelProperty(position = 16, required = false, value = "验证码[新账号时必传]", example = "111111")
private String code;
@ApiModelProperty(position = 17, required = false, value = "强制绑定[第三方账号已绑定其他手机号时]", example = "false")
private Boolean force;
}
......@@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@ApiModel(value = "ThirdPartInfoVo", description = "用户第三方信息")
@Data
public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable {
......@@ -20,6 +22,10 @@ public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable {
private String platform;
@ApiModelProperty(position = 16, value = "状态[1-绑定,2-解绑]")
private Integer state;
@ApiModelProperty(position = 17, value = "状态[1-绑定,2-解绑]")
private String createdAt;
@ApiModelProperty(position = 18, value = "状态[1-绑定,2-解绑]")
private String updatedAt;
private static final AdamThirdPartInfoVo obj = new AdamThirdPartInfoVo();
......
......@@ -32,9 +32,13 @@ public class AdamUserInfoVo implements java.io.Serializable, Cloneable {
private String tagMe;
@ApiModelProperty(position = 21, value = "注册时间")
private String createAt;
@ApiModelProperty(position = 22, value = "是否完善信息[0-未完善,1-已完善]")
@ApiModelProperty(position = 22, value = "最近一次更新时间")
private String updatedAt;
@ApiModelProperty(position = 23, value = "注销时间")
private String closedAt;
@ApiModelProperty(position = 24, value = "是否完善信息[0-未完善,1-已完善]")
private Integer isComplete;
// @ApiModelProperty(position = 23, value = "")
// @ApiModelProperty(position = 25, value = "")
// private String rongCloudToken;
private static final AdamUserInfoVo obj = new AdamUserInfoVo();
......
......@@ -2,6 +2,10 @@ package com.liquidnet.service.adam.service;
import com.liquidnet.service.adam.entity.AdamAddresses;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
......@@ -13,4 +17,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IAdamAddressesService extends IService<AdamAddresses> {
void add(AdamAddresses adamAddresses);
List<AdamAddresses> list(String uid);
AdamAddresses query(String uid, String addressesId);
void def(String uid, String addressesId);
void edit(AdamAddresses info);
void remove(String uid, String addressesId);
}
......@@ -14,12 +14,14 @@ import java.util.List;
* @since 2021-04-28
*/
public interface IAdamEntersService extends IService<AdamEnters> {
List<AdamEnters> list(String uid);
List<AdamEnters> queryByUid(String uid);
void add(AdamEnters info);
AdamEnters query(String uid, String entersId);
void def(String uid, String entersId);
void edit(AdamEnters info);
void remove(String uid, String entersId);
......
package com.liquidnet.service.adam.service;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.entity.AdamUser;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 用户 服务类
......@@ -32,8 +35,38 @@ public interface IAdamUserService extends IService<AdamUser> {
/**
* 第三方账号注册
*
* @param thirdPartParam
* @param param
* @return AdamUserInfoVo
*/
AdamUserInfoVo register(AdamThirdPartParam thirdPartParam);
AdamUserInfoVo register(AdamThirdPartParam param);
/**
* 第三方账号绑定(不存在已绑定账号)
*
* @param uid
* @param param
* @return List<AdamThirdPartInfoVo>
*/
List<AdamThirdPartInfoVo> bindTpa(String uid, AdamThirdPartParam param);
/**
* 第三方账号绑定(存在已绑定账号)
*
* @param bindUid
* @param unBindUid
* @param param
* @return
*/
List<AdamThirdPartInfoVo> bindTpaForce(String bindUid, String unBindUid, AdamThirdPartParam param);
/**
* 第三方账号解绑
*
* @param uid
* @param platform
* @return List<AdamThirdPartInfoVo>
*/
List<AdamThirdPartInfoVo> unBindTpa(String uid, String platform);
void close(String uid);
}
......@@ -276,7 +276,7 @@ create table adam_user_member
(
mid int unsigned auto_increment primary key,
uid varchar(64) not null,
member_id varchar(255) commet '会员类型id',
member_id varchar(255) comment '会员类型id',
member_no int unsigned not null,
state tinyint comment '1-NORMAL,2-INVALID',
expiry_at datetime comment '到期日期',
......
......@@ -6,7 +6,15 @@ package com.liquidnet.service.adam.constant;
public class AdamRedisConst {
public static final String ADAM = "adam";
public static final String INFO_IDENTITY = ADAM.concat(":identity");
public static final String INFO_IDENTITY_MOBILE = INFO_IDENTITY.concat(":mobile");
public static final String INFO_IDENTITY_THIRD_PARTY = INFO_IDENTITY.concat(":third_party");
public static final String INFO_USER = ADAM.concat(":list:users");
public static final String INFO_REAL_NAME = ADAM.concat(":list:real_name");
public static final String INFO_THIRD_PARTY = ADAM.concat(":list:third_party");
public static final String INFO_ENTERS = ADAM.concat(":list:enters:");
public static final String INFO_ADDRESSES = ADAM.concat(":list:addresses:");
public static final String INFO_MEMBERS = ADAM.concat(":list:members");
......@@ -18,12 +26,6 @@ public class AdamRedisConst {
public static final String MEMBER_MEMBER_NO_MAX_KEY = ADAM.concat(":members:member_no_max:");
public static final String INFO_IDENTITY = ADAM.concat(":identity");
public static final String INFO_IDENTITY_MOBILE = INFO_IDENTITY.concat(":mobile");
public static final String INFO_IDENTITY_THIRD_PARTY = INFO_IDENTITY.concat(":third_party");
public static final String INFO_USER = ADAM.concat(":list:users");
public static final String INFO_REAL_NAME = ADAM.concat(":list:real_name");
public static final String INFO_THIRD_PARTY = ADAM.concat(":list:third_party");
// public static final String USER_CONFIRM_SMS_CODE_KEY = ADAM + ":user:sms_confirm:";
//
......
package com.liquidnet.service.adam.constant;
import com.liquidnet.common.exception.constant.ErrorCode;
public class AdamUserConst {
public enum UserAuthTypeEnum {
......@@ -54,60 +52,4 @@ public class AdamUserConst {
return desc;
}
}
public enum UserLoginLogMsgTypeEnum{
LOGIN_SUCCESS(ErrorCode.SUCCESS.getCode(), "login success"),
LOGIN_FAIL(ErrorCode.ERROR.getCode(), "login fail"),
LOGIN_OUT_SUCCESS(ErrorCode.SUCCESS.getCode(), "login out success"),
LOGIN_OUT_FORCE_MSG_OTHER_SITE(ErrorCode.SUCCESS.getCode(), "force login out(other site)"),
LOGIN_OUT_FORCE_MSG_USER_FROZEN(ErrorCode.SUCCESS.getCode(), "force login out(user frozen)"),
LOGIN_OUT_FORCE_MSG_COM_FROZEN(ErrorCode.SUCCESS.getCode(), "force login out(company frozen)"),
LOGIN_OUT_FORCE_MSG_SYS_UPDATE(ErrorCode.SUCCESS.getCode(), "force login out(system update)"),
LOGIN_OUT_FORCE_MSG_LOGIN_TIMEOUT(ErrorCode.SUCCESS.getCode(), "force login out(login timeout)"),
LOGIN_OUT_FORCE_MSG_EMAIL_UPDATE(ErrorCode.SUCCESS.getCode(), "force login out(email update)"),
REGISTER_SUCCESS(ErrorCode.SUCCESS.getCode(), "Balances"),
REGISTER_FAIL(ErrorCode.ERROR.getCode(), "Transactions")
;
private String status;
private String desc;
UserLoginLogMsgTypeEnum(String status,String desc) {
this.status = status;
this.desc = desc;
}
public String getStatus() {
return status;
}
public String getDesc() {
return desc;
}
public static UserLoginLogMsgTypeEnum getEnumByName(String name){
UserLoginLogMsgTypeEnum[] enums = UserLoginLogMsgTypeEnum.values();
UserLoginLogMsgTypeEnum rsEnum = null;
for(UserLoginLogMsgTypeEnum r:enums){
if(r.name().equalsIgnoreCase(name)){
rsEnum = r;
}
}
return rsEnum;
}
public static String getDescByName(String name){
UserLoginLogMsgTypeEnum[] enums = UserLoginLogMsgTypeEnum.values();
String desc = "";
for(UserLoginLogMsgTypeEnum r:enums){
if(r.name().equalsIgnoreCase(name)){
desc = r.getDesc();
}
}
return desc;
}
}
}
......@@ -2,14 +2,24 @@ package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.entity.AdamAddresses;
import com.liquidnet.service.adam.entity.AdamEnters;
import com.liquidnet.service.adam.service.IAdamAddressesService;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.adam.dto.AdamAddressesParam;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
......@@ -27,16 +37,24 @@ import java.util.List;
@RestController
@RequestMapping("addr")
public class AdamAddressesController {
@Autowired
IAdamAddressesService adamAddressesService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "添加收获地址")
@PostMapping("add")
public ResponseDto<Object> add(@RequestBody AdamAddressesParam parameter) {
// TODO: 2021/4/28 数据校验、身份认证、获取登录UID
String uid = "1";
// TODO: 2021/4/28 数据校验
String currentUid = CurrentUtil.getCurrentUid();
// TODO: 2021/5/10
AdamAddresses adamAddresses = new AdamAddresses();
BeanUtils.copyProperties(parameter, adamAddresses);
adamAddresses.setUid(currentUid);
adamAddresses.setAddressesId(String.valueOf(IDGenerator.nextSnowId()));
adamAddresses.setCreatedAt(LocalDateTime.now());
adamAddresses.setState(1);
adamAddressesService.add(adamAddresses);
return ResponseDto.success();
}
......@@ -45,15 +63,12 @@ public class AdamAddressesController {
@ApiOperation(value = "收获地址列表")
@GetMapping("list")
public ResponseDto<List<AdamAddressesVo>> list() {
// TODO: 2021/4/29 获取登录UID
String uid = "1";
String currentUid = CurrentUtil.getCurrentUid();
List<AdamAddressesVo> voList = new ArrayList<>();
voList.add(AdamAddressesVo.getNew());
voList.add(AdamAddressesVo.getNew());
// TODO: 2021/5/10
adamAddressesService.list(currentUid).forEach(i -> {
voList.add(AdamAddressesVo.getNew().copy(i));
});
return ResponseDto.success(voList);
}
......@@ -62,12 +77,13 @@ public class AdamAddressesController {
@ApiOperation(value = "设置默认收货地址")
@PostMapping("def/{addrId}")
public ResponseDto<Object> def(@PathVariable String addrId) {
// TODO: 2021/4/28 数据校验、身份认证、获取登录UID
String uid = "1";
// TODO: 2021/5/10
String currentUid = CurrentUtil.getCurrentUid();
AdamAddresses addresses = adamAddressesService.query(currentUid, addrId);
if (null == addresses) return ResponseDto.failure(ErrorMapping.get("10106"));
if (!addresses.getIsDefault()) {
adamAddressesService.def(currentUid, addrId);
}
return ResponseDto.success();
}
......@@ -75,11 +91,16 @@ public class AdamAddressesController {
@ApiOperation(value = "编辑收获地址")
@PostMapping("edit")
public ResponseDto<Object> edit(@RequestBody AdamAddressesParam parameter) {
// TODO: 2021/4/28 校验、获取登录UID
String uid = "1";
// TODO: 2021/4/28 校验
String currentUid = CurrentUtil.getCurrentUid();
// TODO: 2021/5/11
AdamAddresses updateInfo = new AdamAddresses();
BeanUtils.copyProperties(parameter, updateInfo);
updateInfo.setUpdatedAt(LocalDateTime.now());
updateInfo.setUid(currentUid);
updateInfo.setState(1);
adamAddressesService.edit(updateInfo);
return ResponseDto.success();
}
......@@ -88,12 +109,13 @@ public class AdamAddressesController {
@ApiOperation(value = "删除收获地址")
@PostMapping("del/{addrId}")
public ResponseDto<Object> del(@PathVariable String addrId) {
// TODO: 2021/4/28 校验、获取登录UID
String uid = "1";
// TODO: 2021/5/11
String currentUid = CurrentUtil.getCurrentUid();
AdamAddresses addresses = adamAddressesService.query(currentUid, addrId);
if (null == addresses) return ResponseDto.failure(ErrorMapping.get("10106"));
adamAddressesService.remove(currentUid, addrId);
return ResponseDto.success();
}
}
......@@ -2,7 +2,9 @@ package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.adam.dto.AdamEntersParam;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
......@@ -40,13 +42,13 @@ public class AdamEntersController {
@ApiOperation(value = "添加入场人")
@PostMapping("add")
public ResponseDto<Object> add(@RequestBody AdamEntersParam parameter) {
// TODO: 2021/4/28 数据校验、身份认证、获取登录UID
String uid = "1";
// TODO: 2021/4/28 数据校验
String currentUid = CurrentUtil.getCurrentUid();
AdamEnters addInfo = new AdamEnters();
BeanUtils.copyProperties(parameter, addInfo);
addInfo.setUid(uid);
addInfo.setUid(currentUid);
addInfo.setEntersId(String.valueOf(IDGenerator.nextSnowId()));
addInfo.setCreatedAt(LocalDateTime.now());
addInfo.setState(1);
......@@ -60,11 +62,10 @@ public class AdamEntersController {
@ApiOperation(value = "入场人列表")
@GetMapping("list")
public ResponseDto<List<AdamEntersVo>> list() {
// TODO: 2021/4/29 获取登录UID
String uid = "1";
String currentUid = CurrentUtil.getCurrentUid();
List<AdamEntersVo> voList = new ArrayList<>();
adamEntersService.list(uid).forEach(i -> {
adamEntersService.queryByUid(currentUid).forEach(i -> {
voList.add(AdamEntersVo.getNew().copy(i));
});
......@@ -75,15 +76,13 @@ public class AdamEntersController {
@ApiOperation(value = "设置默认入场人")
@PostMapping("def/{entersId}")
public ResponseDto<Object> def(@PathVariable String entersId) {
// TODO: 2021/4/28 数据校验、身份认证、获取登录UID
String uid = "1";
// TODO: 2021/5/10
String currentUid = CurrentUtil.getCurrentUid();
AdamEnters enters = adamEntersService.query(currentUid, entersId);
if (null == enters) return ResponseDto.failure(ErrorMapping.get("10105"));
if (!enters.getIsDefault()) {
adamEntersService.def(currentUid, entersId);
}
return ResponseDto.success();
}
......@@ -91,13 +90,16 @@ public class AdamEntersController {
@ApiOperation(value = "编辑入场人")
@PostMapping("edit")
public ResponseDto<Object> edit(@RequestBody AdamEntersParam parameter) {
// TODO: 2021/4/28 校验、获取登录UID
String uid = "1";
// TODO: 2021/4/28 校验
String currentUid = CurrentUtil.getCurrentUid();
AdamEnters enters = adamEntersService.query(currentUid, parameter.getEntersId());
if (null == enters) return ResponseDto.failure(ErrorMapping.get("10105"));
AdamEnters updateInfo = new AdamEnters();
BeanUtils.copyProperties(parameter, updateInfo);
updateInfo.setUpdatedAt(LocalDateTime.now());
updateInfo.setUid(uid);
updateInfo.setUid(currentUid);
updateInfo.setState(1);
adamEntersService.edit(updateInfo);
......@@ -109,11 +111,12 @@ public class AdamEntersController {
@ApiOperation(value = "删除入场人")
@PostMapping("del/{entersId}")
public ResponseDto<Object> del(@PathVariable String entersId) {
// TODO: 2021/4/28 校验、获取登录UID
String uid = "1";
String currentUid = CurrentUtil.getCurrentUid();
adamEntersService.remove(uid, entersId);
AdamEnters enters = adamEntersService.query(currentUid, entersId);
if (null == enters) return ResponseDto.failure(ErrorMapping.get("10105"));
adamEntersService.remove(currentUid, entersId);
return ResponseDto.success();
}
......
......@@ -6,17 +6,19 @@ import com.aliyuncs.dypnsapi.model.v20170525.GetMobileResponse;
import com.aliyuncs.exceptions.ClientException;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.service.IAdamRealNameService;
import com.liquidnet.service.adam.service.IAdamThirdPartyService;
import com.liquidnet.service.adam.service.IAdamUserService;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
......@@ -25,9 +27,12 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.util.DigestUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
......@@ -43,6 +48,8 @@ public class AdamLoginController {
@Autowired
JwtValidator jwtValidator;
@Autowired
RedisUtil redisUtil;
@Autowired
DefaultAcsClient defaultAcsClient;
@Autowired
IAdamUserService adamUserService;
......@@ -89,7 +96,7 @@ public class AdamLoginController {
} catch (Exception e) {
log.error("验证码发送异常[mobile:{}]", mobile, e);
return ResponseDto.failure("验证码发送失败");
return ResponseDto.failure(ErrorMapping.get("10001"));
}
return ResponseDto.success();
}
......@@ -121,8 +128,7 @@ public class AdamLoginController {
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put("uid", userInfoVo.getUid());
loginInfoVo.setToken(jwtValidator.create(claimsMap));
loginInfoVo.setToken(this.ssoProcess(claimsMap));
return ResponseDto.success(loginInfoVo);
}
......@@ -153,35 +159,11 @@ public class AdamLoginController {
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put("uid", userInfoVo.getUid());
loginInfoVo.setToken(jwtValidator.create(claimsMap));
loginInfoVo.setToken(this.ssoProcess(claimsMap));
return ResponseDto.success(AdamLoginInfoVo.getNew());
}
// @ApiOperationSupport(order = 5)
// @ApiOperation(value = "第三方账号注册")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "openId", value = "第三方OPENID"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "nickname", value = "昵称"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "avatar", value = "头像"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "platform", value = "平台类型", allowableValues = "WEIBO,WECHAT,QQ"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "platform", value = "验证码"),
// })
// @PostMapping(value = {"tpa/reg"})
// public ResponseDto<AdamLoginInfoVo> loginByTpaRegister(@RequestParam String openId, @RequestParam String nickname,
// @RequestParam String avatar, @RequestParam String platform,
// @RequestParam String mobile, @RequestParam String code) {
// log.info("login by tpa openId:{},nickname:{},avatar:{},platform:{},mobile:{},code:{}",
// openId, nickname, avatar, platform, mobile, code);
//
// // TODO: 2021/5/10
//
//
// return ResponseDto.success(AdamLoginInfoVo.getNew());
// }
@ApiOperationSupport(order = 6)
@ApiOperationSupport(order = 5)
@ApiOperation(value = "第三方账号登录")
@PostMapping(value = {"login/tpa"})
public ResponseDto<AdamLoginInfoVo> loginByTpa(@RequestBody AdamThirdPartParam parameter) {
......@@ -190,12 +172,12 @@ public class AdamLoginController {
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
if (StringUtils.isEmpty(parameter.getMobile())) {
AdamThirdPartInfoVo thirdPartInfoVo = adamThirdPartyService.queryByOpenId(parameter.getOpenId(), parameter.getPlatform());
if (Objects.isNull(thirdPartInfoVo)) return ResponseDto.failure("第三方账号未注册");
String uid = adamUserService.queryUidByRedis(parameter.getOpenId(), parameter.getPlatform());
if (StringUtils.isEmpty(uid)) return ResponseDto.failure("第三方账号未注册");
loginInfoVo.setUserInfo(adamUserService.queryByUid(thirdPartInfoVo.getUid()));
loginInfoVo.setRealNameInfo(adamRealNameService.queryByUid(thirdPartInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamThirdPartyService.queryByUid(thirdPartInfoVo.getUid()));
loginInfoVo.setUserInfo(adamUserService.queryByUid(uid));
loginInfoVo.setRealNameInfo(adamRealNameService.queryByUid(uid));
loginInfoVo.setThirdPartInfo(adamThirdPartyService.queryByUid(uid));
} else {// 新账号注册
if (!this.checkSmsCode(parameter.getMobile(), parameter.getCode())) return ResponseDto.failure("验证码无效");
......@@ -205,11 +187,33 @@ public class AdamLoginController {
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put("uid", loginInfoVo.getUserInfo().getUid());
loginInfoVo.setToken(jwtValidator.create(claimsMap));
loginInfoVo.setToken(this.ssoProcess(claimsMap));
return ResponseDto.success(loginInfoVo);
}
@ApiOperationSupport(order = 6)
@ApiOperation(value = "登出")
@PostMapping(value = {"logout"})
public ResponseDto<Object> logout(HttpServletRequest request) {
String authorization = request.getHeader("authorization");
String ssoKey = jwtValidator.getSsoRedisKey().concat(
DigestUtils.md5DigestAsHex(authorization.substring(7).getBytes(StandardCharsets.UTF_8))
);
redisUtil.set(ssoKey, false);
return ResponseDto.success();
}
@ApiOperationSupport(order = 7)
@ApiOperation(value = "注销")
@PostMapping(value = {"close"})
public ResponseDto<Object> close(HttpServletRequest request) {
adamUserService.close(CurrentUtil.getCurrentUid());
return this.logout(request);
}
/* ---------------------------- Internal Method ---------------------------- */
private boolean checkSmsCode(String mobile, String code) {
......@@ -252,4 +256,16 @@ public class AdamLoginController {
}
return null;
}
private String ssoProcess(Map<String, Object> claimsMap) {
redisUtil.delKeysByPrefix(jwtValidator.getSsoRedisKey());
String token = jwtValidator.create(claimsMap);
String ssoKey = jwtValidator.getSsoRedisKey().concat(DigestUtils.md5DigestAsHex(token.getBytes(StandardCharsets.UTF_8)));
redisUtil.set(ssoKey, true, jwtValidator.getExpireTtl() * 60);
return token;
}
}
......@@ -3,27 +3,29 @@ package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.AdamUserInfoParam;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.service.IAdamThirdPartyService;
import com.liquidnet.service.adam.service.IAdamUserInfoService;
import com.liquidnet.service.adam.service.IAdamUserService;
import com.liquidnet.service.base.ResponseDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
......@@ -39,21 +41,31 @@ public class AdamUserController {
IAdamUserService adamUserService;
@Autowired
IAdamUserInfoService adamUserInfoService;
@Autowired
IAdamThirdPartyService adamThirdPartyService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "个人资料编辑")
@PostMapping(value = {"edit"})
public ResponseDto<AdamUserInfoVo> edit(@RequestBody AdamUserInfoParam adamUserInfoParam) {
public ResponseDto<AdamUserInfoVo> edit(@RequestBody AdamUserInfoParam parameter) {
// TODO: 2021/5/10
log.info("adamUserInfoParam:{}", JsonUtils.toJson(adamUserInfoParam));
String uid = CurrentUtil.getCurrentUid();
AdamUserInfoVo userInfoVo = adamUserService.queryByUid(uid);
BeanUtils.copyProperties(adamUserInfoParam, userInfoVo);
adamUserInfoService.edit(userInfoVo);
return ResponseDto.success(userInfoVo);
log.info("parameter:{}", JsonUtils.toJson(parameter));
String currentUid = CurrentUtil.getCurrentUid();
AdamUserInfoVo editUserInfoVo = adamUserService.queryByUid(currentUid);
editUserInfoVo.setAvatar(parameter.getAvatar());
editUserInfoVo.setBackground(parameter.getBackground());
editUserInfoVo.setNickName(parameter.getNickName());
editUserInfoVo.setSex(parameter.getSex());
editUserInfoVo.setBirthday(parameter.getBirthday());
editUserInfoVo.setArea(parameter.getArea());
editUserInfoVo.setSignature(parameter.getSignature());
editUserInfoVo.setTagMe(parameter.getTagMe());
editUserInfoVo.setUpdatedAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
adamUserInfoService.edit(editUserInfoVo);
return ResponseDto.success(editUserInfoVo);
}
@ApiOperationSupport(order = 2)
......@@ -76,42 +88,43 @@ public class AdamUserController {
return ResponseDto.success();
}
@ApiOperationSupport(order = 3)
@ApiOperation(value = "密码修改")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "password", value = "密码"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "验证码"),
})
@PostMapping(value = {"edit/pwd"})
public ResponseDto<Object> editPwd(@RequestParam String mobile, @RequestParam String password, @RequestParam String code) {
log.info("mobile:{},password:{},code:{}", mobile, password, code);
// TODO: 2021/5/10
return ResponseDto.success();
}
// @ApiOperationSupport(order = 3)
// @ApiOperation(value = "密码修改")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "password", value = "密码"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "验证码"),
// })
// @PostMapping(value = {"edit/pwd"})
// public ResponseDto<Object> editPwd(@RequestParam String mobile, @RequestParam String password, @RequestParam String code) {
// log.info("mobile:{},password:{},code:{}", mobile, password, code);
//
// // TODO: 2021/5/10
//
//
// return ResponseDto.success();
// }
@ApiOperationSupport(order = 4)
@ApiOperation(value = "绑定第三方账号")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "openId", value = "第三方OPENID"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "nickName", value = "昵称"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "avatar", value = "头像"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "platform", value = "平台类型", allowableValues = "WEIBO,WECHAT,QQ"),
})
@PostMapping(value = {"tpa/bind"})
public ResponseDto<List<AdamThirdPartInfoVo>> bindTpa(@RequestParam String openId, @RequestParam String nickname,
@RequestParam String avatar, @RequestParam String platform) {
log.info("bind tpa openId:{}, nickname:{}, avatar: {}, platform:{}", openId, nickname, avatar, platform);
public ResponseDto<List<AdamThirdPartInfoVo>> bindTpa(@RequestBody AdamThirdPartParam parameter) {
// TODO: 2021/5/10
List<AdamThirdPartInfoVo> voList = new ArrayList<>();
voList.add(AdamThirdPartInfoVo.getNew());
log.info("login by tpa:{}", JsonUtils.toJson(parameter));
String currentUid = CurrentUtil.getCurrentUid();
return ResponseDto.success(voList);
String existUid = adamUserService.queryUidByRedis(parameter.getOpenId(), parameter.getPlatform());
if (StringUtils.isNotEmpty(existUid)) {
if (existUid.equals(currentUid)) {
return ResponseDto.success(adamThirdPartyService.queryByUid(currentUid));
}
Boolean force = parameter.getForce();
if (null != force && force) {// 强制解绑,并重新绑定当前账号
return ResponseDto.success(adamUserService.bindTpaForce(currentUid, existUid, parameter));
}
return ResponseDto.failure("第三方账号已绑定其它手机号");
}
return ResponseDto.success(adamUserService.bindTpa(currentUid, parameter));
}
@ApiOperationSupport(order = 5)
......@@ -121,14 +134,11 @@ public class AdamUserController {
})
@PostMapping(value = {"tpa/unbind/{platform}"})
public ResponseDto<List<AdamThirdPartInfoVo>> unbindTpa(@PathVariable String platform) {
log.info("unbind tpa.platform:{}", platform);
// TODO: 2021/5/10
List<AdamThirdPartInfoVo> voList = new ArrayList<>();
voList.add(AdamThirdPartInfoVo.getNew());
String currentUid = CurrentUtil.getCurrentUid();
log.info("unbind tpa.platform:{},uid:{}", platform, currentUid);
return ResponseDto.success(voList);
return ResponseDto.success(adamUserService.unBindTpa(currentUid, platform));
}
/* ---------------------------- Internal Method ---------------------------- */
......
......@@ -7,6 +7,7 @@ import com.liquidnet.service.adam.entity.AdamThirdParty;
import com.liquidnet.service.adam.mapper.AdamThirdPartyMapper;
import com.liquidnet.service.adam.service.IAdamThirdPartyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
......@@ -32,24 +33,20 @@ public class AdamThirdPartyServiceImpl extends ServiceImpl<AdamThirdPartyMapper,
@Override
public List<AdamThirdPartInfoVo> queryByUid(String uid) {
List<AdamThirdPartInfoVo> thirdPartInfoVo = (List<AdamThirdPartInfoVo>) redisUtil.hget(AdamRedisConst.INFO_THIRD_PARTY, uid);
if (null == thirdPartInfoVo) {
thirdPartInfoVo = mongoTemplate.find(Query.query(Criteria.where("uid").is(uid).and("state").is(1)),
List<AdamThirdPartInfoVo> thirdPartInfoVos = (List<AdamThirdPartInfoVo>) redisUtil.hget(AdamRedisConst.INFO_THIRD_PARTY, uid);
if (null == thirdPartInfoVos) {
thirdPartInfoVos = mongoTemplate.find(Query.query(Criteria.where("uid").is(uid).and("state").is(1)),
AdamThirdPartInfoVo.class, AdamThirdPartInfoVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_THIRD_PARTY, uid, thirdPartInfoVo);
redisUtil.hset(AdamRedisConst.INFO_THIRD_PARTY, uid, thirdPartInfoVos);
}
return thirdPartInfoVo;
return thirdPartInfoVos;
}
@Override
public AdamThirdPartInfoVo queryByOpenId(String openId, String platform) {
AdamThirdPartInfoVo thirdPartInfoVo = (AdamThirdPartInfoVo) redisUtil.hget(AdamRedisConst.INFO_THIRD_PARTY.concat(platform), openId);
if (null == thirdPartInfoVo) {
thirdPartInfoVo = mongoTemplate.findOne(Query.query(Criteria.where("openId").is(openId)
return mongoTemplate.findOne(Query.query(Criteria.where("openId").is(openId)
.and("platform").is(platform).and("state").is(1)),
AdamThirdPartInfoVo.class, AdamThirdPartInfoVo.class.getSimpleName());
}
return thirdPartInfoVo;
}
}
......@@ -63,6 +63,7 @@ public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, Ada
userInfoVo.getSignature(),
userInfoVo.getAvatar(),
userInfoVo.getBackground(),
// TODO: 2021/5/14 用户身份二维码
null, null,// qr_code, qr_pic
userInfoVo.getTagMe(),
userInfoVo.getUid()
......@@ -85,6 +86,7 @@ public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, Ada
);
AdamUserInfoVo beforeUserInfoVo = BsonUtil.toBean(doc, AdamUserInfoVo.class);
redisUtil.hdel(AdamRedisConst.INFO_IDENTITY_MOBILE, beforeUserInfoVo.getMobile());
redisUtil.hset(AdamRedisConst.INFO_IDENTITY_MOBILE, beforeUserInfoVo.getMobile(), uid);
beforeUserInfoVo.setMobile(mobile);
redisUtil.hset(AdamRedisConst.INFO_USER, uid, beforeUserInfoVo);
......
10001=验证码发送失败
10002=
10101=
10102=
10103=
10104=
10105=入场人不存在
10106=收获地址不存在
10201=
\ No newline at end of file
adam_addresses.add=张三
adam_addresses.edit=
adam_addresses.update.is_default=UPDATE ln_adam.adam_addresses set is_default=?, updated_at=? where addresses_id=?
adam_addresses.remove=UPDATE ln_adam.adam_addresses SET `state`=2, updated_at=?, deleted_at=? where addresses_id=?
\ No newline at end of file
adam_enters.add=INSERT INTO ln_adam.adam_enters (enters_id, `uid`, `type`,`name`, mobile, id_card, is_default, `state`, created_at, updated_at, deleted_at, `comment`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)
adam_enters.edit=UPDATE ln_adam.adam_enters SET `type`=?, `name`=?, mobile=?, id_card=?, is_default=?, `state`=?, updated_at=? where enters_id=?
adam_enters.update.is_default=UPDATE ln_adam.adam_enters set is_default=?, updated_at=? where enters_id=?
adam_enters.remove=UPDATE ln_adam.adam_enters SET `state`=?, updated_at=?, deleted_at=? where enters_id=?
\ No newline at end of file
adam_enters.remove=UPDATE ln_adam.adam_enters SET `state`=2, updated_at=?, deleted_at=? where enters_id=?
\ No newline at end of file
adam_user.add=insert into ln_adam.adam_user (`uid`, mobile, passwd, pay_code, `state`, created_at, updated_at, closed_at, `comment`) values (?,?,?,?,?,?,?,?,?)
\ No newline at end of file
adam_user.add=INSERT INTO ln_adam.adam_user (`uid`, mobile, passwd, pay_code, `state`, created_at, updated_at, closed_at, `comment`) VALUES (?,?,?,?,?,?,?,?,?)
adam_user.close=UPDATE ln_adam.adam_user SET `state`=2, updated_at=?, closed_at=? WHERE `uid`=?
\ No newline at end of file
......@@ -37,6 +37,11 @@
<artifactId>liquidnet-common-service-base</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-cache-redis</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
......
package com.liquidnet.support.zuul.filter;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
......@@ -13,6 +15,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
......@@ -24,9 +27,16 @@ import java.util.List;
public class GlobalAuthFilter extends ZuulFilter {
@Value("#{'${global.exclude.url}'.split(', ')}")
private List<String> excludeUrls;
private static final String CONTENT_TYPE = "application/json;charset=utf-8";
private static final String AUTHORIZATION = "authorization";
private static final String TOKEN_ILLEGAL = "40001";
private static final String TOKEN_KICK = "40002";
private static final String TOKEN_EXPIRED = "40003";
@Autowired
JwtValidator jwtValidator;
@Autowired
RedisUtil redisUtil;
@Override
public String filterType() {
......@@ -50,47 +60,55 @@ public class GlobalAuthFilter extends ZuulFilter {
public Object run() {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest httpServletRequest = requestContext.getRequest();
String token = httpServletRequest.getHeader("authorization");
Claims claims;
String authorization = httpServletRequest.getHeader(AUTHORIZATION);
try {
log.info("token:{}", token);
if (StringUtils.isBlank(token)) {
requestContext.setSendZuulResponse(false);
ResponseDto<Object> responseDto = ResponseDto.failure("401", "非法TOKEN");
requestContext.setResponseBody(JsonUtils.toJson(responseDto));
HttpServletResponse response = requestContext.getResponse();
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType("application/json;charset=utf-8");
log.info("authorization:{}", authorization);
if (StringUtils.isBlank(authorization)) {
respHandler(requestContext, TOKEN_ILLEGAL);
} else {
token = token.replace("Bearer ", "");
String token = authorization.substring(7);
String ssoKey = jwtValidator.getSsoRedisKey().concat(DigestUtils.md5DigestAsHex(token.getBytes(StandardCharsets.UTF_8)));
if (redisUtil.hasKey(ssoKey)) {
if ((boolean) redisUtil.get(ssoKey)) {
// 解析没有异常则表示token验证通过,如有必要可根据自身需求增加验证逻辑
claims = jwtValidator.parse(token);
log.info("claims:{}", JsonUtils.toJson(claims));
// 对请求进行路由
Claims claims = jwtValidator.parse(token);
requestContext.setSendZuulResponse(true);
// 请求头加入uid,传给具体的微服务
// requestContext.addZuulRequestHeader("uid", claims.get("uid").toString());
requestContext.addZuulRequestHeader(CurrentUtil.uTag, JsonUtils.toJson(claims));
requestContext.addZuulRequestHeader(CurrentUtil.uToken, token);
} else {
respHandler(requestContext, TOKEN_EXPIRED);
}
} else {
respHandler(requestContext, TOKEN_KICK);
}
}
} catch (ExpiredJwtException expiredJwtEx) {
log.error("TOKEN已过期:{}", token);
// 不对请求进行路由
requestContext.setSendZuulResponse(false);
ResponseDto<Object> responseDto = ResponseDto.failure("402", "TOKEN已过期");
requestContext.setResponseBody(JsonUtils.toJson(responseDto));
HttpServletResponse response = requestContext.getResponse();
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType("application/json;charset=utf-8");
log.error("TOKEN已过期:{}", authorization);
respHandler(requestContext, TOKEN_EXPIRED);
} catch (Exception ex) {
log.error("TOKEN验证失败:{}", token);
// 不对请求进行路由
log.error("TOKEN验证失败:{}", authorization);
respHandler(requestContext, TOKEN_ILLEGAL);
}
return null;
}
private void respHandler(RequestContext requestContext, String code) {
requestContext.setSendZuulResponse(false);
ResponseDto<Object> responseDto = ResponseDto.failure("401", "非法TOKEN");
ResponseDto<Object> responseDto = ResponseDto.failure(ErrorMapping.get(code));
requestContext.setResponseBody(JsonUtils.toJson(responseDto));
HttpServletResponse response = requestContext.getResponse();
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
response.setContentType("application/json;charset=utf-8");
}
return null;
response.setContentType(CONTENT_TYPE);
}
}
40001=非法TOKEN
40002=被踢下线喽
40003=TOKEN过期
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