Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
D
dsk-cr20g
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
Administrator
dsk-cr20g
Commits
e9ff696a
Commit
e9ff696a
authored
Mar 20, 2024
by
施翔轲
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
三方平台跳转登录相关改造
parent
8e8fb36d
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
1704 additions
and
1590 deletions
+1704
-1590
SysLoginController.java
...ava/com/dsk/web/controller/system/SysLoginController.java
+278
-262
ThirdPlatformLoginBody.java
.../dsk/common/core/domain/model/ThirdPlatformLoginBody.java
+19
-0
SysUser.java
dsk-system/src/main/java/com/dsk/system/domain/SysUser.java
+184
-179
SysLoginService.java
...src/main/java/com/dsk/system/service/SysLoginService.java
+704
-636
ISysTenantServiceImpl.java
...va/com/dsk/system/service/impl/ISysTenantServiceImpl.java
+519
-513
No files found.
dsk-admin/src/main/java/com/dsk/web/controller/system/SysLoginController.java
View file @
e9ff696a
...
@@ -2,28 +2,21 @@ package com.dsk.web.controller.system;
...
@@ -2,28 +2,21 @@ package com.dsk.web.controller.system;
import
cn.dev33.satoken.annotation.SaCheckLogin
;
import
cn.dev33.satoken.annotation.SaCheckLogin
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.stp.StpUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.collection.CollectionUtil
;
import
cn.hutool.core.lang.Assert
;
import
cn.hutool.core.lang.Assert
;
import
cn.hutool.core.lang.RegexPool
;
import
cn.hutool.core.lang.RegexPool
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.
RandomUtil
;
import
cn.hutool.core.util.
ObjectUtil
;
import
cn.hutool.core.util.ReUtil
;
import
cn.hutool.core.util.ReUtil
;
import
com.dsk.common.constant.Constants
;
import
com.dsk.common.constant.Constants
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.core.domain.R
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.core.domain.model.*
;
import
com.dsk.common.tenant.helper.TenantHelper
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.jsk.util.IpUtil
;
import
com.dsk.jsk.util.IpUtil
;
import
com.dsk.system.domain.SysMenu
;
import
com.dsk.system.domain.SysMenu
;
import
com.dsk.system.domain.SysUser
;
import
com.dsk.system.domain.SysUser
;
import
com.dsk.common.core.domain.model.EmailLoginBody
;
import
com.dsk.common.core.domain.model.LoginBody
;
import
com.dsk.common.core.domain.model.LoginUser
;
import
com.dsk.common.core.domain.model.SmsLoginBody
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.system.domain.vo.LoginVo
;
import
com.dsk.system.domain.vo.LoginVo
;
import
com.dsk.system.domain.vo.RouterVo
;
import
com.dsk.system.domain.vo.RouterVo
;
import
com.dsk.system.domain.vo.SysTenantVo
;
import
com.dsk.system.domain.vo.SysTenantVo
;
...
@@ -31,18 +24,19 @@ import com.dsk.system.service.ISysMenuService;
...
@@ -31,18 +24,19 @@ import com.dsk.system.service.ISysMenuService;
import
com.dsk.system.service.ISysUserService
;
import
com.dsk.system.service.ISysUserService
;
import
com.dsk.system.service.SysLoginService
;
import
com.dsk.system.service.SysLoginService
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
org.dromara.sms4j.api.SmsBlend
;
import
org.dromara.sms4j.api.entity.SmsResponse
;
import
org.dromara.sms4j.core.factory.SmsFactory
;
import
org.dromara.sms4j.provider.enumerate.SupplierType
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.ServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotBlank
;
import
java.time.Duration
;
import
java.time.Duration
;
import
java.util.*
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
/**
/**
* 登录验证
* 登录验证
...
@@ -78,6 +72,24 @@ public class SysLoginController {
...
@@ -78,6 +72,24 @@ public class SysLoginController {
return
R
.
ok
(
loginVo
);
return
R
.
ok
(
loginVo
);
}
}
/**
* 三方平台跳转登录方法
*
* @param tpLoginBody 登录信息
* @return 结果
*/
@SaIgnore
@PostMapping
(
"/thirdPlatformLogin"
)
public
R
<
LoginVo
>
thirdPlatformLogin
(
@Validated
@RequestBody
ThirdPlatformLoginBody
tpLoginBody
,
HttpServletRequest
request
)
{
String
ipAddr
=
IpUtil
.
getIpAddr
(
request
);
LoginVo
loginVo
=
loginService
.
thirdPlatformLogin
(
tpLoginBody
,
ipAddr
);
//设置三方登录标识
RedisUtils
.
setCacheObject
(
GlobalConstants
.
SOCIAL_AUTH_CODE_KEY
+
loginVo
.
getTenantId
(),
loginVo
.
getTenantId
(),
Duration
.
ofMinutes
(
5
));
return
R
.
ok
(
loginVo
);
}
// /**
// /**
// * 发送短信验证码
// * 发送短信验证码
...
@@ -245,6 +257,10 @@ public class SysLoginController {
...
@@ -245,6 +257,10 @@ public class SysLoginController {
ajax
.
put
(
"user"
,
user
);
ajax
.
put
(
"user"
,
user
);
ajax
.
put
(
"roles"
,
loginUser
.
getRolePermission
());
ajax
.
put
(
"roles"
,
loginUser
.
getRolePermission
());
ajax
.
put
(
"permissions"
,
loginUser
.
getMenuPermission
());
ajax
.
put
(
"permissions"
,
loginUser
.
getMenuPermission
());
String
key
=
GlobalConstants
.
SOCIAL_AUTH_CODE_KEY
+
loginUser
.
getTenantId
();
ajax
.
put
(
"isThirdPlatformLogin"
,
ObjectUtil
.
isNotNull
(
RedisUtils
.
getCacheObject
(
key
))
?
"true"
:
"false"
);
//删除三方平台登录标识
RedisUtils
.
deleteObject
(
key
);
return
R
.
ok
(
ajax
);
return
R
.
ok
(
ajax
);
}
}
...
...
dsk-common/src/main/java/com/dsk/common/core/domain/model/ThirdPlatformLoginBody.java
0 → 100644
View file @
e9ff696a
package
com
.
dsk
.
common
.
core
.
domain
.
model
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
/**
* 三方平台用户登录对象
*
* @author sxk
*/
@Data
public
class
ThirdPlatformLoginBody
{
/**
* 三方平台跳转本系统所需秘钥
*/
@NotBlank
(
message
=
"桑芳平台登录秘钥不能为空"
)
private
String
thirdPlatformKey
;
}
dsk-system/src/main/java/com/dsk/system/domain/SysUser.java
View file @
e9ff696a
...
@@ -36,6 +36,11 @@ public class SysUser extends TenantEntity {
...
@@ -36,6 +36,11 @@ public class SysUser extends TenantEntity {
@TableId
(
value
=
"user_id"
)
@TableId
(
value
=
"user_id"
)
private
Long
userId
;
private
Long
userId
;
/**
* 三方平台跳转本系统所需秘钥
*/
private
String
thirdPlatformKey
;
/**
/**
* 部门ID
* 部门ID
*/
*/
...
...
dsk-system/src/main/java/com/dsk/system/service/SysLoginService.java
View file @
e9ff696a
...
@@ -12,8 +12,6 @@ import cn.hutool.core.util.ObjectUtil;
...
@@ -12,8 +12,6 @@ import cn.hutool.core.util.ObjectUtil;
import
cn.hutool.core.util.ReUtil
;
import
cn.hutool.core.util.ReUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.dsk.common.constant.CacheConstants
;
import
com.dsk.common.constant.Constants
;
import
com.dsk.common.constant.Constants
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.constant.GlobalConstants
;
import
com.dsk.common.constant.TenantConstants
;
import
com.dsk.common.constant.TenantConstants
;
...
@@ -21,6 +19,7 @@ import com.dsk.common.core.domain.dto.RoleDTO;
...
@@ -21,6 +19,7 @@ import com.dsk.common.core.domain.dto.RoleDTO;
import
com.dsk.common.core.domain.event.LogininforEvent
;
import
com.dsk.common.core.domain.event.LogininforEvent
;
import
com.dsk.common.core.domain.model.LoginBody
;
import
com.dsk.common.core.domain.model.LoginBody
;
import
com.dsk.common.core.domain.model.LoginUser
;
import
com.dsk.common.core.domain.model.LoginUser
;
import
com.dsk.common.core.domain.model.ThirdPlatformLoginBody
;
import
com.dsk.common.core.domain.model.XcxLoginUser
;
import
com.dsk.common.core.domain.model.XcxLoginUser
;
import
com.dsk.common.enums.DeviceType
;
import
com.dsk.common.enums.DeviceType
;
import
com.dsk.common.enums.LoginType
;
import
com.dsk.common.enums.LoginType
;
...
@@ -31,7 +30,6 @@ import com.dsk.common.exception.user.CaptchaExpireException;
...
@@ -31,7 +30,6 @@ import com.dsk.common.exception.user.CaptchaExpireException;
import
com.dsk.common.exception.user.UserException
;
import
com.dsk.common.exception.user.UserException
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.helper.LoginHelper
;
import
com.dsk.common.tenant.exception.TenantException
;
import
com.dsk.common.tenant.exception.TenantException
;
import
com.dsk.common.tenant.helper.TenantBroker
;
import
com.dsk.common.tenant.helper.TenantHelper
;
import
com.dsk.common.tenant.helper.TenantHelper
;
import
com.dsk.common.utils.DateUtils
;
import
com.dsk.common.utils.DateUtils
;
import
com.dsk.common.utils.MessageUtils
;
import
com.dsk.common.utils.MessageUtils
;
...
@@ -39,11 +37,9 @@ import com.dsk.common.utils.ServletUtils;
...
@@ -39,11 +37,9 @@ import com.dsk.common.utils.ServletUtils;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.common.utils.spring.SpringUtils
;
import
com.dsk.common.utils.spring.SpringUtils
;
import
com.dsk.system.domain.SysTenant
;
import
com.dsk.system.domain.SysUser
;
import
com.dsk.system.domain.SysUser
;
import
com.dsk.system.domain.vo.LoginVo
;
import
com.dsk.system.domain.vo.LoginVo
;
import
com.dsk.system.domain.vo.SysTenantVo
;
import
com.dsk.system.domain.vo.SysTenantVo
;
import
com.dsk.system.mapper.SysTenantMapper
;
import
com.dsk.system.mapper.SysUserMapper
;
import
com.dsk.system.mapper.SysUserMapper
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -161,6 +157,78 @@ public class SysLoginService {
...
@@ -161,6 +157,78 @@ public class SysLoginService {
// return StpUtil.getTokenValue();
// return StpUtil.getTokenValue();
}
}
/**
* 三方平台跳转登录方法
*
* @param tpLoginBody 登录信息
* @return 结果
*/
public
LoginVo
thirdPlatformLogin
(
ThirdPlatformLoginBody
tpLoginBody
,
String
ipAddr
)
{
return
TenantHelper
.
ignore
(()
->
{
SysUser
sysUser
=
userMapper
.
selectOne
(
new
LambdaQueryWrapper
<
SysUser
>()
.
eq
(
SysUser:
:
getThirdPlatformKey
,
tpLoginBody
.
getThirdPlatformKey
()));
String
tenantId
=
sysUser
.
getTenantId
();
String
username
=
sysUser
.
getUserName
();
String
password
=
sysUser
.
getPassword
();
if
(
ReUtil
.
isMatch
(
RegexPool
.
MOBILE
,
username
))
{
String
defaultTenantId
=
RedisUtils
.
getCacheObject
(
GlobalConstants
.
PHONE_DEFAULT_TENANT
+
username
);
log
.
info
(
"登录用户:{} 获取缓存默认租户:"
+
tenantId
,
username
);
if
(
StrUtil
.
isEmpty
(
tenantId
)
&&
StrUtil
.
isNotBlank
(
defaultTenantId
))
{
defaultTenantId
=
checkDefaultTenant
(
defaultTenantId
,
username
);
tenantId
=
defaultTenantId
;
}
}
//查询手机号绑定的所有用户
if
(
StrUtil
.
isEmpty
(
tenantId
))
{
List
<
SysUser
>
sysUsers
=
queryListByPhone
(
username
);
if
(
CollectionUtil
.
isEmpty
(
sysUsers
))
{
log
.
info
(
"登录用户:{} 不存在."
,
username
);
throw
new
UserException
(
"user.not.exists"
,
username
);
}
else
if
(
sysUsers
.
size
()
>
1
)
{
//处理存在多个用户的情况,取一个最新租户
SysUser
sysUser1
=
sysUsers
.
get
(
0
);
if
(
ObjectUtil
.
isEmpty
(
sysUser
))
{
log
.
info
(
"登录用户:{} 不存在."
,
username
);
throw
new
UserException
(
"user.not.exists"
,
username
);
}
tenantId
=
sysUser1
.
getTenantId
();
}
else
{
SysUser
sysUser2
=
sysUsers
.
get
(
0
);
tenantId
=
sysUser2
.
getTenantId
();
}
}
// 校验租户
if
(
tenantId
!=
null
)
{
checkTenant
(
tenantId
);
}
if
(
tenantId
==
null
||
""
.
equals
(
tenantId
))
{
tenantId
=
TenantConstants
.
DEFAULT_TENANT_ID
;
}
TenantHelper
.
setTenantId
(
tenantId
);
// 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可
SysUser
user
=
loadUserByUsername
(
username
);
//checkLogin(LoginType.PASSWORD, username, () -> !BCrypt.checkpw(password, user.getPassword()));
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
LoginUser
loginUser
=
buildLoginUser
(
user
);
// 生成token
loginUser
.
setIpaddr
(
ipAddr
);
LoginHelper
.
loginByDevice
(
loginUser
,
DeviceType
.
PC
);
recordLogininfor
(
username
,
Constants
.
LOGIN_SUCCESS
,
MessageUtils
.
message
(
"user.login.success"
));
recordLoginInfo
(
user
.
getUserId
(),
username
);
LoginVo
loginVo
=
new
LoginVo
();
loginVo
.
setTenantId
(
TenantHelper
.
getTenantId
());
loginVo
.
setAccessToken
(
StpUtil
.
getTokenValue
());
loginVo
.
setExpireIn
(
StpUtil
.
getTokenTimeout
());
return
loginVo
;
});
}
/**
/**
* 登录验证
* 登录验证
...
...
dsk-system/src/main/java/com/dsk/system/service/impl/ISysTenantServiceImpl.java
View file @
e9ff696a
...
@@ -23,6 +23,7 @@ import com.dsk.common.core.domain.entity.SysDictType;
...
@@ -23,6 +23,7 @@ import com.dsk.common.core.domain.entity.SysDictType;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.core.page.TableDataInfo
;
import
com.dsk.common.enums.UserStatus
;
import
com.dsk.common.enums.UserStatus
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.exception.ServiceException
;
import
com.dsk.common.utils.DingTalkUtil
;
import
com.dsk.common.utils.PasswordUtils
;
import
com.dsk.common.utils.PasswordUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.StringUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
import
com.dsk.common.utils.redis.RedisUtils
;
...
@@ -175,6 +176,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
...
@@ -175,6 +176,7 @@ public class ISysTenantServiceImpl implements ISysTenantService {
new
LambdaQueryWrapper
<
SysTenant
>().
select
(
SysTenant:
:
getTenantId
),
Convert:
:
toStr
);
new
LambdaQueryWrapper
<
SysTenant
>().
select
(
SysTenant:
:
getTenantId
),
Convert:
:
toStr
);
String
tenantId
=
generateTenantId
(
tenantIds
);
String
tenantId
=
generateTenantId
(
tenantIds
);
add
.
setTenantId
(
tenantId
);
add
.
setTenantId
(
tenantId
);
boolean
flag
=
baseMapper
.
insert
(
add
)
>
0
;
boolean
flag
=
baseMapper
.
insert
(
add
)
>
0
;
if
(!
flag
)
{
if
(!
flag
)
{
throw
new
ServiceException
(
"创建租户失败"
);
throw
new
ServiceException
(
"创建租户失败"
);
...
@@ -204,6 +206,8 @@ public class ISysTenantServiceImpl implements ISysTenantService {
...
@@ -204,6 +206,8 @@ public class ISysTenantServiceImpl implements ISysTenantService {
// 创建系统用户
// 创建系统用户
SysUser
user
=
new
SysUser
();
SysUser
user
=
new
SysUser
();
user
.
setTenantId
(
tenantId
);
user
.
setTenantId
(
tenantId
);
String
thirdPlatformKey
=
UUID
.
randomUUID
().
toString
();
user
.
setThirdPlatformKey
(
thirdPlatformKey
);
user
.
setPhonenumber
(
bo
.
getContactPhone
());
user
.
setPhonenumber
(
bo
.
getContactPhone
());
//默认新增用户名为手机号
//默认新增用户名为手机号
user
.
setUserName
(
bo
.
getContactPhone
());
user
.
setUserName
(
bo
.
getContactPhone
());
...
@@ -252,13 +256,15 @@ public class ISysTenantServiceImpl implements ISysTenantService {
...
@@ -252,13 +256,15 @@ public class ISysTenantServiceImpl implements ISysTenantService {
}
}
configMapper
.
insertBatch
(
sysConfigList
);
configMapper
.
insertBatch
(
sysConfigList
);
////此处暂用钉钉机器人模拟发送短信
//此处暂用钉钉机器人模拟发送短信
//String content = "【短信通知】:"
String
content
=
"【短信通知】:"
// + bo.getContactUserName()
+
bo
.
getContactUserName
()
// + ",您好,您已经成功开通数字化经营管理系统,请使用手机号码登录,初始密码为"
+
",您好,您已经成功开通数字化经营管理系统,请使用手机号码登录,初始密码为"
// + password
+
password
// + "。友情提示:为了您的账号安全,请勿泄露密码。";
+
",三方平台登录秘钥为"
//DingTalkUtil.sendDingTalkMsg(content);
+
thirdPlatformKey
+
"。友情提示:为了您的账号安全,请勿泄露密码。"
;
DingTalkUtil
.
sendDingTalkMsg
(
content
);
//租户新增成功,发送短信通知租户
//租户新增成功,发送短信通知租户
LinkedHashMap
<
String
,
String
>
map
=
new
LinkedHashMap
<>(
1
);
LinkedHashMap
<
String
,
String
>
map
=
new
LinkedHashMap
<>(
1
);
...
...
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