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
a86ff101
Commit
a86ff101
authored
Jul 10, 2023
by
王亮
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
finished internal login.
parent
81634cff
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
205 additions
and
3 deletions
+205
-3
OauthApiV2Controller.java
...antgroup/xyqb/controller/api/v2/OauthApiV2Controller.java
+31
-0
BizExceptionEnum.java
...n/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
+2
-0
InterLoginParam.java
...va/cn/quantgroup/xyqb/model/v2/login/InterLoginParam.java
+20
-0
IWeChatUserRepository.java
.../cn/quantgroup/xyqb/repository/IWeChatUserRepository.java
+2
-0
InterLoginStrategy.java
...ava/cn/quantgroup/xyqb/service/v2/InterLoginStrategy.java
+121
-0
LoginContext.java
...main/java/cn/quantgroup/xyqb/service/v2/LoginContext.java
+20
-3
IWechatService.java
...ava/cn/quantgroup/xyqb/service/wechat/IWechatService.java
+3
-0
WechatServiceImpl.java
...uantgroup/xyqb/service/wechat/impl/WechatServiceImpl.java
+6
-0
No files found.
src/main/java/cn/quantgroup/xyqb/controller/api/v2/OauthApiV2Controller.java
0 → 100644
View file @
a86ff101
package
cn
.
quantgroup
.
xyqb
.
controller
.
api
.
v2
;
import
cn.quantgroup.xyqb.controller.req.v2.LoginReq
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.service.v2.LoginContext
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
@RequestMapping
(
"/api/v2/oauth"
)
public
class
OauthApiV2Controller
{
private
final
LoginContext
loginContext
;
public
OauthApiV2Controller
(
LoginContext
loginContext
)
{
this
.
loginContext
=
loginContext
;
}
/**
* 对外内部登录接口
* @param loginReq LoginReq
* @return JsonResult<LoginBean>
* @see <a href="http://yapi.quantgroups.com/project/17/interface/api/65779">对外统一登录接口</a>
*/
@PostMapping
(
"/login"
)
public
JsonResult
<
LoginBean
>
login
(
@RequestBody
LoginReq
loginReq
){
return
JsonResult
.
buildSuccessResultGeneric
(
loginContext
.
login
(
loginReq
));
}
}
src/main/java/cn/quantgroup/xyqb/exception/BizExceptionEnum.java
View file @
a86ff101
...
@@ -19,6 +19,8 @@ public enum BizExceptionEnum {
...
@@ -19,6 +19,8 @@ public enum BizExceptionEnum {
ERROR_DIRECT_LOGIN
(
"1008"
,
"极验登录验证失败"
),
ERROR_DIRECT_LOGIN
(
"1008"
,
"极验登录验证失败"
),
ERROR_WECHAT_APP_ID
(
"1009"
,
"请先配置微信appId"
),
ERROR_WECHAT_APP_ID
(
"1009"
,
"请先配置微信appId"
),
ERROR_WECHAT_LOGIN
(
"1010"
,
"微信登录失败"
),
ERROR_WECHAT_LOGIN
(
"1010"
,
"微信登录失败"
),
ERROR_INTERNAL_LOGIN
(
"1011"
,
"公开接口不能调用内部登录方式"
),
ERROR_LOGIN_PARAM
(
"1012"
,
"登录参数异常,请按接口文档对接"
),
...
...
src/main/java/cn/quantgroup/xyqb/model/v2/login/InterLoginParam.java
0 → 100644
View file @
a86ff101
package
cn
.
quantgroup
.
xyqb
.
model
.
v2
.
login
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* 内部模拟登录接口,userId、uuid、openId和appId、unionId和appId不能同时为空
*/
@EqualsAndHashCode
(
callSuper
=
true
)
@Data
public
class
InterLoginParam
extends
BaseLoginParam
{
//用户id
private
Long
userId
;
private
String
uuid
;
private
String
openId
;
private
String
unionId
;
private
String
appId
;
}
src/main/java/cn/quantgroup/xyqb/repository/IWeChatUserRepository.java
View file @
a86ff101
...
@@ -17,6 +17,8 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
...
@@ -17,6 +17,8 @@ import static org.springframework.transaction.annotation.Propagation.MANDATORY;
*/
*/
public
interface
IWeChatUserRepository
extends
JpaRepository
<
WechatUserInfo
,
Long
>
{
public
interface
IWeChatUserRepository
extends
JpaRepository
<
WechatUserInfo
,
Long
>
{
WechatUserInfo
findByOpenIdAndAppNameAndAppIdAndTenantId
(
String
openId
,
String
appName
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByOpenIdAndAppNameAndAppIdAndTenantId
(
String
openId
,
String
appName
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByUnionIdAndAppIdAndTenantId
(
String
openId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByOpenIdAndAppIdAndTenantId
(
String
openId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByOpenIdAndAppIdAndTenantId
(
String
openId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByPhoneNoAndAppNameAndTenantId
(
String
phoneNo
,
String
appName
,
Integer
tenantId
);
WechatUserInfo
findByPhoneNoAndAppNameAndTenantId
(
String
phoneNo
,
String
appName
,
Integer
tenantId
);
...
...
src/main/java/cn/quantgroup/xyqb/service/v2/InterLoginStrategy.java
0 → 100644
View file @
a86ff101
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.entity.User
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.AuthBean
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.model.LoginProperties
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.v2.login.BaseLoginParam
;
import
cn.quantgroup.xyqb.model.v2.login.InterLoginParam
;
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.service.wechat.IWechatService
;
import
cn.quantgroup.xyqb.session.XyqbSessionContextHolder
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
/**
* 短信验证码登录
*/
@Service
@Slf4j
public
class
InterLoginStrategy
implements
LoginStrategy
{
private
final
ILockIpv4Service
lockIpv4Service
;
private
final
IUserService
userService
;
private
final
IWechatService
wechatService
;
private
final
ISessionService
sessionService
;
public
InterLoginStrategy
(
ILockIpv4Service
lockIpv4Service
,
IUserService
userService
,
IWechatService
wechatService
,
ISessionService
sessionService
)
{
this
.
lockIpv4Service
=
lockIpv4Service
;
this
.
userService
=
userService
;
this
.
wechatService
=
wechatService
;
this
.
sessionService
=
sessionService
;
}
@Override
public
Integer
getType
()
{
return
9000
;
}
@Override
public
LoginBean
login
(
BaseLoginParam
param
)
{
InterLoginParam
interLoginParam
=
(
InterLoginParam
)
param
;
SessionStruct
sessionStruct
=
XyqbSessionContextHolder
.
getXSession
();
User
user
=
null
;
//1、根据前端的条件,进行查询用户信息
if
(
interLoginParam
.
getUserId
()
!=
null
)
{
user
=
userService
.
findById
(
interLoginParam
.
getUserId
(),
sessionStruct
.
getTenantId
());
}
if
(
StringUtils
.
isNotEmpty
(
interLoginParam
.
getUuid
()))
{
user
=
userService
.
findByUuidInDb
(
interLoginParam
.
getUuid
(),
sessionStruct
.
getTenantId
());
}
if
(
StringUtils
.
isNotEmpty
(
interLoginParam
.
getAppId
())
&&
StringUtils
.
isNotEmpty
(
interLoginParam
.
getOpenId
()))
{
WechatUserInfo
wechatUserInfo
=
wechatService
.
findWechatUserInfoFromDb
(
interLoginParam
.
getOpenId
(),
interLoginParam
.
getAppId
(),
sessionStruct
.
getTenantId
());
if
(
wechatUserInfo
==
null
||
wechatUserInfo
.
getUserId
()
==
null
)
{
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_USER
);
}
user
=
userService
.
findById
(
wechatUserInfo
.
getUserId
(),
sessionStruct
.
getTenantId
());
}
if
(
StringUtils
.
isNotEmpty
(
interLoginParam
.
getAppId
())
&&
StringUtils
.
isNotEmpty
(
interLoginParam
.
getUnionId
()))
{
WechatUserInfo
wechatUserInfo
=
wechatService
.
findByUnionIdAndAppIdAndTenantId
(
interLoginParam
.
getUnionId
(),
interLoginParam
.
getAppId
(),
sessionStruct
.
getTenantId
());
if
(
wechatUserInfo
==
null
||
wechatUserInfo
.
getUserId
()
==
null
)
{
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_USER
);
}
user
=
userService
.
findById
(
wechatUserInfo
.
getUserId
(),
sessionStruct
.
getTenantId
());
}
if
(
user
==
null
){
throw
new
BizException
(
BizExceptionEnum
.
UN_EXIT_USER
);
}
//2、需要判断是否是否启用
if
(!
user
.
getEnable
())
{
log
.
info
(
"用户不存在,或者已经注销,phoneNo:{}"
,
user
.
getPhoneNo
());
throw
new
BizException
(
BizExceptionEnum
.
ERROR_OR_ENABLE_ERROR
);
}
LoginProperties
loginProperties
=
new
LoginProperties
(
1
,
sessionStruct
.
getRegisteredFrom
(),
sessionStruct
.
getTenantId
());
AuthBean
authBean
=
sessionService
.
createSession
(
user
,
loginProperties
,
LoginType
.
SUPERLOGIN
.
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
(
false
);
lockIpv4Service
.
unLockPhone
(
user
.
getPhoneNo
());
return
loginBean
;
}
@Override
public
BaseLoginParam
checkParam
(
LoginReq
loginReq
)
{
InterLoginParam
param
=
loginReq
.
getData
().
toJavaObject
(
InterLoginParam
.
class
);
if
(
param
.
getUserId
()==
null
||
StringUtils
.
isEmpty
(
param
.
getUuid
())
||
(
StringUtils
.
isEmpty
(
param
.
getOpenId
())
&&
StringUtils
.
isEmpty
(
param
.
getAppId
()))
||
(
StringUtils
.
isEmpty
(
param
.
getUnionId
())
&&
StringUtils
.
isEmpty
(
param
.
getAppId
())))
{
throw
new
BizException
(
BizExceptionEnum
.
ERROR_LOGIN_PARAM
);
}
return
param
;
}
}
src/main/java/cn/quantgroup/xyqb/service/v2/LoginContext.java
View file @
a86ff101
...
@@ -6,6 +6,8 @@ import cn.quantgroup.xyqb.entity.UserInfoEntity;
...
@@ -6,6 +6,8 @@ import cn.quantgroup.xyqb.entity.UserInfoEntity;
import
cn.quantgroup.xyqb.entity.UserTag
;
import
cn.quantgroup.xyqb.entity.UserTag
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.entity.WechatUserInfo
;
import
cn.quantgroup.xyqb.event.UserLoginEvent
;
import
cn.quantgroup.xyqb.event.UserLoginEvent
;
import
cn.quantgroup.xyqb.exception.BizException
;
import
cn.quantgroup.xyqb.exception.BizExceptionEnum
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.model.LoginBean
;
import
cn.quantgroup.xyqb.model.UserInfo
;
import
cn.quantgroup.xyqb.model.UserInfo
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
import
cn.quantgroup.xyqb.model.session.SessionStruct
;
...
@@ -25,7 +27,6 @@ import java.util.Map;
...
@@ -25,7 +27,6 @@ import java.util.Map;
@Service
@Service
public
class
LoginContext
{
public
class
LoginContext
{
private
final
Map
<
Integer
,
LoginStrategy
>
loginStrategyMap
=
new
HashMap
<>();
private
final
ApplicationEventPublisher
applicationEventPublisher
;
private
final
ApplicationEventPublisher
applicationEventPublisher
;
private
final
IWechatService
wechatService
;
private
final
IWechatService
wechatService
;
...
@@ -33,17 +34,33 @@ public class LoginContext {
...
@@ -33,17 +34,33 @@ public class LoginContext {
private
final
IUserInfoRepository
userInfoRepository
;
private
final
IUserInfoRepository
userInfoRepository
;
private
final
Map
<
Integer
,
LoginStrategy
>
interloginStrategyMap
=
new
HashMap
<>();
public
LoginContext
(
List
<
LoginStrategy
>
loginStrategies
,
ApplicationEventPublisher
applicationEventPublisher
,
IWechatService
wechatService
,
IUserRepository
userRepository
,
IUserInfoRepository
userInfoRepository
)
{
public
LoginContext
(
List
<
LoginStrategy
>
loginStrategies
,
ApplicationEventPublisher
applicationEventPublisher
,
IWechatService
wechatService
,
IUserRepository
userRepository
,
IUserInfoRepository
userInfoRepository
)
{
this
.
applicationEventPublisher
=
applicationEventPublisher
;
this
.
applicationEventPublisher
=
applicationEventPublisher
;
this
.
wechatService
=
wechatService
;
this
.
wechatService
=
wechatService
;
this
.
userRepository
=
userRepository
;
this
.
userRepository
=
userRepository
;
this
.
userInfoRepository
=
userInfoRepository
;
this
.
userInfoRepository
=
userInfoRepository
;
loginStrategies
.
forEach
(
i
->
loginStrategyMap
.
put
(
i
.
getType
(),
i
));
loginStrategies
.
forEach
(
i
->
inter
loginStrategyMap
.
put
(
i
.
getType
(),
i
));
}
}
public
LoginBean
login
(
LoginReq
loginReq
)
{
public
LoginBean
login
(
LoginReq
loginReq
)
{
if
(
loginReq
.
getType
()!=
null
&&
loginReq
.
getType
()==
9000
){
throw
new
BizException
(
BizExceptionEnum
.
ERROR_INTERNAL_LOGIN
);
}
return
this
.
interLogin
(
loginReq
);
}
/**
* 内部统一登录
* @param loginReq LoginReq
* @return LoginBean
*/
public
LoginBean
interLogin
(
LoginReq
loginReq
){
//第一步、校验参数
//第一步、校验参数
LoginStrategy
loginStrategy
=
loginStrategyMap
.
get
(
loginReq
.
getType
());
LoginStrategy
loginStrategy
=
inter
loginStrategyMap
.
get
(
loginReq
.
getType
());
BaseLoginParam
loginParam
=
loginStrategy
.
checkParam
(
loginReq
);
BaseLoginParam
loginParam
=
loginStrategy
.
checkParam
(
loginReq
);
...
...
src/main/java/cn/quantgroup/xyqb/service/wechat/IWechatService.java
View file @
a86ff101
...
@@ -15,6 +15,9 @@ public interface IWechatService {
...
@@ -15,6 +15,9 @@ public interface IWechatService {
WechatUserInfo
findWechatUserInfoFromDb
(
String
openId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findWechatUserInfoFromDb
(
String
openId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findByUnionIdAndAppIdAndTenantId
(
String
unionId
,
String
appId
,
Integer
tenantId
);
WechatUserInfo
findWechatUserInfoByPhoneNo
(
String
phoneNo
,
Integer
tenantId
);
WechatUserInfo
findWechatUserInfoByPhoneNo
(
String
phoneNo
,
Integer
tenantId
);
WechatUserInfo
saveWechatUserInfo
(
WechatUserInfo
userInfo
);
WechatUserInfo
saveWechatUserInfo
(
WechatUserInfo
userInfo
);
...
...
src/main/java/cn/quantgroup/xyqb/service/wechat/impl/WechatServiceImpl.java
View file @
a86ff101
...
@@ -116,6 +116,12 @@ public class WechatServiceImpl implements IWechatService {
...
@@ -116,6 +116,12 @@ public class WechatServiceImpl implements IWechatService {
return
weChatUserRepository
.
findByOpenIdAndAppNameAndAppIdAndTenantId
(
openId
,
"xyqb"
,
appId
,
tenantId
);
return
weChatUserRepository
.
findByOpenIdAndAppNameAndAppIdAndTenantId
(
openId
,
"xyqb"
,
appId
,
tenantId
);
}
}
@Override
public
WechatUserInfo
findByUnionIdAndAppIdAndTenantId
(
String
openId
,
String
appId
,
Integer
tenantId
)
{
return
weChatUserRepository
.
findByUnionIdAndAppIdAndTenantId
(
openId
,
appId
,
tenantId
);
}
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
WechatUserInfo
saveWechatUserInfo
(
WechatUserInfo
userInfo
)
{
public
WechatUserInfo
saveWechatUserInfo
(
WechatUserInfo
userInfo
)
{
...
...
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