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

Commit 502d588b authored by 张国柄's avatar 张国柄

添加ZUUL FILTER

parent 1f217a88
package com.liquidnet.commons.lang.util; package com.liquidnet.commons.lang.core;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
//@Component @Component("jwtValidator")
public class JwtUtil { public class JwtValidator {
/** @Value("${liquidnet.jwt.expire-time}")
* 过期时间15分钟 private Long expireTime;
*/ @Value("${liquidnet.jwt.secret}")
private static final long EXPIRE_TIME = 15 * 60 * 1000; private String tokenSecret;
/** // private static final long EXPIRE_TIME = 15 * 60 * 1000;
* token私钥 // private static final String TOKEN_SECRET = "qZHglvNP0n0aOOckHiQXq5JMD468J4eG";
*/
private static final String TOKEN_SECRET = "DD5654D654DSD5S1D65S4D65S1D12354";
/** /**
* 用户登录成功后生成Jwt token * 用户登录成功后生成Jwt token
* 使用Hs256算法 * 使用Hs256算法
* *
* @param claims 保存在Payload(有效载荷)中的内容 * @param claimsMap 保存在Payload(有效载荷)中的内容
* @return token字符串 * @return token字符串
*/ */
public static String create(Map<String, Object> claims) { public String create(Map<String, Object> claimsMap) {
long nowMillis = System.currentTimeMillis(); long nowMillis = System.currentTimeMillis();
long expMillis = System.currentTimeMillis() + EXPIRE_TIME; long expMillis = System.currentTimeMillis() + expireTime * 60000;
// 创建一个JwtBuilder,设置jwt的body // 创建一个JwtBuilder,设置jwt的body
JwtBuilder builder = Jwts.builder() JwtBuilder builder = Jwts.builder()
// 保存在Payload(有效载荷)中的内容, 自定义一些数据保存在这里 // 保存在Payload(有效载荷)中的内容, 自定义一些数据保存在这里
.setClaims(claims) .setClaims(claimsMap)
// iat: jwt的签发时间 // iat: jwt的签发时间
.setIssuedAt(new Date(nowMillis)) .setIssuedAt(new Date(nowMillis))
// 设置过期时间 // 设置过期时间
.setExpiration(new Date(expMillis)) .setExpiration(new Date(expMillis))
// 使用HS256算法和签名使用的秘钥生成密文 // 使用HS256算法和签名使用的秘钥生成密文
.signWith(SignatureAlgorithm.HS256, TOKEN_SECRET); .signWith(SignatureAlgorithm.HS256, tokenSecret);
return builder.compact(); return builder.compact();
} }
...@@ -49,11 +49,11 @@ public class JwtUtil { ...@@ -49,11 +49,11 @@ public class JwtUtil {
* @param token 令牌 * @param token 令牌
* @return * @return
*/ */
public static Claims parse(String token) { public Claims parse(String token) {
// 得到DefaultJwtParser // 得到DefaultJwtParser
return Jwts.parser() return Jwts.parser()
// 设置签名的秘钥 // 设置签名的秘钥
.setSigningKey(TOKEN_SECRET) .setSigningKey(tokenSecret)
// 设置需要解析的token // 设置需要解析的token
.parseClaimsJws(token).getBody(); .parseClaimsJws(token).getBody();
} }
......
/**
* $Id$
* Copyright(C) 2015-2020 kowlone - internet center, All Rights Reserved.
*/
package com.liquidnet.commons.lang.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.StringEntity;
import org.apache.http.message.BasicNameValuePair;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.nio.charset.Charset;
import java.util.*;
import java.util.function.Function;
/**
* @author <a href="mailto:zmli@corp.netease.com">kowlone</a>
* @version 1.0 2015年04月01日 16:10:00
*/
public class HttpRequest {
private enum BodyEntityType {
URL_PARAM {
@Override HttpEntity createPostEntity(HttpRequest request) throws UnsupportedEncodingException {
List<NameValuePair> nvps = new ArrayList<>();
for (Map.Entry<String, Object> entry : request.requestParam.entrySet()) {
nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
return new UrlEncodedFormEntity(nvps,request.requestCharset);
}
},
JSON_STRING {
@Override HttpEntity createPostEntity(HttpRequest request) {
String jsonBody = request.paramWrapper == null ?
JSON.toJSONString(request.requestParam) :
request.paramWrapper.wrapper(request.requestParam);
return new StringEntity(jsonBody, request.requestCharset);
}
},;
abstract HttpEntity createPostEntity(HttpRequest request) throws UnsupportedEncodingException;
}
public interface ParamWrapper{
String wrapper(Map<String, Object> requestParam);
}
private String url;
private Map<String, Object> requestParam = new LinkedHashMap<>();
private Map<String, String> headerParam = new LinkedHashMap<>();
/** 明确要发送的消息体当指定了该参数时,不在经过BodyEntityType处理 */
private HttpEntity explicitEntity = null;
private BodyEntityType entityType;
private Charset requestCharset = Consts.UTF_8;
private Charset responseCharset = Consts.UTF_8;
private String contentType = null;
private ParamWrapper paramWrapper = null;
private HttpRequest(String url) {
this(url, BodyEntityType.URL_PARAM);
}
private HttpRequest(String url, BodyEntityType entityType) {
this.url = url;
this.entityType = entityType;
}
/**
* 新请求
*
* @param url
* @return
*/
public static HttpRequest newRequest(String url) {
return new HttpRequest(url);
}
/**
* 发起http body为json字符串内容的请求
*
* @param url
* @return
*/
public static HttpRequest newJSONBodyRequest(String url) {
return new HttpRequest(url, BodyEntityType.JSON_STRING);
}
public HttpRequest withParamWrapper(ParamWrapper paramWrapper) {
this.paramWrapper = paramWrapper;
return this;
}
/**
* 添加请求参数
*
* @param key
* @param value
* @return
*/
public HttpRequest addParam(String key, Object value) {
this.requestParam.put(key, value);
return this;
}
public HttpRequest addParam(Map<String, Object> params) {
this.requestParam.putAll(params);
return this;
}
public HttpRequest contentType(String contentType) {
this.contentType = contentType;
return this;
}
/**
* 访问参数key和参数值,并做相应处理后,返回字符串
* @param function
*
* @return
*/
public String visitParam(Function<Set<Map.Entry<String,Object>>,String> function) {
return function.apply(requestParam.entrySet());
}
public HttpRequest setExplicitEntity(HttpEntity explicitEntity){
this.explicitEntity = explicitEntity;
return this;
}
/**
* 添加请求头
*
* @param key
* @param value
* @return
*/
public HttpRequest addHeader(String key, String value) {
this.headerParam.put(key, value);
return this;
}
/**
* 指定请求字符集
* @param charset
*
* @return
*/
public HttpRequest requestCharset(String charset) {
this.requestCharset = Charset.forName(charset);
return this;
}
/**
* 指定响应字符集
* @param charset
*
* @return
*/
public HttpRequest responseCharset(String charset) {
this.responseCharset = Charset.forName(charset);
return this;
}
/**
* 获取body
*
* @return
*/
public String getRequestBodyString() {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, Object> entry : requestParam.entrySet()) {
sb.append("&").append(entry.getKey()).append("=").append(entry.getValue());
}
return sb.deleteCharAt(0).toString();
}
/**
* 发送post请求,返回json对象
*/
public JSONObject postAsJson() {
return JSON.parseObject(postAsString());
}
/**
* 发送post请求,返回原始字符串
*
* @return
* @throws Exception
*/
public String postAsString() {
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(explicitEntity!=null?explicitEntity:entityType.createPostEntity(this));
// httpPost.addHeader("Content-Type","application/json");
if (this.contentType != null) {
httpPost.addHeader("Content-type",contentType);
}
for (Map.Entry<String, String> entry : headerParam.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
return HttpUtil.post(httpPost,this.responseCharset);
} catch (Exception e) {
throw new RuntimeException("post http request error :" + url, e);
}
}
/**
* 发送post请求,返回原始字符串
*
* @return
* @throws Exception
*/
public String postAsString(int timeout) {
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(explicitEntity!=null?explicitEntity:entityType.createPostEntity(this));
// httpPost.addHeader("Content-Type","application/json");
if (this.contentType != null) {
httpPost.addHeader("Content-type",contentType);
}
for (Map.Entry<String, String> entry : headerParam.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(5000) //连接池中取出连接的超时时间
.setSocketTimeout(timeout) //服务器获取响应数据需要等待的时间
.setConnectTimeout(10000) //创建与服务器的socket连接时间
.setExpectContinueEnabled(false)
.build();
httpPost.setConfig(requestConfig);
return HttpUtil.post(httpPost,this.responseCharset);
} catch (Exception e) {
throw new RuntimeException("post http request error :" + url, e);
}
}
/**
* 发送返回二进制数组的请求
* @return
*/
public byte[] postAsBinary() {
try {
HttpPost httpPost = new HttpPost(url);
httpPost.setEntity(explicitEntity!=null?explicitEntity:entityType.createPostEntity(this));
for (Map.Entry<String, String> entry : headerParam.entrySet()) {
httpPost.setHeader(entry.getKey(), entry.getValue());
}
return HttpUtil.binaryPost(httpPost);
} catch (Exception e) {
throw new RuntimeException("post http request error :" + url, e);
}
}
/**
* 发送get请求
*
* @throws Exception
*/
public String getAsString() {
try {
StringBuilder urlBuilder = new StringBuilder(url);
if (!requestParam.isEmpty()) {
List<NameValuePair> uriParam = new ArrayList<>();
for (Map.Entry<String, Object> entry : requestParam.entrySet()) {
if(entry.getValue()!=null) {
uriParam.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
}
}
urlBuilder.append("?").append(URLEncodedUtils.format(uriParam, Consts.UTF_8));
}
URI uri = new URI(urlBuilder.toString());
HttpGet httpGet = new HttpGet(uri);
for (Map.Entry<String, String> entry : headerParam.entrySet()) {
httpGet.setHeader(entry.getKey(), entry.getValue());
}
// byte[] bytes = HttpUtil.binaryGet(httpGet);
// return new String(bytes, this.responseCharset);
return HttpUtil.get(httpGet, this.responseCharset);
// return HttpUtil.get(httpGet);
} catch (Exception e) {
throw new RuntimeException("post http request error :" + url, e);
}
}
/**
* 发送返回JSON对象的请求
* @return
*/
public JSONObject getAsJson(){
return JSON.parseObject(getAsString(), Feature.InternFieldNames);
}
public static void main(String[] args) {
try {
// System.out.println(HttpRequest.newRequest("http://www.huihui.cn/").postAsString());
// HttpRequest ht=HttpRequest.newJSONBodyRequest("https://api.intellicredit.cn/id_check");
// ht.addParam("access_token", "_RH4Us1yseJfAY3_nsku");
// JSONArray ja=new JSONArray();
// JSONObject jo =new JSONObject();
// jo.put("name", "");
// jo.put("id_number", "");
// jo.put("sub_client", "");
// jo.put("type", "");
// jo.put("location", "");
// ja.add(jo);
// ht.addParam("query", ja);
// System.out.println(JSON.toJSONString(ht.requestParam));
// System.out.println(ht.postAsString());
// Map<String, Object> param = new HashMap<>();
// param.put("id", 123212);
// param.put("service", "hehe");
//
// Map<String, Object> shit = new HashMap<>();
// shit.put("code", 123);
// param.put("data", shit);
// System.out.println(JSON.toJSONString(param));
HttpRequest ht= HttpRequest.newRequest("http://172.24.132.45:20001/kowlone-provider-user/simple/1");
System.out.println(ht.postAsString(35000));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
/**
* $Id$
* Copyright(C) 2015-2020 kowlone - internet center, All Rights Reserved.
*/
package com.liquidnet.commons.lang.util; package com.liquidnet.commons.lang.util;
import org.apache.http.Consts; import org.springframework.http.*;
import org.apache.http.HttpEntity; import org.springframework.util.LinkedMultiValueMap;
import org.apache.http.HttpResponse; import org.springframework.util.MultiValueMap;
import org.apache.http.NameValuePair; import org.springframework.web.client.RestTemplate;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.config.MessageConstraints;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;
import javax.net.ssl.SSLContext; public class HttpUtil {
import java.io.IOException; /**
import java.net.URISyntaxException; * get请求
import java.nio.charset.Charset; *
import java.nio.charset.CodingErrorAction; * @param url
import java.security.KeyManagementException; * @param params 请求参数
import java.security.KeyStoreException; * @return
import java.security.NoSuchAlgorithmException; */
import java.security.cert.CertificateException; public static String get(String url, MultiValueMap<String, String> params) {
import java.security.cert.X509Certificate; return get(url, params, null);
import java.util.List;
/**
* HTTP工具类
*
* @author <a href="kowlone2006@163.com">kowlone</a>
* @version 1.0 2012-5-4 下午2:15:40
*/
public abstract class HttpUtil {
private static CloseableHttpClient httpclient = null;
private static CloseableHttpClient httpsClient = null;
static {
try {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(5000)
.setSocketTimeout(30000)
.setConnectTimeout(30000)
.setExpectContinueEnabled(false)
.build();
MessageConstraints messageConstraints = MessageConstraints.custom()
.setMaxHeaderCount(200)
.setMaxLineLength(2000)
.build();
ConnectionConfig connectionConfig = ConnectionConfig.custom()
.setMalformedInputAction(CodingErrorAction.IGNORE)
.setUnmappableInputAction(CodingErrorAction.IGNORE)
.setCharset(Consts.UTF_8)
.setMessageConstraints(messageConstraints)
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
connectionManager.setDefaultConnectionConfig(connectionConfig);
connectionManager.setMaxTotal(100);// 连接池最大并发连接数
connectionManager.setDefaultMaxPerRoute(10);// 单路由最大并发数
httpclient = HttpClients.custom().setConnectionManager(connectionManager).setDefaultRequestConfig(requestConfig).build();
try {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
//信任所有
@Override
public boolean isTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
return true;
}
}).build();
RequestConfig requestConfigHttps = RequestConfig.custom()
.setConnectionRequestTimeout(5000)
.setSocketTimeout(30000)
.setConnectTimeout(30000)
.setExpectContinueEnabled(false)
.build();
MessageConstraints messageConstraintsHttps = MessageConstraints.custom()
.setMaxHeaderCount(200)
.setMaxLineLength(2000)
.build();
ConnectionConfig connectionConfigHttps = ConnectionConfig.custom()
.setMalformedInputAction(CodingErrorAction.IGNORE)
.setUnmappableInputAction(CodingErrorAction.IGNORE)
.setCharset(Consts.UTF_8)
.setMessageConstraints(messageConstraintsHttps)
.build();
PoolingHttpClientConnectionManager connectionManagerHttps = new PoolingHttpClientConnectionManager();
connectionManager.setDefaultConnectionConfig(connectionConfigHttps);
connectionManager.setMaxTotal(100);// 连接池最大并发连接数
connectionManager.setDefaultMaxPerRoute(10);// 单路由最大并发数
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
httpsClient = HttpClients.custom().setSSLSocketFactory(sslsf).setConnectionManager(connectionManagerHttps).setDefaultRequestConfig(requestConfigHttps).build();
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
//logger.error("create httpUtil error", e);
}
}
public static String get(String scheme, String host, String path, List<NameValuePair> uriParam, List<NameValuePair> header,
Charset charset) throws IOException {
URIBuilder uriBuilder = new URIBuilder().setScheme(scheme).setHost(host).setPath(path);
if (uriParam != null) {
uriBuilder.setParameters(uriParam);
}
try {
HttpGet httpget = new HttpGet(uriBuilder.build());
if (header != null) {
for (NameValuePair nvp : header) {
httpget.setHeader(nvp.getName(), nvp.getValue());
}
}
ResponseHandler<String> responseHandler = getResponseHandler(charset, null);
return httpclient.execute(httpget, responseHandler);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
}
public static String get(String scheme, String host, String path, List<NameValuePair> uriParam, List<NameValuePair> header)
throws IOException {
return get(scheme, host, path, uriParam, header, Consts.UTF_8);
}
public static String get(HttpGet httpGet, Charset charset) throws IOException {
ResponseHandler<String> responseHandler = getResponseHandler(charset, null);
// logger.debug("get data is :{}", httpGet.toString());
return httpclient.execute(httpGet, responseHandler);
} }
public static String get(HttpGet httpGet) throws IOException { /**
return get(httpGet, Consts.UTF_8); * get请求
*
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String get(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.GET);
} }
public static byte[] binaryGet(HttpGet httpGet) throws IOException { /**
CloseableHttpResponse response = httpclient.execute(httpGet); * post请求
return EntityUtils.toByteArray(response.getEntity()); *
* @param url
* @param params 请求参数
* @return
*/
public static String post(String url, MultiValueMap<String, String> params) {
return post(url, params, null);
} }
public static String post(HttpPost httpPost, Charset charset) throws IOException { /**
ResponseHandler<String> responseHandler = getResponseHandler(charset, null); * post请求
return httpclient.execute(httpPost, responseHandler); *
* @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String post(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.POST);
} }
public static String post(HttpPost httpPost) throws IOException { /**
return post(httpPost, Consts.UTF_8); * put请求
*
* @param url
* @param params 请求参数
* @return
*/
public static String put(String url, MultiValueMap<String, String> params) {
return put(url, params, null);
} }
public static String post(String uri, List<? extends NameValuePair> params, final OKResponseHandler okResponseHandler) /**
throws IOException { * put请求
HttpPost post = new HttpPost(uri); *
post.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8)); * @param url
return httpclient.execute(post, getResponseHandler(Consts.UTF_8, okResponseHandler)); * @param params 请求参数
* @param headers 请求头
* @return
*/
public static String put(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.PUT);
} }
public static String postHttps(String uri, List<? extends NameValuePair> params, final OKResponseHandler okResponseHandler) /**
throws IOException { * delete请求
HttpPost post = new HttpPost(uri); *
post.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8)); * @param url
return httpsClient.execute(post, getResponseHandler(Consts.UTF_8, okResponseHandler)); * @param params 请求参数
* @return
*/
public static String delete(String url, MultiValueMap<String, String> params) {
return delete(url, params, null);
} }
public static byte[] binaryPost(HttpPost httpPost) throws IOException { /**
CloseableHttpResponse response = httpclient.execute(httpPost); * delete请求
*
return EntityUtils.toByteArray(response.getEntity()); * @param url
* @param params 请求参数
* @param headers 请求头
* @return
*/
public static String delete(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers) {
return request(url, params, headers, HttpMethod.DELETE);
} }
/** /**
* 将原来get方法中ResponseHandler提成方法,由get/post共用 * 表单请求
* *
* @param url
* @param params 请求参数
* @param headers 请求头
* @param method 请求方式
* @return * @return
*/ */
private static ResponseHandler<String> getResponseHandler(Charset charset, OKResponseHandler okResponseHandler) { public static String request(String url, MultiValueMap<String, String> params, MultiValueMap<String, String> headers, HttpMethod method) {
ResponseHandler<String> responseHandler = response -> { if (params == null) {
params = new LinkedMultiValueMap<>();
int status = response.getStatusLine().getStatusCode(); }
if (status >= 200 && status < 300) { return request(url, params, headers, method, MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity entity = response.getEntity();
if (okResponseHandler != null) {
okResponseHandler.handler(response);
}
return entity != null ? EntityUtils.toString(entity, charset) : null;
} else {
//logger.error(EntityUtils.toString(response.getEntity()));
throw new ClientProtocolException("Unexpected response status: " + status);
}
};
return responseHandler;
} }
/**
public interface OKResponseHandler { * http请求
void handler(HttpResponse response); *
* @param url
* @param params 请求参数
* @param headers 请求头
* @param method 请求方式
* @param mediaType 参数类型
* @return
*/
public static String request(String url, Object params, MultiValueMap<String, String> headers, HttpMethod method, MediaType mediaType) {
if (url == null || url.trim().isEmpty()) {
return null;
}
RestTemplate client = new RestTemplate();
// header
HttpHeaders httpHeaders = new HttpHeaders();
if (headers != null) {
httpHeaders.addAll(headers);
}
// 提交方式:表单、json
httpHeaders.setContentType(mediaType);
HttpEntity<Object> httpEntity = new HttpEntity(params, httpHeaders);
ResponseEntity<String> response = client.exchange(url, method, httpEntity, String.class);
return response.getBody();
} }
} }
...@@ -5,6 +5,9 @@ liquidnet: ...@@ -5,6 +5,9 @@ liquidnet:
security: security:
username: user username: user
password: user123 password: user123
jwt:
expire-time: 43200
secret: qZHglvNP0n0aOOckHiQXq5JMD468J4eG
mysql: mysql:
urlHostAndPort: 39.106.122.201:3308 urlHostAndPort: 39.106.122.201:3308
username: testmall username: testmall
......
...@@ -20,6 +20,9 @@ liquidnet: ...@@ -20,6 +20,9 @@ liquidnet:
database-name: ln_adam database-name: ln_adam
mybatis-plus: mybatis-plus:
log-level: debug log-level: debug
aliyun:
accessKeyId:
accessSecret:
# conf: # conf:
# webUrl: ${liquidnet.service.adam.conf.webUrl} # webUrl: ${liquidnet.service.adam.conf.webUrl}
# user: # user:
......
...@@ -4,7 +4,7 @@ server: ...@@ -4,7 +4,7 @@ server:
uri-encoding: UTF-8 uri-encoding: UTF-8
servlet: servlet:
context-path: context-path:
# context-path: ${liquidnet.info.context} # context-path: ${liquidnet.info.context}
# server: # server:
# tomcat: # tomcat:
# accept-count: 500 # accept-count: 500
...@@ -37,7 +37,9 @@ spring: ...@@ -37,7 +37,9 @@ spring:
application: application:
name: ${liquidnet.info.name} name: ${liquidnet.info.name}
autoconfigure: autoconfigure:
exclude: org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration exclude:
- org.springframework.cloud.bus.BusAutoConfiguration
- org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
profiles: profiles:
include: common-service include: common-service
# cloud: # cloud:
...@@ -76,12 +78,18 @@ zuul: ...@@ -76,12 +78,18 @@ zuul:
# pre: # 类型 # pre: # 类型
# disable: true # disable: true
# ----------------------------------------------------------- # -----------------------------------------------------------
common: global:
login: login:
url: /adam/login url: /adam/login/sms,
exclude: /adam/login/mobile,
auth: /adam/login/tpa,
url: /adam/login,/adam/v2/api-docs,/kylin/v2/api-docs exclude:
url: /adam/v2/api-docs-ext,
/kylin/v2/api-docs-ext,
/adam/send,
/adam/login/sms,
/adam/login/mobile,
/adam/login/tpa,
# ----------------------------------------------------------- # -----------------------------------------------------------
#解决错误 com.netflix.client.ClientException: Load balancer does not have available server for client:panfeng-item-service #解决错误 com.netflix.client.ClientException: Load balancer does not have available server for client:panfeng-item-service
#这样就可以即指定path与URL,又不破坏Zuul的Hystrix与Ribbon特性了。 #这样就可以即指定path与URL,又不破坏Zuul的Hystrix与Ribbon特性了。
......
package com.liquidnet.service.feign.adam.api; package com.liquidnet.service.feign.adam.api;
import com.liquidnet.service.ResponseDto; import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import feign.hystrix.FallbackFactory; import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@Component @Component
@FeignClient(name = "liquidnet-service-adam", @FeignClient(name = "liquidnet-service-adam",
contextId = "sev-adam-auth", path = "", contextId = "", path = "",
fallback = FallbackFactory.Default.class) fallback = FallbackFactory.Default.class)
public interface FeignAdamAuthClient { public interface FeignAdamLoginClient {
@PostMapping(value = "login") @PostMapping(value = "login/sms")
ResponseDto<Object> loginByPwd(@RequestParam String mobile, @RequestParam String password); ResponseDto<AdamLoginInfoVo> loginBySms(@RequestParam String mobile, @RequestParam String code);
@PostMapping(value = {"login/mobile"})
ResponseDto<AdamLoginInfoVo> loginByMobile(@RequestParam String accessToken);
@PostMapping(value = {"login/tpa"})
ResponseDto<AdamLoginInfoVo> loginByTpa(@RequestBody AdamThirdPartParam parameter);
} }
package com.liquidnet.service.adam.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "AdamThirdPartParam", description = "第三方账号登录注册入参")
@Data
public class AdamThirdPartParam implements Serializable {
private static final long serialVersionUID = 675588088506034208L;
@ApiModelProperty(position = 11, required = true, value = "第三方OPENID[64]")
private String openId;
@ApiModelProperty(position = 12, required = true, value = "昵称[64]", example = "Swagger")
private String nickName;
@ApiModelProperty(position = 13, required = true, value = "头像[255]", example = "http://pic.zhengzai.tv/default/avatar.png")
private String avatar;
@ApiModelProperty(position = 14, required = true, value = "平台类型[255]", allowableValues = "WEIBO,WECHAT,QQ")
private String platform;
@ApiModelProperty(position = 15, required = false, value = "手机号[新账号时必传]", example = "13111111111")
private String mobile;
@ApiModelProperty(position = 16, required = false, value = "验证码[新账号时必传]", example = "111111")
private String code;
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@ApiModel(value = "AdamLoginInfoVo", description = "登录成功响应数据")
@Data
public class AdamLoginInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = 4209754800686327524L;
@ApiModelProperty(position = 11, value = "TOKEN")
private String token;
@ApiModelProperty(position = 12, value = "用户信息")
private AdamUserInfoVo userInfo;
@ApiModelProperty(position = 13, value = "实名信息")
private AdamRealInfoVo realNameInfo;
@ApiModelProperty(position = 14, value = "用户第三方账号信息")
private List<AdamThirdPartInfoVo> thirdPartInfo;
@ApiModelProperty(position = 15, value = "会员信息 -> 待定")
private Object memberInfo;
private static final AdamLoginInfoVo obj = new AdamLoginInfoVo();
public static AdamLoginInfoVo getNew() {
try {
return (AdamLoginInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new AdamLoginInfoVo();
}
}
package com.liquidnet.service.adam.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "AdamRealInfoVo", description = "实名信息")
@Data
public class AdamRealInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = -3469256375584132928L;
@ApiModelProperty(position = 11, value = "姓名[30]")
private String name;
@ApiModelProperty(position = 12, value = "证件号[50]")
private String idCard;
@ApiModelProperty(position = 13, value = "状态:1-正常")
private String state;
private static final AdamRealInfoVo obj = new AdamRealInfoVo();
public static AdamRealInfoVo getNew() {
try {
return (AdamRealInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return new AdamRealInfoVo();
}
}
...@@ -8,8 +8,6 @@ import lombok.Data; ...@@ -8,8 +8,6 @@ import lombok.Data;
@Data @Data
public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable { public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = -3239086191919676121L; private static final long serialVersionUID = -3239086191919676121L;
@ApiModelProperty(position = 10, value = "Third Party ID[64]")
private String thirdPartyId;
@ApiModelProperty(position = 11, value = "用户ID[64]") @ApiModelProperty(position = 11, value = "用户ID[64]")
private String uid; private String uid;
@ApiModelProperty(position = 12, value = "第三方ID[64]") @ApiModelProperty(position = 12, value = "第三方ID[64]")
...@@ -18,10 +16,10 @@ public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable { ...@@ -18,10 +16,10 @@ public class AdamThirdPartInfoVo implements java.io.Serializable, Cloneable {
private String nickname; private String nickname;
@ApiModelProperty(position = 14, value = "头像[255]") @ApiModelProperty(position = 14, value = "头像[255]")
private String avatar; private String avatar;
@ApiModelProperty(position = 14, value = "平台类型[20]") @ApiModelProperty(position = 15, value = "平台类型[20]")
private String platform; private String platform;
@ApiModelProperty(position = 14, value = "状态[1-绑定,2-解绑]") @ApiModelProperty(position = 16, value = "状态[1-绑定,2-解绑]")
private int state; private Integer state;
private static final AdamThirdPartInfoVo obj = new AdamThirdPartInfoVo(); private static final AdamThirdPartInfoVo obj = new AdamThirdPartInfoVo();
......
...@@ -10,26 +10,32 @@ public class AdamUserInfoVo implements java.io.Serializable, Cloneable { ...@@ -10,26 +10,32 @@ public class AdamUserInfoVo implements java.io.Serializable, Cloneable {
private static final long serialVersionUID = 8479869354894030303L; private static final long serialVersionUID = 8479869354894030303L;
@ApiModelProperty(position = 10, value = "用户ID[64]") @ApiModelProperty(position = 10, value = "用户ID[64]")
private String uid; private String uid;
@ApiModelProperty(position = 11, value = "昵称[32]") @ApiModelProperty(position = 11, value = "手机号[20]")
private String username; private String mobile;
@ApiModelProperty(position = 12, value = "性别[32]") @ApiModelProperty(position = 12, value = "昵称[32]")
private String nickName;
@ApiModelProperty(position = 13, value = "状态[1-正常,2-注销]")
private Integer state;
@ApiModelProperty(position = 14, value = "性别[32]")
private String sex; private String sex;
@ApiModelProperty(position = 13, value = "生日[YYYY-MM-DD]") @ApiModelProperty(position = 15, value = "生日[YYYY-MM-DD]")
private String birthday; private String birthday;
@ApiModelProperty(position = 14, value = "常住地/区域") @ApiModelProperty(position = 16, value = "常住地/区域")
private String area; private String area;
@ApiModelProperty(position = 15, value = "个性签名") @ApiModelProperty(position = 17, value = "个性签名")
private String signature; private String signature;
@ApiModelProperty(position = 16, value = "头像") @ApiModelProperty(position = 18, value = "头像")
private String avatar; private String avatar;
@ApiModelProperty(position = 17, value = "背景图") @ApiModelProperty(position = 19, value = "背景图")
private String background; private String background;
@ApiModelProperty(position = 18, value = "标签") @ApiModelProperty(position = 20, value = "标签")
private String tagMe; private String tagMe;
@ApiModelProperty(position = 19, value = "") @ApiModelProperty(position = 21, value = "注册时间")
private String rongCloudToken; private String createAt;
// @ApiModelProperty(position = 20, value = "隐私配置") @ApiModelProperty(position = 22, value = "是否完善信息[0-未完善,1-已完善]")
// private private Integer isComplete;
// @ApiModelProperty(position = 23, value = "")
// private String rongCloudToken;
private static final AdamUserInfoVo obj = new AdamUserInfoVo(); private static final AdamUserInfoVo obj = new AdamUserInfoVo();
......
package com.liquidnet.service.adam.service; package com.liquidnet.service.adam.service;
import com.liquidnet.service.adam.dto.vo.AdamRealInfoVo;
import com.liquidnet.service.adam.entity.AdamRealName; import com.liquidnet.service.adam.entity.AdamRealName;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IAdamRealNameService extends IService<AdamRealName> { public interface IAdamRealNameService extends IService<AdamRealName> {
AdamRealInfoVo queryByUid(String uid);
} }
package com.liquidnet.service.adam.service; package com.liquidnet.service.adam.service;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.entity.AdamThirdParty; import com.liquidnet.service.adam.entity.AdamThirdParty;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 用户第三方账号信息 服务类 * 用户第三方账号信息 服务类
...@@ -13,4 +16,7 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +16,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IAdamThirdPartyService extends IService<AdamThirdParty> { public interface IAdamThirdPartyService extends IService<AdamThirdParty> {
List<AdamThirdPartInfoVo> queryByUid(String uid);
AdamThirdPartInfoVo queryByOpenId(String openId, String platform);
} }
package com.liquidnet.service.adam.service; package com.liquidnet.service.adam.service;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.entity.AdamUserInfo; import com.liquidnet.service.adam.entity.AdamUserInfo;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
/** /**
* <p> * <p>
* 正在现场用户信息 服务类 * 用户信息 服务类
* </p> * </p>
* *
* @author liquidnet * @author liquidnet
...@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +14,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IAdamUserInfoService extends IService<AdamUserInfo> { public interface IAdamUserInfoService extends IService<AdamUserInfo> {
void edit(AdamUserInfoVo userInfoVo);
} }
package com.liquidnet.service.adam.service; package com.liquidnet.service.adam.service;
import com.liquidnet.service.adam.dto.AdamThirdPartParam;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.entity.AdamUser; import com.liquidnet.service.adam.entity.AdamUser;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -13,4 +15,25 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +15,25 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IAdamUserService extends IService<AdamUser> { public interface IAdamUserService extends IService<AdamUser> {
String queryUidByRedis(String mobile);
String queryUidByRedis(String openId, String platform);
AdamUserInfoVo queryByUid(String uid);
/**
* 手机号注册
*
* @param mobile
* @return AdamUserInfoVo
*/
AdamUserInfoVo register(String mobile);
/**
* 第三方账号注册
*
* @param thirdPartParam
* @return AdamUserInfoVo
*/
AdamUserInfoVo register(AdamThirdPartParam thirdPartParam);
} }
...@@ -55,7 +55,7 @@ create table adam_user ...@@ -55,7 +55,7 @@ create table adam_user
( (
mid int unsigned auto_increment primary key, mid int unsigned auto_increment primary key,
uid varchar(64) not null, uid varchar(64) not null,
mobile varchar(16) not null, mobile varchar(30) not null,
passwd varchar(64), passwd varchar(64),
pay_code varchar(64), pay_code varchar(64),
state tinyint comment '1-NORMAL,2-INVALID', state tinyint comment '1-NORMAL,2-INVALID',
...@@ -94,7 +94,7 @@ create table adam_real_name ...@@ -94,7 +94,7 @@ create table adam_real_name
real_name_id varchar(64) not null, real_name_id varchar(64) not null,
uid varchar(64) not null, uid varchar(64) not null,
type enum ('1','2','3','4','5') not null default '1' comment '1-大陆身份证,2-港澳通行证,3-台胞证,4-护照,5-军官证', type enum ('1','2','3','4','5') not null default '1' comment '1-大陆身份证,2-港澳通行证,3-台胞证,4-护照,5-军官证',
name varchar(20) not null comment '真实姓名', name varchar(30) not null comment '真实姓名',
id_card varchar(50) not null comment '证件号码', id_card varchar(50) not null comment '证件号码',
state tinyint not null comment '0-INIT,1-NORMAL,2-INVALID', state tinyint not null comment '0-INIT,1-NORMAL,2-INVALID',
created_at datetime not null, created_at datetime not null,
......
...@@ -35,6 +35,15 @@ ...@@ -35,6 +35,15 @@
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId> <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dypnsapi</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.liquidnet.service.adam.config;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AliyunDypnsConfigure {
@Value("${liquidnet.aliyun.accessKeyId}")
private String accessKeyId;
@Value("${liquidnet.aliyun.accessSecret}")
private String accessSecret;
@Bean
public DefaultAcsClient initAcsClient() {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
return new DefaultAcsClient(profile);
}
}
...@@ -18,6 +18,13 @@ public class AdamRedisConst { ...@@ -18,6 +18,13 @@ public class AdamRedisConst {
public static final String MEMBER_MEMBER_NO_MAX_KEY = ADAM.concat(":members:member_no_max:"); 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:"; // public static final String USER_CONFIRM_SMS_CODE_KEY = ADAM + ":user:sms_confirm:";
// //
// public static final String USER_EMAIL_CONFIRM_KEY = ADAM + ":user:email:confirm:"; // public static final String USER_EMAIL_CONFIRM_KEY = ADAM + ":user:email:confirm:";
......
package com.liquidnet.service.adam.controller; package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.service.ResponseDto; import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.AdamAddressesParam; import com.liquidnet.service.adam.dto.AdamAddressesParam;
import com.liquidnet.service.adam.dto.vo.AdamAddressesVo; import com.liquidnet.service.adam.dto.vo.AdamAddressesVo;
...@@ -20,6 +21,7 @@ import java.util.List; ...@@ -20,6 +21,7 @@ import java.util.List;
* @author liquidnet * @author liquidnet
* @since 2021-05-10 * @since 2021-05-10
*/ */
@ApiSupport(order = 10060)
@Api(tags = "收获地址") @Api(tags = "收获地址")
@Slf4j @Slf4j
@RestController @RestController
......
...@@ -2,6 +2,7 @@ package com.liquidnet.service.adam.controller; ...@@ -2,6 +2,7 @@ package com.liquidnet.service.adam.controller;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.service.ResponseDto; import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.AdamCollectParam; import com.liquidnet.service.adam.dto.AdamCollectParam;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.*;
* @author liquidnet * @author liquidnet
* @since 2021-05-10 * @since 2021-05-10
*/ */
@ApiSupport(order = 10050)
@Api(tags = "收藏") @Api(tags = "收藏")
@Slf4j @Slf4j
@RestController @RestController
......
package com.liquidnet.service.adam.controller; package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.ResponseDto; import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.AdamEntersParam; import com.liquidnet.service.adam.dto.AdamEntersParam;
...@@ -26,6 +27,7 @@ import java.util.List; ...@@ -26,6 +27,7 @@ import java.util.List;
* @author liquidnet * @author liquidnet
* @since 2021-04-28 * @since 2021-04-28
*/ */
@ApiSupport(order = 10040)
@Api(tags = "入场人") @Api(tags = "入场人")
@Slf4j @Slf4j
@RestController @RestController
......
package com.liquidnet.service.adam.controller;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.dypnsapi.model.v20170525.GetMobileRequest;
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.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.service.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 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.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@ApiSupport(order = 10010)
@Api(tags = "用户登录")
@Slf4j
@RestController
@RequestMapping("")
public class AdamLoginController {
@Autowired
Environment environment;
@Autowired
JwtValidator jwtValidator;
@Autowired
DefaultAcsClient defaultAcsClient;
@Autowired
IAdamUserService adamUserService;
@Autowired
IAdamRealNameService adamRealNameService;
@Autowired
IAdamThirdPartyService adamThirdPartyService;
/*@ApiOperationSupport(order = 1)
@ApiOperation(value = "手机号密码登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "form", dataType = "String", name = "password", value = "密码"),
})
@PostMapping(value = {""})
public ResponseDto<AdamLoginInfoVo> loginByPwd(@RequestParam String mobile, @RequestParam String password) {
log.info("mobile:{},pwd:{}", mobile, password);
DigestUtils.md5DigestAsHex((password + "salt_").getBytes(StandardCharsets.UTF_8));
return ResponseDto.success(AdamLoginInfoVo.getNew());
}*/
@ApiOperationSupport(order = 2)
@ApiOperation(value = "发送验证码")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
})
@GetMapping(value = {"send"})
public ResponseDto<Object> sendSms(@RequestParam String mobile) {
log.info("send to mobile:{}", mobile);
LinkedMultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
paramsMap.add("mobile", mobile);
LinkedMultiValueMap<String, String> headersMap = new LinkedMultiValueMap<>();
headersMap.add("token", null);
try {
// TODO: 2021/5/12
String respStr = HttpUtil.post("https://service.zhengzai.tv/smsCode", paramsMap, headersMap);
log.info("###PHP.API[{}].RESP[{}]", "https://service.zhengzai.tv/smsCode", respStr);
// Map respMap = JsonUtils.fromJson(respStr, Map.class);
} catch (Exception e) {
log.error("验证码发送异常[mobile:{}]", mobile, e);
return ResponseDto.failure("验证码发送失败");
}
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 = "code", value = "验证码"),
})
@PostMapping(value = {"login/sms"})
public ResponseDto<AdamLoginInfoVo> loginBySms(@RequestParam String mobile, @RequestParam String code) {
// TODO: 2021/5/12 参数检验
log.info("mobile:{},pwd:{}", mobile, code);
if (!this.checkSmsCode(mobile, code)) return ResponseDto.failure("验证码无效");
String uid = adamUserService.queryUidByRedis(mobile);
AdamUserInfoVo userInfoVo =
StringUtils.isEmpty(uid) ? adamUserService.register(mobile) : adamUserService.queryByUid(uid);
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
if (userInfoVo.getIsComplete() == 1) {
loginInfoVo.setRealNameInfo(adamRealNameService.queryByUid(userInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamThirdPartyService.queryByUid(userInfoVo.getUid()));
// TODO: 2021/5/12 会员信息
loginInfoVo.setMemberInfo(null);
}
loginInfoVo.setUserInfo(userInfoVo);
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put("uid", userInfoVo.getUid());
loginInfoVo.setToken(jwtValidator.create(claimsMap));
return ResponseDto.success(loginInfoVo);
}
@ApiOperationSupport(order = 4)
@ApiOperation(value = "手机号一键登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "accessToken", value = "访问令牌"),
})
@PostMapping(value = {"login/mobile"})
public ResponseDto<AdamLoginInfoVo> loginByMobile(@RequestParam String accessToken) {
// TODO: 2021/5/10
log.info("login by mobile access token:{}", accessToken);
String mobile = this.getMobile(accessToken);
if (StringUtils.isEmpty(mobile)) return ResponseDto.failure("手机号获取失败,请更换登录方式");
String uid = adamUserService.queryUidByRedis(mobile);
AdamUserInfoVo userInfoVo =
StringUtils.isEmpty(uid) ? adamUserService.register(mobile) : adamUserService.queryByUid(uid);
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
if (loginInfoVo.getUserInfo().getIsComplete() == 1) {
loginInfoVo.setRealNameInfo(adamRealNameService.queryByUid(userInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamThirdPartyService.queryByUid(userInfoVo.getUid()));
// TODO: 2021/5/12 会员信息
loginInfoVo.setMemberInfo(null);
}
loginInfoVo.setUserInfo(userInfoVo);
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put("uid", userInfoVo.getUid());
loginInfoVo.setToken(jwtValidator.create(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)
@ApiOperation(value = "第三方账号登录")
@PostMapping(value = {"login/tpa"})
public ResponseDto<AdamLoginInfoVo> loginByTpa(@RequestBody AdamThirdPartParam parameter) {
// TODO: 2021/5/10
log.info("login by tpa:{}", JsonUtils.toJson(parameter));
AdamLoginInfoVo loginInfoVo = AdamLoginInfoVo.getNew();
if (StringUtils.isEmpty(parameter.getMobile())) {
AdamThirdPartInfoVo thirdPartInfoVo = adamThirdPartyService.queryByOpenId(parameter.getOpenId(), parameter.getPlatform());
if (Objects.isNull(thirdPartInfoVo)) return ResponseDto.failure("第三方账号未注册");
loginInfoVo.setUserInfo(adamUserService.queryByUid(thirdPartInfoVo.getUid()));
loginInfoVo.setRealNameInfo(adamRealNameService.queryByUid(thirdPartInfoVo.getUid()));
loginInfoVo.setThirdPartInfo(adamThirdPartyService.queryByUid(thirdPartInfoVo.getUid()));
} else {// 新账号注册
if (!this.checkSmsCode(parameter.getMobile(), parameter.getCode())) return ResponseDto.failure("验证码无效");
loginInfoVo.setUserInfo(adamUserService.register(parameter));
}
Map<String, Object> claimsMap = new HashMap<>();
claimsMap.put("uid", loginInfoVo.getUserInfo().getUid());
loginInfoVo.setToken(jwtValidator.create(claimsMap));
return ResponseDto.success(loginInfoVo);
}
/* ---------------------------- Internal Method ---------------------------- */
private boolean checkSmsCode(String mobile, String code) {
if ("dev".equals(environment.getProperty("spring.profiles.active")) && "111111".equals(code)) {
return true;
}
LinkedMultiValueMap<String, String> paramsMap = new LinkedMultiValueMap<>();
paramsMap.add("mobile", mobile);
paramsMap.add("code", code);
LinkedMultiValueMap<String, String> headersMap = new LinkedMultiValueMap<>();
headersMap.add("token", null);
try {
// TODO: 2021/5/12
String respStr = HttpUtil.get("https://service.zhengzai.tv/smsValidation", paramsMap, headersMap);
log.info("###PHP.API.RESP:{}", respStr);
Map respMap = JsonUtils.fromJson(respStr, Map.class);
return StringUtils.equalsIgnoreCase("OK", (String) respMap.get("message"));
} catch (Exception e) {
log.error("验证码验证异常[mobile:{},code:{}]", mobile, code, e);
return false;
}
}
private String getMobile(String accessToken) {
try {
GetMobileRequest request = new GetMobileRequest();
request.setAccessToken(accessToken);
GetMobileResponse response = defaultAcsClient.getAcsResponse(request);
if (!Objects.isNull(response) && response.getCode().equalsIgnoreCase("OK")) {
return response.getGetMobileResultDTO().getMobile();
}
} catch (ClientException e) {
log.error("error:aliyun.dypns.api:{}", accessToken, e);
}
return null;
}
}
package com.liquidnet.service.adam.controller; package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.service.ResponseDto; import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.vo.AdamMemberVo; import com.liquidnet.service.adam.dto.vo.AdamMemberVo;
import com.liquidnet.service.adam.service.IAdamMemberService; import com.liquidnet.service.adam.service.IAdamMemberService;
...@@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.GetMapping; ...@@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ApiSupport(order = 10030)
@Api(tags = "会员信息") @Api(tags = "会员信息")
@Slf4j @Slf4j
@RestController @RestController
......
package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.liquidnet.commons.lang.util.JwtUtil;
import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
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.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@Api(tags = "用户登录")
@Slf4j
@RestController
@RequestMapping("login")
public class AdamUserAuthController {
@ApiOperationSupport(order = 1)
@ApiOperation(value = "手机号密码登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "mobile", value = "手机号"),
@ApiImplicitParam(type = "form", dataType = "String", name = "password", value = "密码"),
})
@PostMapping(value = {""})
public ResponseDto<Object> loginByPwd(@RequestParam String mobile, @RequestParam String password) {
log.info("mobile:{},pwd:{}", mobile, password);
Map<String, Object> claimsMap = new HashMap<>(), rstMap = new HashMap<>();
claimsMap.put("username", "zhanggb");
claimsMap.put("uid", "2021");
String token = JwtUtil.create(claimsMap);
log.info("token:{}", token);
rstMap.put("token", token);
rstMap.put("userInfo", AdamUserInfoVo.getNew());
rstMap.put("thiredPartInfo", AdamThirdPartInfoVo.getNew());
// TODO: 2021/5/10 会员信息
rstMap.put("cardsInfo", null);
return ResponseDto.success(rstMap);
}
@ApiOperationSupport(order = 2)
@ApiOperation(value = "发送验证码")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
})
@GetMapping(value = {"send/{mobile}"})
public ResponseDto<Object> sendSms(@PathVariable String mobile) {
log.info("send to mobile:{}", mobile);
// 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 = "code", value = "验证码"),
})
@PostMapping(value = {"sms"})
public ResponseDto<Object> loginBySms(@RequestParam String mobile, @RequestParam String code) {
log.info("mobile:{},pwd:{}", mobile, code);
Map<String, Object> claimsMap = new HashMap<>(), rstMap = new HashMap<>();
claimsMap.put("username", "zhanggb");
claimsMap.put("uid", "2021");
String token = JwtUtil.create(claimsMap);
log.info("token:{}", token);
rstMap.put("token", token);
rstMap.put("userInfo", AdamUserInfoVo.getNew());
rstMap.put("thiredPartInfo", AdamThirdPartInfoVo.getNew());
// TODO: 2021/5/10 会员信息
rstMap.put("cardsInfo", null);
return ResponseDto.success(token);
}
@ApiOperationSupport(order = 4)
@ApiOperation(value = "手机号一键登录")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "accessToken", value = "访问令牌"),
})
@PostMapping(value = {"tpa/mobile"})
public ResponseDto<Object> loginByTpaMobile(@RequestParam String accessToken) {
log.info("login by mobile access token:{}", accessToken);
// TODO: 2021/5/10
Map<String, Object> claimsMap = new HashMap<>(), rstMap = new HashMap<>();
claimsMap.put("username", "zhanggb");
claimsMap.put("uid", "2021");
String token = JwtUtil.create(claimsMap);
log.info("token:{}", token);
rstMap.put("token", token);
rstMap.put("userInfo", AdamUserInfoVo.getNew());
rstMap.put("thiredPartInfo", AdamThirdPartInfoVo.getNew());
// TODO: 2021/5/10 会员信息
rstMap.put("cardsInfo", null);
return ResponseDto.success(rstMap);
}
@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"),
})
@PostMapping(value = {"tpa"})
public ResponseDto<Object> loginByTpa(@RequestParam String openId, @RequestParam String nickname,
@RequestParam String avatar, @RequestParam String platform) {
log.info("login by tpa openId:{}, nickname:{}, avatar: {}, platform:{}", openId, nickname, avatar, platform);
// TODO: 2021/5/10
Map<String, Object> claimsMap = new HashMap<>(), rstMap = new HashMap<>();
claimsMap.put("username", "zhanggb");
claimsMap.put("uid", "2021");
String token = JwtUtil.create(claimsMap);
log.info("token:{}", token);
rstMap.put("token", token);
rstMap.put("userInfo", AdamUserInfoVo.getNew());
rstMap.put("thiredPartInfo", AdamThirdPartInfoVo.getNew());
// TODO: 2021/5/10 会员信息
rstMap.put("cardsInfo", null);
return ResponseDto.success(rstMap);
}
@ApiOperationSupport(order = 6)
@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<Object> 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
Map<String, Object> claimsMap = new HashMap<>(), rstMap = new HashMap<>();
claimsMap.put("username", "zhanggb");
claimsMap.put("uid", "2021");
String token = JwtUtil.create(claimsMap);
log.info("token:{}", token);
rstMap.put("token", token);
rstMap.put("userInfo", AdamUserInfoVo.getNew());
rstMap.put("thiredPartInfo", AdamThirdPartInfoVo.getNew());
// TODO: 2021/5/10 会员信息
rstMap.put("cardsInfo", null);
return ResponseDto.success(rstMap);
}
}
package com.liquidnet.service.adam.controller; package com.liquidnet.service.adam.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.ResponseDto; import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.AdamUserInfoParam; import com.liquidnet.service.adam.dto.AdamUserInfoParam;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo; import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo; import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.service.IAdamUserInfoService;
import com.liquidnet.service.adam.service.IAdamUserService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ApiSupport(order = 10020)
@Api(tags = "用户中心") @Api(tags = "用户中心")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("user") @RequestMapping("user")
public class AdamUserController { public class AdamUserController {
@Autowired
IAdamUserService adamUserService;
@Autowired
IAdamUserInfoService adamUserInfoService;
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "个人资料编辑") @ApiOperation(value = "个人资料编辑")
@PostMapping(value = {"edit"}) @PostMapping(value = {"edit"})
public ResponseDto<AdamUserInfoVo> edit(@RequestBody AdamUserInfoParam adamUserInfoParam) { public ResponseDto<AdamUserInfoVo> edit(@RequestBody AdamUserInfoParam adamUserInfoParam) {
// TODO: 2021/5/10
log.info("adamUserInfoParam:{}", JsonUtils.toJson(adamUserInfoParam)); log.info("adamUserInfoParam:{}", JsonUtils.toJson(adamUserInfoParam));
String uid = "1";
// TODO: 2021/5/10 AdamUserInfoVo userInfoVo = adamUserService.queryByUid(uid);
BeanUtils.copyProperties(adamUserInfoParam, userInfoVo);
adamUserInfoService.edit(userInfoVo);
return ResponseDto.success(AdamUserInfoVo.getNew()); return ResponseDto.success(userInfoVo);
} }
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
......
...@@ -6,7 +6,6 @@ import com.liquidnet.common.mq.constant.MQConst; ...@@ -6,7 +6,6 @@ import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.BsonUtil; import com.liquidnet.commons.lang.util.BsonUtil;
import com.liquidnet.commons.lang.util.SqlMapping; import com.liquidnet.commons.lang.util.SqlMapping;
import com.liquidnet.service.adam.constant.AdamRedisConst; import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamEntersVo;
import com.liquidnet.service.adam.entity.AdamEnters; import com.liquidnet.service.adam.entity.AdamEnters;
import com.liquidnet.service.adam.mapper.AdamEntersMapper; import com.liquidnet.service.adam.mapper.AdamEntersMapper;
import com.liquidnet.service.adam.service.IAdamEntersService; import com.liquidnet.service.adam.service.IAdamEntersService;
......
package com.liquidnet.service.adam.service.impl; package com.liquidnet.service.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamRealInfoVo;
import com.liquidnet.service.adam.entity.AdamRealName; import com.liquidnet.service.adam.entity.AdamRealName;
import com.liquidnet.service.adam.mapper.AdamRealNameMapper; import com.liquidnet.service.adam.mapper.AdamRealNameMapper;
import com.liquidnet.service.adam.service.IAdamRealNameService; import com.liquidnet.service.adam.service.IAdamRealNameService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
...@@ -16,5 +23,20 @@ import org.springframework.stereotype.Service; ...@@ -16,5 +23,20 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class AdamRealNameServiceImpl extends ServiceImpl<AdamRealNameMapper, AdamRealName> implements IAdamRealNameService { public class AdamRealNameServiceImpl extends ServiceImpl<AdamRealNameMapper, AdamRealName> implements IAdamRealNameService {
@Autowired
MongoTemplate mongoTemplate;
@Autowired
RedisUtil redisUtil;
@Override
public AdamRealInfoVo queryByUid(String uid) {
AdamRealInfoVo realInfoVo = (AdamRealInfoVo) redisUtil.hget(AdamRedisConst.INFO_REAL_NAME, uid);
if (null == realInfoVo) {
realInfoVo = mongoTemplate.findOne(Query.query(Criteria.where("uid").is(uid).and("state").is(1)),
AdamRealInfoVo.class, AdamRealInfoVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_REAL_NAME, uid, realInfoVo);
}
return realInfoVo;
}
} }
package com.liquidnet.service.adam.service.impl; package com.liquidnet.service.adam.service.impl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamThirdPartInfoVo;
import com.liquidnet.service.adam.entity.AdamThirdParty; import com.liquidnet.service.adam.entity.AdamThirdParty;
import com.liquidnet.service.adam.mapper.AdamThirdPartyMapper; import com.liquidnet.service.adam.mapper.AdamThirdPartyMapper;
import com.liquidnet.service.adam.service.IAdamThirdPartyService; import com.liquidnet.service.adam.service.IAdamThirdPartyService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* <p> * <p>
* 用户第三方账号信息 服务实现类 * 用户第三方账号信息 服务实现类
...@@ -16,5 +25,31 @@ import org.springframework.stereotype.Service; ...@@ -16,5 +25,31 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class AdamThirdPartyServiceImpl extends ServiceImpl<AdamThirdPartyMapper, AdamThirdParty> implements IAdamThirdPartyService { public class AdamThirdPartyServiceImpl extends ServiceImpl<AdamThirdPartyMapper, AdamThirdParty> implements IAdamThirdPartyService {
@Autowired
MongoTemplate mongoTemplate;
@Autowired
RedisUtil redisUtil;
@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)),
AdamThirdPartInfoVo.class, AdamThirdPartInfoVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_THIRD_PARTY, uid, thirdPartInfoVo);
}
return thirdPartInfoVo;
}
@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)
.and("platform").is(platform).and("state").is(1)),
AdamThirdPartInfoVo.class, AdamThirdPartInfoVo.class.getSimpleName());
}
return thirdPartInfoVo;
}
} }
package com.liquidnet.service.adam.service.impl; package com.liquidnet.service.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.mq.constant.MQConst;
import com.liquidnet.commons.lang.util.SqlMapping;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.entity.AdamUserInfo; import com.liquidnet.service.adam.entity.AdamUserInfo;
import com.liquidnet.service.adam.mapper.AdamUserInfoMapper; import com.liquidnet.service.adam.mapper.AdamUserInfoMapper;
import com.liquidnet.service.adam.service.IAdamUserInfoService; import com.liquidnet.service.adam.service.IAdamUserInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mongodb.BasicDBObject;
import com.mongodb.client.model.FindOneAndUpdateOptions;
import com.mongodb.client.model.ReturnDocument;
import org.bson.Document;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.List;
/** /**
* <p> * <p>
* 正在现场用户信息 服务实现类 * 用户信息 服务实现类
* </p> * </p>
* *
* @author liquidnet * @author liquidnet
...@@ -16,5 +34,39 @@ import org.springframework.stereotype.Service; ...@@ -16,5 +34,39 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, AdamUserInfo> implements IAdamUserInfoService { public class AdamUserInfoServiceImpl extends ServiceImpl<AdamUserInfoMapper, AdamUserInfo> implements IAdamUserInfoService {
@Autowired
MongoConverter mongoConverter;
@Autowired
MongoTemplate mongoTemplate;
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
RedisUtil redisUtil;
@Override
public void edit(AdamUserInfoVo userInfoVo) {
boolean isNotComplete = userInfoVo.getIsComplete() == 0;
BasicDBObject object = new BasicDBObject("$set", mongoConverter.convertToMongoType(userInfoVo));
Document doc = mongoTemplate.getCollection(AdamUserInfoVo.class.getSimpleName()).findOneAndUpdate(
Query.query(Criteria.where("uid").is(userInfoVo.getUid())).getQueryObject(),
object, new FindOneAndUpdateOptions().returnDocument(ReturnDocument.AFTER)
);
List<Object> paramList = Arrays.asList(
userInfoVo.getNickName(),
userInfoVo.getSex(),
userInfoVo.getBirthday(),
userInfoVo.getArea(),
userInfoVo.getSignature(),
userInfoVo.getAvatar(),
userInfoVo.getBackground(),
null, null,// qr_code, qr_pic
userInfoVo.getTagMe(),
userInfoVo.getUid()
);
rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL,
SqlMapping.get(isNotComplete ? "adam_user_info.add" : "adam_user_info.edit", paramList.toArray()));
redisUtil.hset(AdamRedisConst.INFO_USER, userInfoVo.getUid(), userInfoVo);
}
} }
package com.liquidnet.service.adam.service.impl; package com.liquidnet.service.adam.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.constant.AdamRedisConst;
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.liquidnet.service.adam.entity.AdamUser;
import com.liquidnet.service.adam.mapper.AdamUserMapper; import com.liquidnet.service.adam.mapper.AdamUserMapper;
import com.liquidnet.service.adam.service.IAdamUserService; import com.liquidnet.service.adam.service.IAdamUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Collection;
import java.util.Collections;
/** /**
* <p> * <p>
* 用户 服务实现类 * 用户 服务实现类
...@@ -16,5 +33,88 @@ import org.springframework.stereotype.Service; ...@@ -16,5 +33,88 @@ import org.springframework.stereotype.Service;
*/ */
@Service @Service
public class AdamUserServiceImpl extends ServiceImpl<AdamUserMapper, AdamUser> implements IAdamUserService { public class AdamUserServiceImpl extends ServiceImpl<AdamUserMapper, AdamUser> implements IAdamUserService {
@Autowired
MongoTemplate mongoTemplate;
@Autowired
RabbitTemplate rabbitTemplate;
@Autowired
RedisUtil redisUtil;
@Override
public AdamUserInfoVo queryByUid(String uid) {
AdamUserInfoVo userInfoVo = (AdamUserInfoVo) redisUtil.hget(AdamRedisConst.INFO_USER, uid);
if (null == userInfoVo) {
userInfoVo = mongoTemplate.findOne(Query.query(Criteria.where("uid").is(uid).and("state").is(1)),
AdamUserInfoVo.class, AdamUserInfoVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_USER, uid, userInfoVo);
}
return userInfoVo;
}
@Override
public String queryUidByRedis(String mobile) {
return (String) redisUtil.hget(AdamRedisConst.INFO_IDENTITY_MOBILE, mobile);
// AdamUserInfoVo userInfoVo;
// if (null == (userInfoVo = (AdamUserInfoVo) redisUtil.hget(AdamRedisConst.INFO_MOBILES, mobile))) {
// userInfoVo = mongoTemplate.findOne(Query.query(Criteria.where("mobile").is(mobile).and("state").is(1)),
// AdamUserInfoVo.class, AdamUserInfoVo.class.getSimpleName());
//
// redisUtil.hset(AdamRedisConst.INFO_MOBILES, mobile, userInfoVo);
// }
// return userInfoVo;
}
@Override
public String queryUidByRedis(String openId, String platform) {
return (String) redisUtil.hget(AdamRedisConst.INFO_IDENTITY_THIRD_PARTY, platform.concat(openId));
}
@Override
public AdamUserInfoVo register(String mobile) {
AdamUserInfoVo userInfoVo = AdamUserInfoVo.getNew();
userInfoVo.setMobile(mobile);
userInfoVo.setUid(IDGenerator.nextSnowId() + "");
userInfoVo.setIsComplete(0);
userInfoVo.setState(1);
userInfoVo.setCreateAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
// boolean hset = redisUtil.hset(AdamRedisConst.INFO_MOBILES, userInfoVo.getMobile(), userInfoVo);
Collection<AdamUserInfoVo> vos = mongoTemplate.insert(Collections.singletonList(userInfoVo), AdamUserInfoVo.class.getSimpleName());
redisUtil.hset(AdamRedisConst.INFO_IDENTITY_MOBILE, mobile, userInfoVo.getUid());
return userInfoVo;
}
@Override
public AdamUserInfoVo register(AdamThirdPartParam thirdPartParam) {
LocalDateTime now = LocalDateTime.now();
AdamUserInfoVo userInfoVo = AdamUserInfoVo.getNew();
userInfoVo.setMobile(thirdPartParam.getMobile());
userInfoVo.setUid(IDGenerator.nextSnowId() + "");
userInfoVo.setCreateAt(DateUtil.format(now, DateUtil.Formatter.yyyyMMddHHmmss));
AdamThirdPartInfoVo thirdPartInfoVo = AdamThirdPartInfoVo.getNew();
BeanUtils.copyProperties(thirdPartParam, thirdPartInfoVo);
thirdPartInfoVo.setUid(userInfoVo.getUid());
thirdPartInfoVo.setState(1);// 1-绑定
// boolean userInfoSetRst = redisUtil.hset(AdamRedisConst.INFO_MOBILES, thirdPartParam.getMobile(), userInfoVo);
// boolean thirdPartSetRst = redisUtil.hset(AdamRedisConst.INFO_THIRD_PARTY.concat(thirdPartInfoVo.getPlatform()), thirdPartInfoVo.getOpenId(), thirdPartInfoVo);
Collection<AdamUserInfoVo> userInfoVos = mongoTemplate.insert(Collections.singletonList(userInfoVo), AdamUserInfoVo.class);
Collection<AdamThirdPartInfoVo> thirdPartInfoVos = mongoTemplate.insert(Collections.singletonList(thirdPartInfoVo), AdamThirdPartInfoVo.class);
redisUtil.hset(AdamRedisConst.INFO_IDENTITY_THIRD_PARTY, thirdPartParam.getPlatform().concat(thirdPartParam.getOpenId()), userInfoVo.getUid());
// List<Object> paramList = Arrays.asList();
// rabbitTemplate.convertAndSend(MQConst.EXCHANGES_LIQUIDNET_SQL, MQConst.ROUTING_KEY_SQL,
// SqlMapping.get("adam_user.add", paramList.toArray()));
return userInfoVo;
}
} }
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_third_party.add=insert into ln_adam.adam_third_party (`uid`, open_id, avatar, nick_name, platform, `state`, created_at, updated_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 (?,?,?,?,?,?,?,?,?)
\ No newline at end of file
adam_user_info.add=insert into adam_user_info (nick_name, sex, birthday, area, signature, avatar, background, qr_code, qr_pic, tag_me, `uid`) VALUES (?,?,?,?,?,?,?,?,?,?,?)
adam_user_info.edit=UPDATE ln_adam.adam_user_info SET nick_name=?, sex=?, birthday=?, area=?, signature=?, avatar=?, background=?, qr_code=?, qr_pic=?, tag_me=? WHERE uid=?
\ No newline at end of file
adam_enters.add=INSERT INTO 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 adam_enters SET `type`=?, `name`=?, mobile=?, id_card=?, is_default=?, `state`=?, updated_at=? where enters_id=?
adam_enters.update.is_default=UPDATE adam_enters set is_default=?, updated_at=? where enters_id=?
adam_enters.remove=UPDATE adam_enters SET `state`=?, updated_at=?, deleted_at=? where enters_id=?
\ No newline at end of file
...@@ -233,6 +233,17 @@ ...@@ -233,6 +233,17 @@
<artifactId>dynamic-datasource-spring-boot-starter</artifactId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.3</version> <version>2.5.3</version>
</dependency> </dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dypnsapi</artifactId>
<version>1.1.3</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
......
package com.liquidnet.support.zuul.filter;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.core.JwtValidator;
import com.liquidnet.service.ResponseDto;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
import lombok.extern.slf4j.Slf4j;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets;
import java.util.List;
@Slf4j
@Component
public class GlobalAuthFilter extends ZuulFilter {
@Value("#{'${global.exclude.url}'.split(', ')}")
private List<String> excludeUrls;
@Autowired
JwtValidator jwtValidator;
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 2;
}
@Override
public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext();
String requestURI = ctx.getRequest().getRequestURI();
return !excludeUrls.contains(requestURI);
}
@Override
public Object run() {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest httpServletRequest = requestContext.getRequest();
String token = httpServletRequest.getHeader("authorization");
Claims claims;
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");
} else {
token = token.replace("Bearer ", "");
// 解析没有异常则表示token验证通过,如有必要可根据自身需求增加验证逻辑
claims = jwtValidator.parse(token);
log.info("claims:{}", JsonUtils.toJson(claims));
// claims = jwtUtil.parseJwtToken(token);
// 对请求进行路由
requestContext.setSendZuulResponse(true);
// 请求头加入uid,传给具体的微服务
requestContext.addZuulRequestHeader("uid", claims.get("uid").toString());
}
} 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");
} catch (Exception ex) {
log.error("TOKEN验证失败:{}", 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");
}
return null;
}
}
package com.liquidnet.support.zuul.filter;
import com.liquidnet.service.ResponseDto;
import com.liquidnet.service.adam.dto.vo.AdamLoginInfoVo;
import com.liquidnet.service.feign.adam.api.FeignAdamLoginClient;
import com.liquidnet.support.zuul.util.PathMatchUtil;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import lombok.extern.slf4j.Slf4j;
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 javax.servlet.http.HttpServletRequest;
import java.util.List;
@Slf4j
@Component
public class GlobalLoginFilter extends ZuulFilter {
@Value("#{'${global.login.url}'.split(', ')}")
private List<String> loginUrls;
@Autowired
FeignAdamLoginClient feignAdamLoginClient;
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext();
String requestURI = ctx.getRequest().getRequestURI();
for (String url : loginUrls) {
if (PathMatchUtil.isPathMatch(url, requestURI)) {
return true;
}
}
return false;
}
@Override
public Object run() {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest servletRequest = requestContext.getRequest();
String token = servletRequest.getHeader("authorization");
if (StringUtils.isNotBlank(token)) {
requestContext.addZuulResponseHeader("authorization", token);
}
ResponseDto<AdamLoginInfoVo> responseDto = null;
switch (servletRequest.getRequestURI()) {
case "/adam/login/sms":
responseDto = feignAdamLoginClient.loginBySms(servletRequest.getParameter("mobile"), servletRequest.getParameter("code"));
break;
case "/adam/login/mobile":
responseDto = feignAdamLoginClient.loginByMobile(servletRequest.getParameter("accessToken"));
break;
case "/adam/login/tpa":
break;
default:
log.warn("###无效的登录链接:{}", servletRequest.getRequestURI());
break;
}
return null;
}
}
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