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
43b64f4c
Commit
43b64f4c
authored
Jul 06, 2023
by
王亮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
finished (geetest).
parent
b0013bb1
Changes
17
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
237 additions
and
57 deletions
+237
-57
Constants.java
src/main/java/cn/quantgroup/xyqb/Constants.java
+6
-0
BehaviorReq.java
...ava/cn/quantgroup/xyqb/controller/req/v2/BehaviorReq.java
+15
-0
GeeTestLoginEventListener.java
...a/cn/quantgroup/xyqb/event/GeeTestLoginEventListener.java
+34
-0
UserLoginEvent.java
src/main/java/cn/quantgroup/xyqb/event/UserLoginEvent.java
+7
-0
BizExceptionEnum.java
...n/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
+4
-3
BehaviorInterceptor.java
...n/java/cn/quantgroup/xyqb/filter/BehaviorInterceptor.java
+32
-14
BehaviorCodeBean.java
src/main/java/cn/quantgroup/xyqb/model/BehaviorCodeBean.java
+2
-1
ClientType.java
src/main/java/cn/quantgroup/xyqb/model/ClientType.java
+4
-4
SettingType.java
src/main/java/cn/quantgroup/xyqb/model/SettingType.java
+7
-12
SessionStruct.java
.../java/cn/quantgroup/xyqb/model/session/SessionStruct.java
+4
-1
IGeetestLogService.java
...n/quantgroup/xyqb/service/captcha/IGeetestLogService.java
+4
-0
GeetestLogServiceImpl.java
...roup/xyqb/service/captcha/impl/GeetestLogServiceImpl.java
+26
-5
BehaviorContext.java
...n/java/cn/quantgroup/xyqb/service/v2/BehaviorContext.java
+1
-1
GeetestBehaviorStrategy.java
...n/quantgroup/xyqb/service/v2/GeetestBehaviorStrategy.java
+54
-5
LoginContext.java
...main/java/cn/quantgroup/xyqb/service/v2/LoginContext.java
+22
-3
QuantGroupBehaviorStrategy.java
...uantgroup/xyqb/service/v2/QuantGroupBehaviorStrategy.java
+4
-2
XyqbSessionContextHolder.java
.../cn/quantgroup/xyqb/session/XyqbSessionContextHolder.java
+11
-6
No files found.
src/main/java/cn/quantgroup/xyqb/Constants.java
View file @
43b64f4c
...
...
@@ -40,6 +40,12 @@ public interface Constants {
String
X_BEHAVIOR_TYPE
=
"qg-behavior-type"
;
String
X_BEHAVIOR_ID
=
"qg-behavior-id"
;
String
X_BEHAVIOR_IMAGEVALUE
=
"qg-behavior-imageValue"
;
String
X_BEHAVIOR_CHALLENGE
=
"qg-behavior-challenge"
;
String
X_BEHAVIOR_VALIDATE
=
"qg-behavior-validate"
;
String
X_BEHAVIOR_SECCODE
=
"qg-behavior-seccode"
;
String
X_BEHAVIOR_IP
=
"ip"
;
int
VERIFICATION_LEN
=
2
;
int
SMS_CODE_LEN_4
=
4
;
int
SMS_CODE_LEN_6
=
6
;
...
...
src/main/java/cn/quantgroup/xyqb/controller/req/v2/BehaviorReq.java
View file @
43b64f4c
...
...
@@ -4,21 +4,28 @@ import cn.quantgroup.xyqb.model.ClientType;
import
cn.quantgroup.xyqb.model.SettingType
;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.Size
;
import
java.time.LocalDateTime
;
@Data
public
class
BehaviorReq
{
/**
* 1:极验,2: 量化派图形验证码
*/
@NotNull
private
Integer
type
;
/**
* 手机号码
*/
@Size
(
min
=
11
,
max
=
20
)
private
String
phone
;
/**
* 0:h5,1:web,2:app
* @see ClientType
*/
@NotNull
private
Integer
clientType
;
/**
...
...
@@ -27,6 +34,14 @@ public class BehaviorReq {
*/
private
Integer
settingType
;
/**
* initializeDt,前端传过来,页面初始化极验时间(营销使用)
*/
private
LocalDateTime
initializeDt
;
/**
* 通过request直接取
*/
private
String
ip
;
}
src/main/java/cn/quantgroup/xyqb/event/GeeTestLoginEventListener.java
0 → 100644
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
event
;
import
cn.quantgroup.xyqb.entity.UserTag
;
import
cn.quantgroup.xyqb.repository.IUserTagRepository
;
import
cn.quantgroup.xyqb.service.captcha.IGeetestLogService
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.ApplicationListener
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
/**
* user_tag表,用来监听
*/
@Component
public
class
GeeTestLoginEventListener
implements
ApplicationListener
<
UserLoginEvent
>
{
@Autowired
private
IGeetestLogService
geetestLogService
;
/**
* 逻辑 每次登录发送UserLoginEvent,落user_tag表
* 如果没有就新增,如果有就更新
*
* @param userLoginEvent UserLoginEvent
*/
@Override
public
void
onApplicationEvent
(
UserLoginEvent
userLoginEvent
)
{
if
(
StringUtils
.
isNotEmpty
(
userLoginEvent
.
getGeetestId
())
&&
userLoginEvent
.
getUserTag
()!=
null
)
{
geetestLogService
.
updateByUidGeetestLog
(
Long
.
valueOf
(
userLoginEvent
.
getGeetestId
()),
userLoginEvent
.
getUserTag
().
getUserId
());
}
}
}
src/main/java/cn/quantgroup/xyqb/event/UserLoginEvent.java
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
event
;
import
cn.quantgroup.xyqb.entity.UserTag
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
lombok.Builder
;
import
lombok.Data
;
import
lombok.Getter
;
...
...
@@ -17,6 +18,7 @@ import org.springframework.context.annotation.Configuration;
public
class
UserLoginEvent
extends
ApplicationEvent
{
private
UserTag
userTag
;
private
String
geetestId
;
public
UserLoginEvent
(
Object
source
)
{
super
(
source
);
...
...
@@ -26,4 +28,9 @@ public class UserLoginEvent extends ApplicationEvent {
super
(
source
);
this
.
userTag
=
userTag
;
}
public
UserLoginEvent
(
Object
source
,
UserTag
userTag
,
String
geetestId
)
{
super
(
source
);
this
.
userTag
=
userTag
;
this
.
geetestId
=
geetestId
;
}
}
src/main/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
View file @
43b64f4c
...
...
@@ -15,12 +15,13 @@ public enum BizExceptionEnum {
ERROR_PASSWORD
(
"1004"
,
"用户名或者密码错误"
),
// 验证码相关
20
开头
// 验证码相关
20
开头
FAIL_GENERATE_IMAGE
(
"2001"
,
"生成图片失败"
),
FAIL_VERIFY_CODE
(
"2002"
,
"图形验证码错误"
),
UN_EXIT_VERIFY_TYPE
(
"2003"
,
"不存在的验证码方式"
),
UN_EXIT_VERIFY_CODE
(
"2004"
,
"验证模式下验证码参数不能为空"
);
UN_EXIT_VERIFY_CODE
(
"2004"
,
"验证模式下验证码参数不能为空"
),
EX_GET_VERIFY_CODE
(
"2005"
,
"获取验证码失败"
),
UN_EXIT_GEETEST_LOG
(
"2006"
,
"极验记录不存在"
);
private
final
String
businessCode
;
...
...
src/main/java/cn/quantgroup/xyqb/filter/BehaviorInterceptor.java
View file @
43b64f4c
...
...
@@ -6,6 +6,7 @@ import cn.quantgroup.xyqb.exception.BizException;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.service.v2.BehaviorContext
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
cn.quantgroup.xyqb.util.IpUtil
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
...
...
@@ -24,43 +25,60 @@ public class BehaviorInterceptor implements HandlerInterceptor {
}
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
{
String
type
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_TYPE
);
if
(
StringUtils
.
isEmpty
(
type
)
||
!
StringUtils
.
isNumeric
(
type
))
{
return
true
;
}
String
id
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_ID
);
if
(
StringUtils
.
isEmpty
(
id
)){
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_VERIFY_CODE
);
}
Map
<
String
,
String
>
data
=
new
HashMap
<>();
data
.
put
(
Constants
.
X_BEHAVIOR_ID
,
id
);
data
.
put
(
Constants
.
X_BEHAVIOR_IP
,
IpUtil
.
getRemoteIP
(
request
));
ValidateBehavior
validateBehavior
=
new
ValidateBehavior
();
switch
(
Integer
.
parseInt
(
type
))
{
case
1
:
String
challenge
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_CHALLENGE
);
String
validate
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_VALIDATE
);
String
secCode
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_SECCODE
);
if
(
StringUtils
.
isEmpty
(
challenge
)
||
StringUtils
.
isEmpty
(
validate
)||
StringUtils
.
isEmpty
(
secCode
)){
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_VERIFY_CODE
);
}
validateBehavior
.
setType
(
1
);
data
.
put
(
Constants
.
X_BEHAVIOR_CHALLENGE
,
challenge
);
data
.
put
(
Constants
.
X_BEHAVIOR_VALIDATE
,
validate
);
data
.
put
(
Constants
.
X_BEHAVIOR_SECCODE
,
secCode
);
//走极验逻辑
return
false
;
break
;
case
2
:
//走量化派图形验证逻辑
String
id
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_ID
);
String
imageValue
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_IMAGEVALUE
);
if
(
StringUtils
.
isEmpty
(
i
d
)
||
StringUtils
.
isEmpty
(
i
mageValue
))
{
if
(
StringUtils
.
isEmpty
(
imageValue
))
{
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_VERIFY_CODE
);
}
ValidateBehavior
validateBehavior
=
new
ValidateBehavior
();
validateBehavior
.
setType
(
2
);
Map
<
String
,
String
>
data
=
new
HashMap
<>();
data
.
put
(
"id"
,
id
);
data
.
put
(
"imageValue"
,
imageValue
);
validateBehavior
.
setData
(
data
);
behaviorContext
.
validate
(
validateBehavior
);
data
.
put
(
Constants
.
X_BEHAVIOR_IMAGEVALUE
,
imageValue
);
break
;
default
:
return
true
;
}
}
validateBehavior
.
setData
(
data
);
return
behaviorContext
.
validate
(
validateBehavior
);
}
@Override
public
void
postHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
ModelAndView
modelAndView
)
throws
Exception
{
public
void
postHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
ModelAndView
modelAndView
)
{
}
@Override
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
Exception
ex
)
throws
Exception
{
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
Exception
ex
)
{
XyqbSessionContextHolder
.
releaseSession
();
}
}
src/main/java/cn/quantgroup/xyqb/model/BehaviorCodeBean.java
View file @
43b64f4c
...
...
@@ -16,10 +16,11 @@ public class BehaviorCodeBean {
private
QtCode
qtCode
;
private
GeetestCode
geetestCode
;
private
String
id
;
@Data
@Builder
public
static
class
QtCode
{
private
String
imageId
;
private
String
imageData
;
}
...
...
src/main/java/cn/quantgroup/xyqb/model/ClientType.java
View file @
43b64f4c
...
...
@@ -6,7 +6,7 @@ import java.util.Optional;
* 验证码验证类型
*
* @author renwc
* @
date
2018-02-02
* @
since
2018-02-02
*/
public
enum
ClientType
{
APP
(
"native"
),
H5
(
"h5"
),
WEB
(
"web"
);
...
...
@@ -15,7 +15,7 @@ public enum ClientType {
this
.
alias
=
alias
;
}
private
String
alias
;
private
final
String
alias
;
public
String
getAlias
()
{
return
this
.
alias
;
...
...
@@ -35,9 +35,9 @@ public enum ClientType {
public
static
ClientType
valueByCode
(
Integer
code
)
{
switch
(
code
)
{
case
0
:
return
H5
;
case
1
:
return
H5
;
case
2
:
return
WEB
;
default
:
return
APP
;
...
...
src/main/java/cn/quantgroup/xyqb/model/SettingType.java
View file @
43b64f4c
...
...
@@ -4,7 +4,6 @@ import java.util.Optional;
/**
* 验证场景类型
*
*/
public
enum
SettingType
{
PASSWD
(
"账密"
),
SMSLOGIN
(
"短验"
);
...
...
@@ -13,7 +12,7 @@ public enum SettingType {
this
.
alias
=
alias
;
}
private
String
alias
;
private
final
String
alias
;
public
String
getAlias
()
{
return
this
.
alias
;
...
...
@@ -21,22 +20,18 @@ public enum SettingType {
public
static
SettingType
valueByName
(
String
name
)
{
name
=
Optional
.
ofNullable
(
name
).
orElse
(
""
).
toLowerCase
();
switch
(
name
)
{
case
"短验"
:
return
SMSLOGIN
;
default
:
return
PASSWD
;
if
(
"短验"
.
equals
(
name
))
{
return
SMSLOGIN
;
}
return
PASSWD
;
}
public
static
SettingType
valueByCode
(
Integer
code
)
{
switch
(
code
)
{
case
1
:
return
SMSLOGIN
;
default
:
return
PASSWD
;
if
(
code
!=
null
&&
code
==
1
)
{
return
SMSLOGIN
;
}
return
PASSWD
;
}
}
src/main/java/cn/quantgroup/xyqb/model/session/SessionStruct.java
View file @
43b64f4c
...
...
@@ -18,10 +18,13 @@ public class SessionStruct implements Serializable {
private
SessionValue
values
;
private
long
expire
;
private
Integer
tenantId
;
private
Integer
registeredFrom
;
private
Long
registeredFrom
;
private
String
ip
;
//极验的记录id
private
String
geetestId
;
public
void
setAttribute
(
String
key
,
String
value
)
{
if
(
value
==
null
)
{
value
=
""
;
...
...
src/main/java/cn/quantgroup/xyqb/service/captcha/IGeetestLogService.java
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
service
.
captcha
;
import
cn.quantgroup.xyqb.entity.GeetestLogEntity
;
import
java.util.Map
;
/**
...
...
@@ -14,4 +16,6 @@ public interface IGeetestLogService {
void
updateByUidGeetestLog
(
Long
geetestLogId
,
Long
id
);
void
executeTask
();
GeetestLogEntity
getById
(
Long
id
);
}
src/main/java/cn/quantgroup/xyqb/service/captcha/impl/GeetestLogServiceImpl.java
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
service
.
captcha
.
impl
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.entity.GeetestLogEntity
;
import
cn.quantgroup.xyqb.model.ClientType
;
import
cn.quantgroup.xyqb.model.SettingType
;
...
...
@@ -8,10 +9,12 @@ import cn.quantgroup.xyqb.service.captcha.IGeetestLogService;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
javax.annotation.Resource
;
import
java.sql.Timestamp
;
import
java.text.SimpleDateFormat
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.util.Calendar
;
import
java.util.Date
;
import
java.util.Map
;
...
...
@@ -22,9 +25,11 @@ import java.util.Map;
@Service
@Slf4j
public
class
GeetestLogServiceImpl
implements
IGeetestLogService
{
private
final
IGeetestLogRepository
geetestLogRepository
;
@Resource
private
IGeetestLogRepository
geetestLogRepository
;
public
GeetestLogServiceImpl
(
IGeetestLogRepository
geetestLogRepository
)
{
this
.
geetestLogRepository
=
geetestLogRepository
;
}
@Override
public
Long
saveGeetestLog
(
String
phoneNo
,
String
clientType
,
String
settingType
,
Map
<
String
,
String
>
imgMap
)
{
...
...
@@ -34,15 +39,26 @@ public class GeetestLogServiceImpl implements IGeetestLogService {
geetestLogEntity
.
setSetting
(
SettingType
.
valueByName
(
settingType
).
ordinal
());
geetestLogEntity
.
setChallenge
(
imgMap
.
getOrDefault
(
"reChallenge"
,
""
));
geetestLogEntity
.
setCaptchaId
(
imgMap
.
getOrDefault
(
"gt"
,
""
));
if
(
imgMap
.
containsKey
(
Constants
.
QG_CAPTCHA_INITDT
))
{
geetestLogEntity
.
setInitializeDt
(
Date
.
from
(
LocalDateTime
.
parse
(
imgMap
.
get
(
Constants
.
QG_CAPTCHA_INITDT
)).
toInstant
(
ZoneOffset
.
UTC
)));
}
if
(
imgMap
.
containsKey
(
Constants
.
QG_CAPTCHA_REGISTERDT
))
{
geetestLogEntity
.
setRegisterDt
(
Date
.
from
(
LocalDateTime
.
parse
(
imgMap
.
get
(
Constants
.
QG_CAPTCHA_REGISTERDT
)).
toInstant
(
ZoneOffset
.
UTC
)));
}
if
(
imgMap
.
containsKey
(
Constants
.
QG_CAPTCHA_REGISTERREDT
))
{
geetestLogEntity
.
setRegisterReDt
(
Date
.
from
(
LocalDateTime
.
parse
(
imgMap
.
get
(
Constants
.
QG_CAPTCHA_REGISTERREDT
)).
toInstant
(
ZoneOffset
.
UTC
)));
}
geetestLogEntity
=
geetestLogRepository
.
saveAndFlush
(
geetestLogEntity
);
return
geetestLogEntity
.
getId
();
}
@Override
@Transactional
public
void
updateGeetestLog
(
String
geetestLogId
,
String
initializeDt
,
String
registerDt
,
String
registerReDt
,
Map
<
String
,
Object
>
result
)
{
SimpleDateFormat
simpleDateFormat
=
new
SimpleDateFormat
(
"yyyy-MM-dd HH:mm:ss"
);
try
{
GeetestLogEntity
geetestLogEntity
=
geetestLogRepository
.
get
One
(
Long
.
parseLong
(
geetestLogId
));
GeetestLogEntity
geetestLogEntity
=
geetestLogRepository
.
find
One
(
Long
.
parseLong
(
geetestLogId
));
if
(
geetestLogEntity
!=
null
)
{
if
(
StringUtils
.
isNotBlank
(
initializeDt
)
&&
StringUtils
.
isNotBlank
(
registerDt
)
&&
StringUtils
.
isNotBlank
(
registerReDt
))
{
geetestLogEntity
.
setInitializeDt
(
simpleDateFormat
.
parse
(
initializeDt
));
...
...
@@ -81,11 +97,16 @@ public class GeetestLogServiceImpl implements IGeetestLogService {
dt
=
c
.
getTime
();
log
.
info
(
"执行删除超过180天的极验日志记录--{}"
,
dt
);
Timestamp
ts
=
new
Timestamp
(
dt
.
getTime
());
Timestamp
ts
=
new
Timestamp
(
dt
.
getTime
());
geetestLogRepository
.
deleteByCreatedAtIsBefore
(
ts
);
}
catch
(
Exception
e
)
{
log
.
error
(
"执行删除超过180天的极验即日记录--{}"
,
e
.
getMessage
());
}
}
@Override
public
GeetestLogEntity
getById
(
Long
id
)
{
return
geetestLogRepository
.
findOne
(
id
);
}
}
src/main/java/cn/quantgroup/xyqb/service/v2/BehaviorContext.java
View file @
43b64f4c
...
...
@@ -16,7 +16,7 @@ public class BehaviorContext {
private
final
Map
<
Integer
,
BehaviorStrategy
>
behaviorStrategyMap
=
new
HashMap
<>();
public
BehaviorContext
(
List
<
LoginStrategy
>
loginStrategies
,
List
<
BehaviorStrategy
>
behaviorStrategies
)
{
public
BehaviorContext
(
List
<
BehaviorStrategy
>
behaviorStrategies
)
{
behaviorStrategies
.
forEach
(
i
->
behaviorStrategyMap
.
put
(
i
.
getType
(),
i
));
}
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/GeetestBehaviorStrategy.java
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.controller.req.v2.BehaviorReq
;
import
cn.quantgroup.xyqb.controller.req.v2.ValidateBehavior
;
import
cn.quantgroup.xyqb.entity.GeetestLogEntity
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.BehaviorCodeBean
;
import
cn.quantgroup.xyqb.model.ClientType
;
import
cn.quantgroup.xyqb.model.SettingType
;
import
cn.quantgroup.xyqb.service.captcha.IGeetestCaptchaService
;
import
cn.quantgroup.xyqb.service.captcha.IGeetestLogService
;
import
cn.quantgroup.xyqb.service.captcha.IQuantgroupCaptchaService
;
import
cn.quantgroup.xyqb.util.PasswordUtil
;
import
org.apache.commons.lang.StringUtils
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
java.time.LocalDateTime
;
import
java.util.Locale
;
import
java.util.Map
;
import
java.util.UUID
;
...
...
@@ -18,8 +26,16 @@ import java.util.UUID;
*/
@Service
public
class
GeetestBehaviorStrategy
implements
BehaviorStrategy
{
@Resource
private
IGeetestCaptchaService
geetestCaptchaService
;
private
final
IGeetestCaptchaService
geetestCaptchaService
;
private
final
IGeetestLogService
geetestLogService
;
private
final
IQuantgroupCaptchaService
quantgroupCaptchaService
;
public
GeetestBehaviorStrategy
(
IGeetestCaptchaService
geetestCaptchaService
,
IGeetestLogService
geetestLogService
,
IQuantgroupCaptchaService
quantgroupCaptchaService
)
{
this
.
geetestCaptchaService
=
geetestCaptchaService
;
this
.
geetestLogService
=
geetestLogService
;
this
.
quantgroupCaptchaService
=
quantgroupCaptchaService
;
}
@Override
public
Integer
getType
()
{
...
...
@@ -28,7 +44,22 @@ public class GeetestBehaviorStrategy implements BehaviorStrategy {
@Override
public
boolean
validate
(
ValidateBehavior
validateBehavior
)
{
return
false
;
GeetestLogEntity
geetestLogEntity
=
geetestLogService
.
getById
(
Long
.
valueOf
(
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_ID
)));
if
(
geetestLogEntity
==
null
)
{
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_GEETEST_LOG
);
}
Map
<
String
,
Object
>
result
;
String
key
=
StringUtils
.
isNotBlank
(
geetestLogEntity
.
getPhoneNo
())
?
geetestLogEntity
.
getPhoneNo
().
trim
()
:
UUID
.
randomUUID
().
toString
();
if
(
SettingType
.
PASSWD
.
getAlias
().
equals
(
SettingType
.
valueByCode
(
validateBehavior
.
getType
()).
getAlias
()))
{
result
=
geetestCaptchaService
.
validGeetestCaptchaPasswd
(
key
,
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_IP
),
ClientType
.
valueByCode
(
geetestLogEntity
.
getDataSource
()),
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_CHALLENGE
),
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_VALIDATE
),
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_SECCODE
));
}
else
{
result
=
geetestCaptchaService
.
validGeetestCaptcha
(
key
,
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_IP
),
ClientType
.
valueByCode
(
geetestLogEntity
.
getDataSource
())
,
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_CHALLENGE
),
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_VALIDATE
),
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_SECCODE
));
}
geetestLogService
.
updateGeetestLog
(
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_ID
),
null
,
null
,
null
,
result
);
return
(
boolean
)
result
.
get
(
"valid"
);
}
...
...
@@ -37,17 +68,35 @@ public class GeetestBehaviorStrategy implements BehaviorStrategy {
BehaviorCodeBean
behaviorCodeBean
=
new
BehaviorCodeBean
();
String
key
=
StringUtils
.
isNotBlank
(
behaviorReq
.
getPhone
())
?
behaviorReq
.
getPhone
().
trim
()
:
UUID
.
randomUUID
().
toString
();
// key指纹
String
registerDt
=
LocalDateTime
.
now
().
toString
();
Map
<
String
,
String
>
imgMap
=
geetestCaptchaService
.
fetchGeetestCaptcha
(
PasswordUtil
.
MD5
(
key
),
behaviorReq
.
getIp
(),
ClientType
.
valueByCode
(
behaviorReq
.
getClientType
()));
if
(
imgMap
.
containsKey
(
"success"
)
&&
"1"
.
equals
(
imgMap
.
get
(
"success"
)))
{
behaviorCodeBean
.
setType
(
1
);
behaviorCodeBean
.
setGeetestCode
(
BehaviorCodeBean
.
GeetestCode
.
builder
().
gt
(
imgMap
.
get
(
"gt"
))
.
challenge
(
imgMap
.
get
(
"challenge"
))
.
reChallenge
(
imgMap
.
get
(
"reChallenge"
)).
.
reChallenge
(
imgMap
.
get
(
"reChallenge"
)
).
offline
(
false
).
newCaptcha
(
true
).
build
());
String
registerReDt
=
LocalDateTime
.
now
().
toString
();
imgMap
.
put
(
Constants
.
QG_CAPTCHA_INITDT
,
behaviorReq
.
getInitializeDt
().
toString
());
imgMap
.
put
(
Constants
.
QG_CAPTCHA_REGISTERDT
,
registerDt
);
imgMap
.
put
(
Constants
.
QG_CAPTCHA_REGISTERREDT
,
registerReDt
);
Long
geetestLogId
=
geetestLogService
.
saveGeetestLog
(
behaviorReq
.
getPhone
(),
ClientType
.
valueByCode
(
behaviorReq
.
getClientType
()).
getAlias
(),
SettingType
.
valueByCode
(
behaviorReq
.
getSettingType
()).
getAlias
(),
imgMap
);
behaviorCodeBean
.
setId
(
String
.
valueOf
(
geetestLogId
));
}
else
{
//降级方案
behaviorCodeBean
.
setType
(
2
);
imgMap
=
quantgroupCaptchaService
.
fetchQuantgroupCaptcha
(
Locale
.
CHINA
);
if
(
imgMap
!=
null
)
{
behaviorCodeBean
.
setQtCode
(
BehaviorCodeBean
.
QtCode
.
builder
()
.
imageData
(
imgMap
.
get
(
"image"
)).
build
());
behaviorCodeBean
.
setId
(
imgMap
.
get
(
"imageId"
));
}
else
{
throw
new
BizException
(
BizExceptionEnum
.
EX_GET_VERIFY_CODE
);
}
}
return
behaviorCodeBean
;
}
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/LoginContext.java
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.entity.UserTag
;
import
cn.quantgroup.xyqb.event.UserLoginEvent
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.context.ApplicationEventPublisher
;
import
org.springframework.stereotype.Service
;
import
java.util.HashMap
;
...
...
@@ -12,9 +18,10 @@ import java.util.Map;
@Service
public
class
LoginContext
{
private
final
Map
<
Integer
,
LoginStrategy
>
loginStrategyMap
=
new
HashMap
<>();
private
final
ApplicationEventPublisher
applicationEventPublisher
;
public
LoginContext
(
List
<
LoginStrategy
>
loginStrategies
)
{
public
LoginContext
(
List
<
LoginStrategy
>
loginStrategies
,
ApplicationEventPublisher
applicationEventPublisher
)
{
this
.
applicationEventPublisher
=
applicationEventPublisher
;
loginStrategies
.
forEach
(
i
->
loginStrategyMap
.
put
(
i
.
getType
(),
i
));
}
...
...
@@ -25,8 +32,20 @@ public class LoginContext {
//第二步、执行登录操作
LoginBean
loginBean
=
loginStrategy
.
login
(
loginParam
);
//第三步、发送登录成功消息
SessionStruct
sessionStruct
=
XyqbSessionContextHolder
.
getXSession
();
UserTag
userTag
=
UserTag
.
builder
().
userId
(
loginBean
.
getUserId
()).
registeredFrom
(
sessionStruct
.
getRegisteredFrom
()).
tenantId
(
sessionStruct
.
getTenantId
()).
build
();
String
geetestId
=
null
;
if
(
StringUtils
.
isNotEmpty
(
sessionStruct
.
getGeetestId
()))
{
geetestId
=
sessionStruct
.
getGeetestId
();
}
UserLoginEvent
userLoginEvent
=
new
UserLoginEvent
(
this
,
userTag
,
geetestId
);
applicationEventPublisher
.
publishEvent
(
userLoginEvent
);
return
login
Strategy
.
login
(
loginParam
)
;
return
login
Bean
;
}
}
src/main/java/cn/quantgroup/xyqb/service/v2/QuantGroupBehaviorStrategy.java
View file @
43b64f4c
package
cn
.
quantgroup
.
xyqb
.
service
.
v2
;
import
cn.quantgroup.xyqb.Constants
;
import
cn.quantgroup.xyqb.controller.req.v2.BehaviorReq
;
import
cn.quantgroup.xyqb.controller.req.v2.ValidateBehavior
;
import
cn.quantgroup.xyqb.exception.BizException
;
...
...
@@ -40,7 +41,7 @@ public class QuantGroupBehaviorStrategy implements BehaviorStrategy {
@Override
public
boolean
validate
(
ValidateBehavior
validateBehavior
)
{
boolean
result
=
quantgroupCaptchaService
.
validQuantgroupCaptcha
(
validateBehavior
.
getData
().
get
(
"id"
),
validateBehavior
.
getData
().
get
(
"imageValue"
));
boolean
result
=
quantgroupCaptchaService
.
validQuantgroupCaptcha
(
validateBehavior
.
getData
().
get
(
"id"
),
validateBehavior
.
getData
().
get
(
Constants
.
X_BEHAVIOR_IMAGEVALUE
));
if
(
result
){
return
true
;
}
else
{
...
...
@@ -56,7 +57,8 @@ public class QuantGroupBehaviorStrategy implements BehaviorStrategy {
if
(
challenge
==
null
)
{
throw
new
BizException
(
BizExceptionEnum
.
FAIL_GENERATE_IMAGE
);
}
behaviorCodeBean
.
setQtCode
(
BehaviorCodeBean
.
QtCode
.
builder
().
imageId
(
challenge
.
get
(
"imageId"
)).
imageData
(
challenge
.
get
(
"image"
)).
build
());
behaviorCodeBean
.
setQtCode
(
BehaviorCodeBean
.
QtCode
.
builder
().
imageData
(
challenge
.
get
(
"image"
)).
build
());
behaviorCodeBean
.
setId
(
challenge
.
get
(
"imageId"
));
return
behaviorCodeBean
;
}
}
src/main/java/cn/quantgroup/xyqb/session/XyqbSessionContextHolder.java
View file @
43b64f4c
...
...
@@ -37,22 +37,27 @@ public class XyqbSessionContextHolder {
return
sessionStruct
;
}
public
static
SessionStruct
initXSession
()
{
public
static
void
initXSession
()
{
SessionStruct
sessionStruct
;
if
(
threadSession
.
get
()
!=
null
)
{
sessionStruct
=
threadSession
.
get
();
}
else
{
if
(
threadSession
.
get
()
==
null
)
{
sessionStruct
=
new
SessionStruct
();
HttpServletRequest
request
=
((
ServletRequestAttributes
)
RequestContextHolder
.
getRequestAttributes
()).
getRequest
();
String
tenantId
=
request
.
getHeader
(
Constants
.
X_AUTH_TENANT
);
String
registered_from
=
request
.
getHeader
(
Constants
.
X_AUTH_FROM
);
String
ip
=
IpUtil
.
getRemoteIP
(
request
);
sessionStruct
.
setTenantId
(
Integer
.
valueOf
(
tenantId
));
sessionStruct
.
setRegisteredFrom
(
Integer
.
valueOf
(
registered_from
));
sessionStruct
.
setRegisteredFrom
(
Long
.
valueOf
(
registered_from
));
sessionStruct
.
setIp
(
ip
);
//如果是极验,那赋值
if
(
request
.
getHeader
(
Constants
.
X_BEHAVIOR_TYPE
)
!=
null
&&
"1"
.
equals
(
request
.
getHeader
(
Constants
.
X_BEHAVIOR_TYPE
)))
{
String
geetestId
=
request
.
getHeader
(
Constants
.
X_BEHAVIOR_ID
);
sessionStruct
.
setGeetestId
(
geetestId
);
}
threadSession
.
set
(
sessionStruct
);
}
return
sessionStruct
;
}
public
static
SessionStruct
getXSessionFromRedis
()
{
...
...
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