Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
head_group
xyqb-user2
Commits
9238ed78
Commit
9238ed78
authored
Jul 07, 2023
by
王亮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
finished commit(jiguang)
parent
b624e36f
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
223 additions
and
18 deletions
+223
-18
LoginReq.java
...n/java/cn/quantgroup/xyqb/controller/req/v2/LoginReq.java
+8
-0
BizExceptionEnum.java
...n/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
+1
-0
SMSDirectLoginParam.java
...n/quantgroup/xyqb/model/v2/login/SMSDirectLoginParam.java
+3
-0
SMSLoginParam.java
...java/cn/quantgroup/xyqb/model/v2/login/SMSLoginParam.java
+2
-0
JiGuangRemoteService.java
.../java/cn/quantgroup/xyqb/remote/JiGuangRemoteService.java
+2
-1
JiGuangDecoder.java
.../java/cn/quantgroup/xyqb/remote/codec/JiGuangDecoder.java
+51
-0
JIGuangConfiguration.java
...n/quantgroup/xyqb/remote/config/JIGuangConfiguration.java
+0
-10
JiGuangConfiguration.java
...n/quantgroup/xyqb/remote/config/JiGuangConfiguration.java
+23
-0
SMSDirectJiLoginStrategy.java
.../quantgroup/xyqb/service/v2/SMSDirectJiLoginStrategy.java
+129
-4
SMSLoginStrategy.java
.../java/cn/quantgroup/xyqb/service/v2/SMSLoginStrategy.java
+2
-1
UserTagCleanJobHandler.java
...ava/cn/quantgroup/xyqb/xxlJob/UserTagCleanJobHandler.java
+1
-1
WechatFollowStatusJobHandler.java
.../quantgroup/xyqb/xxlJob/WechatFollowStatusJobHandler.java
+1
-1
No files found.
src/main/java/cn/quantgroup/xyqb/controller/req/v2/LoginReq.java
View file @
9238ed78
package
cn
.
quantgroup
.
xyqb
.
controller
.
req
.
v2
;
import
cn.quantgroup.xyqb.model.ClientType
;
import
com.alibaba.fastjson.JSONObject
;
import
lombok.Data
;
...
...
@@ -13,4 +14,11 @@ public class LoginReq {
//是否需要用户资料
private
boolean
attachInfo
;
/**
* 0:h5,1:web,2:app
* @see ClientType
*/
@NotNull
private
Integer
clientType
;
}
src/main/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
View file @
9238ed78
...
...
@@ -16,6 +16,7 @@ public enum BizExceptionEnum {
EXPIRE_SMS_CODE
(
"1005"
,
"验证码失效,请重新获取"
),
ERROR_SMS_CODE
(
"1006"
,
"短信验证码错误"
),
ERROR_OR_ENABLE_ERROR
(
"1007"
,
"账号异常,请联系平台客服。"
),
ERROR_DIRECT_LOGIN
(
"1008"
,
"极验登录验证失败"
),
// 验证码相关 20 开头
...
...
src/main/java/cn/quantgroup/xyqb/model/v2/login/SMSDirectLoginParam.java
View file @
9238ed78
...
...
@@ -13,4 +13,7 @@ public class SMSDirectLoginParam extends BaseLoginParam{
private
String
phone
;
@NotNull
private
String
token
;
private
Integer
clientType
;
}
src/main/java/cn/quantgroup/xyqb/model/v2/login/SMSLoginParam.java
View file @
9238ed78
...
...
@@ -10,4 +10,6 @@ public class SMSLoginParam extends BaseLoginParam{
private
String
phone
;
@Size
(
min
=
4
,
max
=
8
,
message
=
"短信验证码不正确"
)
private
String
code
;
private
Integer
clientType
;
}
src/main/java/cn/quantgroup/xyqb/remote/JiGuangRemoteService.java
View file @
9238ed78
package
cn
.
quantgroup
.
xyqb
.
remote
;
import
cn.quantgroup.xyqb.model.*
;
import
cn.quantgroup.xyqb.remote.config.JiGuangConfiguration
;
import
org.springframework.cloud.netflix.feign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
@FeignClient
(
name
=
"jiGuangApi"
)
@FeignClient
(
name
=
"jiGuangApi"
,
configuration
=
JiGuangConfiguration
.
class
)
public
interface
JiGuangRemoteService
{
@PostMapping
(
"${user.auth.manager.Urora.properties.loginTokenVerify}"
)
JiGuangResponseParam
webLoginTokenVerify
(
@RequestBody
JiGuangRequestParam
param
);
...
...
src/main/java/cn/quantgroup/xyqb/remote/codec/JiGuangDecoder.java
0 → 100644
View file @
9238ed78
package
cn
.
quantgroup
.
xyqb
.
remote
.
codec
;
import
cn.quantgroup.xyqb.model.JiGuangResponseParam
;
import
com.google.gson.Gson
;
import
feign.FeignException
;
import
feign.Response
;
import
feign.codec.Decoder
;
import
javax.crypto.Cipher
;
import
java.io.IOException
;
import
java.lang.reflect.Type
;
import
java.security.KeyFactory
;
import
java.security.PrivateKey
;
import
java.security.spec.PKCS8EncodedKeySpec
;
import
java.util.Base64
;
public
class
JiGuangDecoder
implements
Decoder
{
private
final
Gson
gson
;
private
final
String
privateKey
;
public
JiGuangDecoder
(
Gson
gson
,
String
privateKey
)
{
this
.
gson
=
gson
;
this
.
privateKey
=
privateKey
;
}
@Override
public
Object
decode
(
Response
response
,
Type
type
)
throws
IOException
,
FeignException
{
JiGuangResponseParam
responseParam
;
responseParam
=
gson
.
fromJson
(
response
.
body
().
asReader
(),
JiGuangResponseParam
.
class
);
if
(
responseParam
!=
null
&&
responseParam
.
getCode
()==
8000
){
try
{
responseParam
.
setPhone
(
decrypt
(
responseParam
.
getPhone
(),
privateKey
));
}
catch
(
Exception
e
)
{
responseParam
.
setPhone
(
null
);
}
}
return
responseParam
;
}
private
static
String
decrypt
(
String
cryptedString
,
String
privateKey
)
throws
Exception
{
PKCS8EncodedKeySpec
keySpec
=
new
PKCS8EncodedKeySpec
(
Base64
.
getDecoder
().
decode
(
privateKey
));
PrivateKey
generatedPrivate
=
KeyFactory
.
getInstance
(
"RSA"
).
generatePrivate
(
keySpec
);
Cipher
cipher
=
Cipher
.
getInstance
(
"RSA"
);
cipher
.
init
(
Cipher
.
DECRYPT_MODE
,
generatedPrivate
);
byte
[]
b
=
Base64
.
getDecoder
().
decode
(
cryptedString
);
return
new
String
(
cipher
.
doFinal
(
b
));
}
}
src/main/java/cn/quantgroup/xyqb/remote/config/JIGuangConfiguration.java
deleted
100644 → 0
View file @
b624e36f
package
cn
.
quantgroup
.
xyqb
.
remote
.
config
;
import
com.google.gson.Gson
;
import
org.springframework.beans.factory.annotation.Autowired
;
public
class
JIGuangConfiguration
{
@Autowired
private
Gson
gson
;
}
src/main/java/cn/quantgroup/xyqb/remote/config/JiGuangConfiguration.java
0 → 100644
View file @
9238ed78
package
cn
.
quantgroup
.
xyqb
.
remote
.
config
;
import
cn.quantgroup.xyqb.remote.codec.JiGuangDecoder
;
import
com.google.gson.Gson
;
import
feign.auth.BasicAuthRequestInterceptor
;
import
feign.codec.Decoder
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Bean
;
public
class
JiGuangConfiguration
{
@Bean
public
Decoder
feignDecoder
(
Gson
gson
,
@Value
(
"${user.auth.manager.Urora.properties.privateKey}"
)
String
privateKey
)
{
return
new
JiGuangDecoder
(
gson
,
privateKey
);
}
@Bean
public
BasicAuthRequestInterceptor
basicAuthRequestInterceptor
(
@Value
(
"${user.auth.manager.Urora.properties.appKey}"
)
String
user
,
@Value
(
"${user.auth.manager.Urora.properties.masterSecret}"
)
String
password
)
{
return
new
BasicAuthRequestInterceptor
(
user
,
password
);
}
}
src/main/java/cn/quantgroup/xyqb/service/v2/SMSDirectJiLoginStrategy.java
View file @
9238ed78
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
import
cn.quantgroup.xyqb.constant.enums.LoginType
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.entity.User
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.exception.UserNotExistException
;
import
cn.quantgroup.xyqb.model.*
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.SMSDirectLoginParam
;
import
cn.quantgroup.xyqb.remote.JiGuangRemoteService
;
import
cn.quantgroup.xyqb.service.register.IUserRegisterService
;
import
cn.quantgroup.xyqb.service.session.ISessionService
;
import
cn.quantgroup.xyqb.service.user.ILockIpv4Service
;
import
cn.quantgroup.xyqb.service.user.IUserService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
com.sensorsdata.analytics.javasdk.ISensorsAnalytics
;
import
com.sensorsdata.analytics.javasdk.bean.EventRecord
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
java.util.UUID
;
/**
* 极光一键登录
*/
@Service
public
class
SMSDirectJiLoginStrategy
implements
LoginStrategy
{
@Slf4j
public
class
SMSDirectJiLoginStrategy
implements
LoginStrategy
{
private
final
ILockIpv4Service
lockIpv4Service
;
private
final
IUserService
userService
;
private
final
ISessionService
sessionService
;
@Value
(
"${sc.is.open:false}"
)
private
Boolean
scIsOpen
;
private
final
ISensorsAnalytics
iSensorsAnalytics
;
private
final
JiGuangRemoteService
jiGuangRemoteService
;
private
final
IUserRegisterService
userRegisterService
;
public
SMSDirectJiLoginStrategy
(
ILockIpv4Service
lockIpv4Service
,
IUserService
userService
,
ISessionService
sessionService
,
ISensorsAnalytics
iSensorsAnalytics
,
JiGuangRemoteService
jiGuangRemoteService
,
IUserRegisterService
userRegisterService
)
{
this
.
lockIpv4Service
=
lockIpv4Service
;
this
.
userService
=
userService
;
this
.
sessionService
=
sessionService
;
this
.
iSensorsAnalytics
=
iSensorsAnalytics
;
this
.
jiGuangRemoteService
=
jiGuangRemoteService
;
this
.
userRegisterService
=
userRegisterService
;
}
@Override
public
Integer
getType
()
{
return
1201
;
...
...
@@ -17,11 +59,94 @@ public class SMSDirectJiLoginStrategy implements LoginStrategy{
@Override
public
LoginBean
login
(
BaseLoginParam
param
)
{
return
null
;
SMSDirectLoginParam
smsLoginParam
=
(
SMSDirectLoginParam
)
param
;
SessionStruct
sessionStruct
=
XyqbSessionContextHolder
.
getXSession
();
JiGuangRequestParam
jiGuangRequestParam
=
new
JiGuangRequestParam
();
JiGuangResponseParam
jiGuangResponseParam
;
jiGuangRequestParam
.
setLoginToken
(
smsLoginParam
.
getToken
());
jiGuangRequestParam
.
setExID
(
UUID
.
randomUUID
().
toString
());
// 执行极验验证码检查
if
(
ClientType
.
APP
.
equals
(
ClientType
.
valueByCode
(
smsLoginParam
.
getClientType
())))
{
jiGuangResponseParam
=
jiGuangRemoteService
.
webLoginTokenVerify
(
jiGuangRequestParam
);
}
else
{
jiGuangResponseParam
=
jiGuangRemoteService
.
h5LoginTokenVerify
(
jiGuangRequestParam
);
}
if
(
jiGuangResponseParam
==
null
||
8000
!=
jiGuangResponseParam
.
getCode
())
{
throw
new
BizException
(
BizExceptionEnum
.
ERROR_DIRECT_LOGIN
);
}
else
{
smsLoginParam
.
setPhone
(
jiGuangResponseParam
.
getPhone
());
}
User
user
=
userService
.
findByPhoneWithCache
(
smsLoginParam
.
getPhone
(),
sessionStruct
.
getTenantId
());
//需要返回用户是否首次注册
boolean
register
=
user
==
null
;
if
(
user
!=
null
&&
!
user
.
getEnable
())
{
log
.
info
(
"用户不存在,或者已经注销,phoneNo:{}"
,
smsLoginParam
.
getPhone
());
throw
new
BizException
(
BizExceptionEnum
.
ERROR_OR_ENABLE_ERROR
);
}
else
{
// Service层会负责发送注册消息到LoanVest
user
=
userRegisterService
.
register
(
sessionStruct
.
getRegisteredFrom
(),
smsLoginParam
.
getPhone
(),
sessionStruct
.
getTenantId
());
if
(
user
==
null
)
{
throw
new
UserNotExistException
(
"用户未找到"
);
}
}
if
(
scIsOpen
)
{
try
{
if
(!
StringUtils
.
isEmpty
(
sessionStruct
.
getScDeviceId
()))
{
iSensorsAnalytics
.
trackSignUp
(
user
.
getUuid
(),
sessionStruct
.
getScDeviceId
());
}
if
(!
StringUtils
.
isEmpty
(
sessionStruct
.
getTerminal
())
&&
"APP"
.
equals
(
sessionStruct
.
getTerminal
())
||
sessionStruct
.
getRegisteredFrom
()
!=
null
&&
(
214
==
sessionStruct
.
getRegisteredFrom
()
||
217
==
sessionStruct
.
getRegisteredFrom
()))
{
EventRecord
userRecord
=
EventRecord
.
builder
().
setDistinctId
(
user
.
getUuid
()).
isLoginId
(
Boolean
.
TRUE
)
.
setEventName
(
"App_RegisterEvent"
)
.
build
();
iSensorsAnalytics
.
track
(
userRecord
);
iSensorsAnalytics
.
flush
();
}
else
{
log
.
info
(
"老神策埋点{},{}------------"
,
user
.
getRegisteredFrom
(),
user
.
getUuid
());
EventRecord
userRecord
=
EventRecord
.
builder
().
setDistinctId
(
user
.
getUuid
()).
isLoginId
(
Boolean
.
TRUE
)
.
setEventName
(
"PD_WUXIEC_UserLoginVccorCash"
)
.
addProperty
(
"son_channel_id"
,
user
.
getRegisteredFrom
())
.
addProperty
(
"parent_channel_id"
,
-
1L
)
.
addProperty
(
"vcccash_uuid"
,
user
.
getUuid
())
.
build
();
iSensorsAnalytics
.
track
(
userRecord
);
iSensorsAnalytics
.
flush
();
}
}
catch
(
Exception
e
)
{
log
.
info
(
"神策埋点出现问题"
,
e
);
}
}
LoginProperties
loginProperties
=
new
LoginProperties
(
1
,
sessionStruct
.
getRegisteredFrom
(),
sessionStruct
.
getTenantId
());
AuthBean
authBean
=
sessionService
.
createSession
(
user
,
loginProperties
,
LoginType
.
ACCOUNTPASSWORD
.
ordinal
(),
sessionStruct
.
getTenantId
());
LoginBean
loginBean
=
new
LoginBean
();
if
(
authBean
!=
null
)
{
loginBean
.
setToken
(
authBean
.
getToken
());
loginBean
.
setPhoneNo
(
authBean
.
getPhoneNo
());
loginBean
.
setUuid
(
authBean
.
getUuid
());
loginBean
.
setHasPassword
(
authBean
.
isHasPassword
());
loginBean
.
setUserId
(
user
.
getId
());
loginBean
.
setTenantId
(
user
.
getTenantId
());
}
loginBean
.
setRegister
(
register
);
lockIpv4Service
.
unLockPhone
(
smsLoginParam
.
getPhone
());
return
loginBean
;
}
@Override
public
BaseLoginParam
checkParam
(
LoginReq
loginReq
)
{
return
null
;
SMSDirectLoginParam
param
=
loginReq
.
getData
().
toJavaObject
(
SMSDirectLoginParam
.
class
);
param
.
setClientType
(
loginReq
.
getClientType
());
validator
.
validate
(
param
);
return
param
;
}
}
src/main/java/cn/quantgroup/xyqb/service/v2/SMSLoginStrategy.java
View file @
9238ed78
...
...
@@ -134,7 +134,8 @@ public class SMSLoginStrategy implements LoginStrategy {
@Override
public
BaseLoginParam
checkParam
(
LoginReq
loginReq
)
{
PhonePasswordLoginParam
param
=
loginReq
.
getData
().
toJavaObject
(
PhonePasswordLoginParam
.
class
);
SMSLoginParam
param
=
loginReq
.
getData
().
toJavaObject
(
SMSLoginParam
.
class
);
param
.
setClientType
(
loginReq
.
getClientType
());
validator
.
validate
(
param
);
return
param
;
}
...
...
src/main/java/cn/quantgroup/xyqb/xxlJob/UserTagCleanJobHandler.java
View file @
9238ed78
...
...
@@ -27,7 +27,7 @@ public class UserTagCleanJobHandler {
@Autowired
private
IUserTagRepository
userTagRepository
;
@XxlJob
(
value
=
"
WechatFollowStatus
JobHandler"
)
@XxlJob
(
value
=
"
userTagClean
JobHandler"
)
public
ReturnT
<
String
>
execute
(
String
param
)
throws
Exception
{
Pageable
pageable
=
new
PageRequest
(
0
,
500
);
Page
<
User
>
userPage
=
userRepository
.
findAll
(
pageable
);
...
...
src/main/java/cn/quantgroup/xyqb/xxlJob/WechatFollowStatusJobHandler.java
View file @
9238ed78
...
...
@@ -11,7 +11,7 @@ public class WechatFollowStatusJobHandler {
@Autowired
private
IWechatFollowService
wechatFollowService
;
@XxlJob
(
value
=
"
W
echatFollowStatusJobHandler"
)
@XxlJob
(
value
=
"
w
echatFollowStatusJobHandler"
)
public
void
execute
()
throws
Exception
{
wechatFollowService
.
executeTask
();
XxlJobHelper
.
handleSuccess
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment