Commit c66495e0 authored by alex yao's avatar alex yao

feat:Google登录

parent 47df54bc
...@@ -322,7 +322,11 @@ ...@@ -322,7 +322,11 @@
<version>1.0</version> <version>1.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>2.4.0</version>
</dependency>
</dependencies> </dependencies>
......
package cn.com.poc.common.rest;
import cn.com.yict.framemax.core.rest.BaseRest;
import cn.com.yict.framemax.web.permission.Access;
import cn.com.yict.framemax.web.permission.Permission;
/**
* @author alex.yao
* @date 2024/12/24
*/
@Permission(Access.Anonymous)
public interface GoogleConfigRest extends BaseRest {
/**
* 获取谷歌client_id
*/
String getClientId();
}
package cn.com.poc.common.rest.impl;
import cn.com.poc.common.rest.GoogleConfigRest;
import cn.com.yict.framemax.core.config.Config;
import org.springframework.stereotype.Component;
/**
* @author alex.yao
* @date 2024/12/24
*/
@Component
public class GoogleConfigRestImpl implements GoogleConfigRest {
private final String CLIENT_ID = Config.get("google.client.id");
@Override
public String getClientId() {
return CLIENT_ID;
}
}
package cn.com.poc.user.builder;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.equity.aggregate.MemberEquityService;
import cn.com.poc.user.dto.MemberLoginRequestDto;
import cn.com.poc.user.entity.MemberInfoEntity;
import cn.com.poc.user.query.CheckMemberInfoQueryCondition;
import cn.com.poc.user.query.CheckMemberInfoQueryItem;
import cn.com.poc.user.service.BizMemberInfoService;
import cn.com.yict.framemax.core.config.Config;
import cn.com.yict.framemax.core.i18n.I18nMessageException;
import cn.com.yict.framemax.data.model.BaseModel;
import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.apache.v2.ApacheHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import org.apache.commons.collections4.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;
/**
* @author alex.yao
* @date 2024/12/24
*/
public class GoogleLoginChannel implements LoginChannelService {
private final Logger logger = LoggerFactory.getLogger(GoogleLoginChannel.class);
private static final String CLIENT_ID = Config.get("google.client.id");
@Resource
private BizMemberInfoService bizMemberInfoService;
@Resource
private MemberEquityService memberEquityService;
@Resource
private FmxParamConfigService fmxParamConfigService;
@Override
public BaseModel doLogin(MemberLoginRequestDto memberLoginRequest) throws Exception {
HttpTransport transport = new ApacheHttpTransport();
JsonFactory jsonFactory = new GsonFactory();
GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, jsonFactory)
.setAudience(Collections.singletonList(CLIENT_ID))
.build();
String idTokenString = memberLoginRequest.getAuthCode();
GoogleIdToken idToken = verifier.verify(idTokenString);
if (idToken != null) {
Payload payload = idToken.getPayload();
String userId = payload.getSubject();
logger.info("User ID: {}", userId);
String email = payload.getEmail();
String name = (String) payload.get("name");
String pictureUrl = (String) payload.get("picture");
MemberInfoEntity result = bizMemberInfoService.getMemberEntityByAccount(email);
if (result == null) {
CheckMemberInfoQueryCondition condition = new CheckMemberInfoQueryCondition();
condition.setEmail(memberLoginRequest.getAccount());
List<CheckMemberInfoQueryItem> checkMemberInfoQueryItems = bizMemberInfoService.checkMemberInfoIsExist(condition);
if (CollectionUtils.isEmpty(checkMemberInfoQueryItems)) {//用户没有注册过 需要注册
result = register(email, name, pictureUrl);
} else { //用户已经注册过 直接登录
CheckMemberInfoQueryItem checkMemberInfoQueryItem = checkMemberInfoQueryItems.get(0);
Integer memberId = checkMemberInfoQueryItem.getMemberId();
result = bizMemberInfoService.getById(memberId);
}
}
return result;
} else {
logger.error("Google id token is null");
throw new I18nMessageException("exception/system.error");
}
}
private MemberInfoEntity register(String email, String name, String avatar) {
MemberInfoEntity result;
MemberInfoEntity memberInfoEntity = new MemberInfoEntity();
memberInfoEntity.setAccount(email);
memberInfoEntity.setNickName(name);
memberInfoEntity.setEmail(email);
if (StringUtils.isBlank(avatar)) {
avatar = fmxParamConfigService.getParam("member.default.avatar");
}
memberInfoEntity.setAvatarUrl(avatar);
result = bizMemberInfoService.createMemberInfo(memberInfoEntity);
try {
memberEquityService.initMemberEquity(result.getMemberId().longValue());
} catch (Exception e) {
throw new I18nMessageException("exception/system.error");
}
return result;
}
}
...@@ -26,6 +26,8 @@ public class LoginChannelBuilder implements ApplicationContextAware { ...@@ -26,6 +26,8 @@ public class LoginChannelBuilder implements ApplicationContextAware {
return applicationContext.getBean(PwLoginChannel.class); return applicationContext.getBean(PwLoginChannel.class);
} else if (UserLoginConstants.LoginType.MEMBER_PLATFOMR_EMAIL.equals(loginChannel)) { } else if (UserLoginConstants.LoginType.MEMBER_PLATFOMR_EMAIL.equals(loginChannel)) {
return applicationContext.getBean(EmailLoginChannel.class); return applicationContext.getBean(EmailLoginChannel.class);
}else if (UserLoginConstants.LoginType.MEMBER_PLATFOMR_GOOGLE.equals(loginChannel)){
return applicationContext.getBean(GoogleLoginChannel.class);
} }
throw new I18nMessageException("exception/third.party.authorization.channel.abnormal"); throw new I18nMessageException("exception/third.party.authorization.channel.abnormal");
} }
......
...@@ -11,6 +11,7 @@ public class UserLoginConstants { ...@@ -11,6 +11,7 @@ public class UserLoginConstants {
public final static String MEMBER_PLATFOMR_SMS="MEMBER_PLATFOMR_SMS"; public final static String MEMBER_PLATFOMR_SMS="MEMBER_PLATFOMR_SMS";
public final static String MEMBER_PLATFOMR_PW="MEMBER_PLATFOMR_PW"; public final static String MEMBER_PLATFOMR_PW="MEMBER_PLATFOMR_PW";
public final static String MEMBER_PLATFOMR_EMAIL="MEMBER_PLATFOMR_EMAIL"; public final static String MEMBER_PLATFOMR_EMAIL="MEMBER_PLATFOMR_EMAIL";
public final static String MEMBER_PLATFOMR_GOOGLE="MEMBER_PLATFOMR_GOOGLE";
} }
......
...@@ -14,18 +14,16 @@ redis.maxActive=600 ...@@ -14,18 +14,16 @@ redis.maxActive=600
redis.maxWait=1000 redis.maxWait=1000
#\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B #\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B
redis.testOnBorrow=true redis.testOnBorrow=true
#elasticsearch\u914D\u7F6E #elasticsearch\u914D\u7F6E
#elasticsearch.active=true #elasticsearch.active=true
#elasticsearch.cluster.name=es_rcs_dev #elasticsearch.cluster.name=es_rcs_dev
#elasticsearch.xpack.security.user= #elasticsearch.xpack.security.user=
#elasticsearch.cluster.nodes=192.168.21.102:9300 #elasticsearch.cluster.nodes=192.168.21.102:9300
#elasticsearch.plugins= #elasticsearch.plugins=
dgtools.domain.url=https://dgtools-test.gsstcloud.com dgtools.domain.url=https://dgtools-test.gsstcloud.com
#large-model key #large-model key
large-model.apikey=sk-bNzgFwFtw3k4jR7CE3575a19C3304a53Bb803cCeDeC154F2 large-model.apikey=sk-bNzgFwFtw3k4jR7CE3575a19C3304a53Bb803cCeDeC154F2
# \u652F\u4ED8\u56DE\u8C03\u5730\u5740 # \u652F\u4ED8\u56DE\u8C03\u5730\u5740
pay.domain.callback.url=https://poc-sit.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json pay.domain.callback.url=https://poc-sit.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json
# \u8C37\u6B4C\u767B\u5F55
google.client.id=698774957461-b3s1l98m7qjv5ilphvlo57gjhbs7fnfm.apps.googleusercontent.com
\ No newline at end of file
...@@ -2,13 +2,10 @@ ...@@ -2,13 +2,10 @@
redis.host=192.168.21.105 redis.host=192.168.21.105
#\u8BBF\u95EE\u7AEF\u53E3 #\u8BBF\u95EE\u7AEF\u53E3
redis.port=16379 redis.port=16379
#\u6CE8\u610F\uFF0C\u5982\u679C\u6CA1\u6709password\uFF0C\u6B64\u5904\u4E0D\u8BBE\u7F6E\u503C\uFF0C\u4F46\u8FD9\u4E00\u9879\u8981\u4FDD\u7559 #\u6CE8\u610F\uFF0C\u5982\u679C\u6CA1\u6709password\uFF0C\u6B64\u5904\u4E0D\u8BBE\u7F6E\u503C\uFF0C\u4F46\u8FD9\u4E00\u9879\u8981\u4FDD\u7559
redis.password=c29fd8163a70 redis.password=c29fd8163a70
#\u6307\u5B9A\u6570\u636E\u5E93 #\u6307\u5B9A\u6570\u636E\u5E93
redis.database=7 redis.database=7
#\u6700\u5927\u7A7A\u95F2\u6570\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u7684\u6700\u5927\u7A7A\u95F2\u65F6\u95F4\u3002\u8D85\u8FC7\u7A7A\u95F2\u65F6\u95F4\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u5C06\u88AB\u6807\u8BB0\u4E3A\u4E0D\u53EF\u7528\uFF0C\u7136\u540E\u88AB\u91CA\u653E\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002 #\u6700\u5927\u7A7A\u95F2\u6570\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u7684\u6700\u5927\u7A7A\u95F2\u65F6\u95F4\u3002\u8D85\u8FC7\u7A7A\u95F2\u65F6\u95F4\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u5C06\u88AB\u6807\u8BB0\u4E3A\u4E0D\u53EF\u7528\uFF0C\u7136\u540E\u88AB\u91CA\u653E\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002
redis.maxIdle=300 redis.maxIdle=300
#\u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236 #\u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236
...@@ -17,19 +14,16 @@ redis.maxActive=600 ...@@ -17,19 +14,16 @@ redis.maxActive=600
redis.maxWait=1000 redis.maxWait=1000
#\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B #\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B
redis.testOnBorrow=true redis.testOnBorrow=true
#elasticsearch\u914D\u7F6E #elasticsearch\u914D\u7F6E
#elasticsearch.active=true #elasticsearch.active=true
#elasticsearch.cluster.name=es_blo_sit #elasticsearch.cluster.name=es_blo_sit
#elasticsearch.xpack.security.user= #elasticsearch.xpack.security.user=
#elasticsearch.cluster.nodes=192.168.21.105:9300 #elasticsearch.cluster.nodes=192.168.21.105:9300
#elasticsearch.plugins= #elasticsearch.plugins=
dgtools.domain.url=https://dgtools.gsstcloud.com dgtools.domain.url=https://dgtools.gsstcloud.com
#large-model key #large-model key
large-model.apikey=sk-gQM7bpiRxaOl2emt0cBbF47481C5403885263eFeB95c7a8e large-model.apikey=sk-gQM7bpiRxaOl2emt0cBbF47481C5403885263eFeB95c7a8e
# \u652F\u4ED8\u56DE\u8C03\u5730\u5740 # \u652F\u4ED8\u56DE\u8C03\u5730\u5740
pay.domain.callback.url=https://model-link.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json pay.domain.callback.url=https://model-link.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json
# \u8C37\u6B4C\u767B\u5F55
google.client.id=698774957461-b3s1l98m7qjv5ilphvlo57gjhbs7fnfm.apps.googleusercontent.com
\ No newline at end of file
...@@ -4,10 +4,8 @@ redis.host=192.168.21.102 ...@@ -4,10 +4,8 @@ redis.host=192.168.21.102
redis.port=6378 redis.port=6378
#\u6CE8\u610F\uFF0C\u5982\u679C\u6CA1\u6709password\uFF0C\u6B64\u5904\u4E0D\u8BBE\u7F6E\u503C\uFF0C\u4F46\u8FD9\u4E00\u9879\u8981\u4FDD\u7559 #\u6CE8\u610F\uFF0C\u5982\u679C\u6CA1\u6709password\uFF0C\u6B64\u5904\u4E0D\u8BBE\u7F6E\u503C\uFF0C\u4F46\u8FD9\u4E00\u9879\u8981\u4FDD\u7559
redis.password=fcd20f468ca0 redis.password=fcd20f468ca0
#\u6307\u5B9A\u6570\u636E\u5E93 #\u6307\u5B9A\u6570\u636E\u5E93
redis.database=10 redis.database=10
#\u6700\u5927\u7A7A\u95F2\u6570\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u7684\u6700\u5927\u7A7A\u95F2\u65F6\u95F4\u3002\u8D85\u8FC7\u7A7A\u95F2\u65F6\u95F4\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u5C06\u88AB\u6807\u8BB0\u4E3A\u4E0D\u53EF\u7528\uFF0C\u7136\u540E\u88AB\u91CA\u653E\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002 #\u6700\u5927\u7A7A\u95F2\u6570\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u7684\u6700\u5927\u7A7A\u95F2\u65F6\u95F4\u3002\u8D85\u8FC7\u7A7A\u95F2\u65F6\u95F4\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u5C06\u88AB\u6807\u8BB0\u4E3A\u4E0D\u53EF\u7528\uFF0C\u7136\u540E\u88AB\u91CA\u653E\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002
redis.maxIdle=300 redis.maxIdle=300
#\u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236 #\u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236
...@@ -16,17 +14,16 @@ redis.maxActive=600 ...@@ -16,17 +14,16 @@ redis.maxActive=600
redis.maxWait=1000 redis.maxWait=1000
#\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B #\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B
redis.testOnBorrow=true redis.testOnBorrow=true
#elasticsearch\u914D\u7F6E #elasticsearch\u914D\u7F6E
#elasticsearch.active=true #elasticsearch.active=true
#elasticsearch.cluster.name=es_rcs_sit #elasticsearch.cluster.name=es_rcs_sit
#elasticsearch.xpack.security.user= #elasticsearch.xpack.security.user=
#elasticsearch.cluster.nodes=192.168.21.102:9300 #elasticsearch.cluster.nodes=192.168.21.102:9300
#elasticsearch.plugins= #elasticsearch.plugins=
dgtools.domain.url=https://dgtools-test.gsstcloud.com dgtools.domain.url=https://dgtools-test.gsstcloud.com
#large-model key #large-model key
large-model.apikey=sk-bNzgFwFtw3k4jR7CE3575a19C3304a53Bb803cCeDeC154F2 large-model.apikey=sk-bNzgFwFtw3k4jR7CE3575a19C3304a53Bb803cCeDeC154F2
# \u652F\u4ED8\u56DE\u8C03\u5730\u5740 # \u652F\u4ED8\u56DE\u8C03\u5730\u5740
pay.domain.callback.url=https://poc-sit.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json pay.domain.callback.url=https://poc-sit.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json
# \u8C37\u6B4C\u767B\u5F55
google.client.id=698774957461-b3s1l98m7qjv5ilphvlo57gjhbs7fnfm.apps.googleusercontent.com
\ No newline at end of file
...@@ -2,13 +2,10 @@ ...@@ -2,13 +2,10 @@
redis.host=192.168.21.105 redis.host=192.168.21.105
#\u8BBF\u95EE\u7AEF\u53E3 #\u8BBF\u95EE\u7AEF\u53E3
redis.port=26379 redis.port=26379
#\u6CE8\u610F\uFF0C\u5982\u679C\u6CA1\u6709password\uFF0C\u6B64\u5904\u4E0D\u8BBE\u7F6E\u503C\uFF0C\u4F46\u8FD9\u4E00\u9879\u8981\u4FDD\u7559 #\u6CE8\u610F\uFF0C\u5982\u679C\u6CA1\u6709password\uFF0C\u6B64\u5904\u4E0D\u8BBE\u7F6E\u503C\uFF0C\u4F46\u8FD9\u4E00\u9879\u8981\u4FDD\u7559
redis.password=d3b400d0c862 redis.password=d3b400d0c862
#\u6307\u5B9A\u6570\u636E\u5E93 #\u6307\u5B9A\u6570\u636E\u5E93
redis.database=6 redis.database=6
#\u6700\u5927\u7A7A\u95F2\u6570\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u7684\u6700\u5927\u7A7A\u95F2\u65F6\u95F4\u3002\u8D85\u8FC7\u7A7A\u95F2\u65F6\u95F4\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u5C06\u88AB\u6807\u8BB0\u4E3A\u4E0D\u53EF\u7528\uFF0C\u7136\u540E\u88AB\u91CA\u653E\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002 #\u6700\u5927\u7A7A\u95F2\u6570\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u7684\u6700\u5927\u7A7A\u95F2\u65F6\u95F4\u3002\u8D85\u8FC7\u7A7A\u95F2\u65F6\u95F4\uFF0C\u6570\u636E\u5E93\u8FDE\u63A5\u5C06\u88AB\u6807\u8BB0\u4E3A\u4E0D\u53EF\u7528\uFF0C\u7136\u540E\u88AB\u91CA\u653E\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236\u3002
redis.maxIdle=300 redis.maxIdle=300
#\u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236 #\u8FDE\u63A5\u6C60\u7684\u6700\u5927\u6570\u636E\u5E93\u8FDE\u63A5\u6570\u3002\u8BBE\u4E3A0\u8868\u793A\u65E0\u9650\u5236
...@@ -17,19 +14,16 @@ redis.maxActive=600 ...@@ -17,19 +14,16 @@ redis.maxActive=600
redis.maxWait=1000 redis.maxWait=1000
#\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B #\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u662F\u5426\u63D0\u524D\u8FDB\u884Calidate\u64CD\u4F5C\uFF1B\u5982\u679C\u4E3Atrue\uFF0C\u5219\u5F97\u5230\u7684jedis\u5B9E\u4F8B\u5747\u662F\u53EF\u7528\u7684\uFF1B
redis.testOnBorrow=true redis.testOnBorrow=true
#elasticsearch\u914D\u7F6E #elasticsearch\u914D\u7F6E
#elasticsearch.active=true #elasticsearch.active=true
#elasticsearch.cluster.name=es_blo_sit #elasticsearch.cluster.name=es_blo_sit
#elasticsearch.xpack.security.user= #elasticsearch.xpack.security.user=
#elasticsearch.cluster.nodes=192.168.0.42:9300 #elasticsearch.cluster.nodes=192.168.0.42:9300
#elasticsearch.plugins= #elasticsearch.plugins=
dgtools.domain.url=https://dgtools.gsstcloud.com dgtools.domain.url=https://dgtools.gsstcloud.com
#large-model key #large-model key
large-model.apikey=sk-gQM7bpiRxaOl2emt0cBbF47481C5403885263eFeB95c7a8e large-model.apikey=sk-gQM7bpiRxaOl2emt0cBbF47481C5403885263eFeB95c7a8e
# \u652F\u4ED8\u56DE\u8C03\u5730\u5740 # \u652F\u4ED8\u56DE\u8C03\u5730\u5740
pay.domain.callback.url=https://model-link.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json pay.domain.callback.url=https://model-link.gsstcloud.com/api/rest/payCallBackRest/payCallBack.json
# \u8C37\u6B4C\u767B\u5F55
google.client.id=698774957461-b3s1l98m7qjv5ilphvlo57gjhbs7fnfm.apps.googleusercontent.com
\ No newline at end of file
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