Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
b37e593a
提交
b37e593a
authored
7月 05, 2022
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化管理后台的社交登录
上级
441330e4
隐藏空白字符变更
内嵌
并排
正在显示
16 个修改的文件
包含
90 行增加
和
63 行删除
+90
-63
WebFilterOrderEnum.java
...oder/yudao/framework/common/enums/WebFilterOrderEnum.java
+1
-1
PageParam.java
...ava/cn/iocoder/yudao/framework/common/pojo/PageParam.java
+2
-2
OperateLogAspect.java
...yudao/framework/operatelog/core/aop/OperateLogAspect.java
+10
-11
SocialUserBindReqDTO.java
...ao/module/system/api/social/dto/SocialUserBindReqDTO.java
+4
-0
OAuth2ClientConstants.java
...dao/module/system/enums/oauth2/OAuth2ClientConstants.java
+1
-1
OAuth2GrantTypeEnum.java
...yudao/module/system/enums/oauth2/OAuth2GrantTypeEnum.java
+1
-1
AuthController.java
...o/module/system/controller/admin/auth/AuthController.java
+5
-12
AuthLoginReqVO.java
...odule/system/controller/admin/auth/vo/AuthLoginReqVO.java
+29
-1
AuthSocialLoginReqVO.java
...system/controller/admin/auth/vo/AuthSocialLoginReqVO.java
+3
-3
OAuth2OpenController.java
.../system/controller/admin/oauth2/OAuth2OpenController.java
+1
-1
AuthConvert.java
...iocoder/yudao/module/system/convert/auth/AuthConvert.java
+0
-1
OAuth2ClientDO.java
...o/module/system/dal/dataobject/oauth2/OAuth2ClientDO.java
+1
-1
AdminAuthService.java
...er/yudao/module/system/service/auth/AdminAuthService.java
+1
-9
AdminAuthServiceImpl.java
...udao/module/system/service/auth/AdminAuthServiceImpl.java
+9
-14
SmsSendServiceImpl.java
...r/yudao/module/system/service/sms/SmsSendServiceImpl.java
+21
-4
OAuth2OpenControllerTest.java
...tem/controller/admin/oauth2/OAuth2OpenControllerTest.java
+1
-1
没有找到文件。
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/enums/WebFilterOrderEnum.java
浏览文件 @
b37e593a
...
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.common.enums;
...
@@ -3,7 +3,7 @@ package cn.iocoder.yudao.framework.common.enums;
/**
/**
* Web 过滤器顺序的枚举类,保证过滤器按照符合我们的预期
* Web 过滤器顺序的枚举类,保证过滤器按照符合我们的预期
*
*
* 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的
util
包下
* 考虑到每个 starter 都需要用到该工具类,所以放到 common 模块下的
enum
包下
*
*
* @author 芋道源码
* @author 芋道源码
*/
*/
...
...
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/PageParam.java
浏览文件 @
b37e593a
...
@@ -23,8 +23,8 @@ public class PageParam implements Serializable {
...
@@ -23,8 +23,8 @@ public class PageParam implements Serializable {
@ApiModelProperty
(
value
=
"每页条数,最大值为 100"
,
required
=
true
,
example
=
"10"
)
@ApiModelProperty
(
value
=
"每页条数,最大值为 100"
,
required
=
true
,
example
=
"10"
)
@NotNull
(
message
=
"每页条数不能为空"
)
@NotNull
(
message
=
"每页条数不能为空"
)
@Min
(
value
=
1
,
message
=
"
页码
最小值为 1"
)
@Min
(
value
=
1
,
message
=
"
每页条数
最小值为 1"
)
@Max
(
value
=
100
,
message
=
"
页码
最大值为 100"
)
@Max
(
value
=
100
,
message
=
"
每页条数
最大值为 100"
)
private
Integer
pageSize
=
PAGE_SIZE
;
private
Integer
pageSize
=
PAGE_SIZE
;
}
}
yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelog/core/aop/OperateLogAspect.java
浏览文件 @
b37e593a
...
@@ -44,7 +44,7 @@ import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeC
...
@@ -44,7 +44,7 @@ import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeC
* 满足如下任一条件,则会进行记录:
* 满足如下任一条件,则会进行记录:
* 1. 使用 @ApiOperation + 非 @GetMapping
* 1. 使用 @ApiOperation + 非 @GetMapping
* 2. 使用 @OperateLog 注解
* 2. 使用 @OperateLog 注解
*
*
<p>
* 但是,如果声明 @OperateLog 注解时,将 enable 属性设置为 false 时,强制不记录。
* 但是,如果声明 @OperateLog 注解时,将 enable 属性设置为 false 时,强制不记录。
*
*
* @author 芋道源码
* @author 芋道源码
...
@@ -77,7 +77,8 @@ public class OperateLogAspect {
...
@@ -77,7 +77,8 @@ public class OperateLogAspect {
return
around0
(
joinPoint
,
operateLog
,
apiOperation
);
return
around0
(
joinPoint
,
operateLog
,
apiOperation
);
}
}
@Around
(
"!@annotation(io.swagger.annotations.ApiOperation) && @annotation(operateLog)"
)
// 兼容处理,只添加 @OperateLog 注解的情况
@Around
(
"!@annotation(io.swagger.annotations.ApiOperation) && @annotation(operateLog)"
)
// 兼容处理,只添加 @OperateLog 注解的情况
public
Object
around
(
ProceedingJoinPoint
joinPoint
,
public
Object
around
(
ProceedingJoinPoint
joinPoint
,
cn
.
iocoder
.
yudao
.
framework
.
operatelog
.
core
.
annotations
.
OperateLog
operateLog
)
throws
Throwable
{
cn
.
iocoder
.
yudao
.
framework
.
operatelog
.
core
.
annotations
.
OperateLog
operateLog
)
throws
Throwable
{
return
around0
(
joinPoint
,
operateLog
,
null
);
return
around0
(
joinPoint
,
operateLog
,
null
);
...
@@ -236,14 +237,12 @@ public class OperateLogAspect {
...
@@ -236,14 +237,12 @@ public class OperateLogAspect {
}
}
operateLogObj
.
setDuration
((
int
)
(
System
.
currentTimeMillis
()
-
startTime
.
getTime
()));
operateLogObj
.
setDuration
((
int
)
(
System
.
currentTimeMillis
()
-
startTime
.
getTime
()));
// (正常)处理 resultCode 和 resultMsg 字段
// (正常)处理 resultCode 和 resultMsg 字段
if
(
result
!=
null
)
{
if
(
result
instanceof
CommonResult
)
{
if
(
result
instanceof
CommonResult
)
{
CommonResult
<?>
commonResult
=
(
CommonResult
<?>)
result
;
CommonResult
<?>
commonResult
=
(
CommonResult
<?>)
result
;
operateLogObj
.
setResultCode
(
commonResult
.
getCode
());
operateLogObj
.
setResultCode
(
commonResult
.
getCode
());
operateLogObj
.
setResultMsg
(
commonResult
.
getMsg
());
operateLogObj
.
setResultMsg
(
commonResult
.
getMsg
());
}
else
{
}
else
{
operateLogObj
.
setResultCode
(
SUCCESS
.
getCode
());
operateLogObj
.
setResultCode
(
SUCCESS
.
getCode
());
}
}
}
// (异常)处理 resultCode 和 resultMsg 字段
// (异常)处理 resultCode 和 resultMsg 字段
if
(
exception
!=
null
)
{
if
(
exception
!=
null
)
{
...
@@ -267,7 +266,7 @@ public class OperateLogAspect {
...
@@ -267,7 +266,7 @@ public class OperateLogAspect {
return
null
;
return
null
;
}
}
return
Arrays
.
stream
(
requestMethods
).
filter
(
requestMethod
->
return
Arrays
.
stream
(
requestMethods
).
filter
(
requestMethod
->
requestMethod
==
RequestMethod
.
POST
requestMethod
==
RequestMethod
.
POST
||
requestMethod
==
RequestMethod
.
PUT
||
requestMethod
==
RequestMethod
.
PUT
||
requestMethod
==
RequestMethod
.
DELETE
)
||
requestMethod
==
RequestMethod
.
DELETE
)
.
findFirst
().
orElse
(
null
);
.
findFirst
().
orElse
(
null
);
...
...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/social/dto/SocialUserBindReqDTO.java
浏览文件 @
b37e593a
...
@@ -3,7 +3,9 @@ package cn.iocoder.yudao.module.system.api.social.dto;
...
@@ -3,7 +3,9 @@ package cn.iocoder.yudao.module.system.api.social.dto;
import
cn.iocoder.yudao.framework.common.enums.UserTypeEnum
;
import
cn.iocoder.yudao.framework.common.enums.UserTypeEnum
;
import
cn.iocoder.yudao.framework.common.validation.InEnum
;
import
cn.iocoder.yudao.framework.common.validation.InEnum
;
import
cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum
;
import
cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.NotNull
;
...
@@ -14,6 +16,8 @@ import javax.validation.constraints.NotNull;
...
@@ -14,6 +16,8 @@ import javax.validation.constraints.NotNull;
* @author 芋道源码
* @author 芋道源码
*/
*/
@Data
@Data
@NoArgsConstructor
@AllArgsConstructor
public
class
SocialUserBindReqDTO
{
public
class
SocialUserBindReqDTO
{
/**
/**
...
...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/
auth
/OAuth2ClientConstants.java
→
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/
oauth2
/OAuth2ClientConstants.java
浏览文件 @
b37e593a
package
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
auth
;
package
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
oauth2
;
/**
/**
* OAuth2.0 客户端的通用枚举
* OAuth2.0 客户端的通用枚举
...
...
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/
auth
/OAuth2GrantTypeEnum.java
→
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/
oauth2
/OAuth2GrantTypeEnum.java
浏览文件 @
b37e593a
package
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
auth
;
package
cn
.
iocoder
.
yudao
.
module
.
system
.
enums
.
oauth2
;
import
cn.hutool.core.util.ArrayUtil
;
import
cn.hutool.core.util.ArrayUtil
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java
浏览文件 @
b37e593a
...
@@ -141,23 +141,16 @@ public class AuthController {
...
@@ -141,23 +141,16 @@ public class AuthController {
@ApiImplicitParam
(
name
=
"type"
,
value
=
"社交类型"
,
required
=
true
,
dataTypeClass
=
Integer
.
class
),
@ApiImplicitParam
(
name
=
"type"
,
value
=
"社交类型"
,
required
=
true
,
dataTypeClass
=
Integer
.
class
),
@ApiImplicitParam
(
name
=
"redirectUri"
,
value
=
"回调路径"
,
dataTypeClass
=
String
.
class
)
@ApiImplicitParam
(
name
=
"redirectUri"
,
value
=
"回调路径"
,
dataTypeClass
=
String
.
class
)
})
})
public
CommonResult
<
String
>
social
AuthRedirect
(
@RequestParam
(
"type"
)
Integer
type
,
public
CommonResult
<
String
>
social
Login
(
@RequestParam
(
"type"
)
Integer
type
,
@RequestParam
(
"redirectUri"
)
String
redirectUri
)
{
@RequestParam
(
"redirectUri"
)
String
redirectUri
)
{
return
CommonResult
.
success
(
socialUserService
.
getAuthorizeUrl
(
type
,
redirectUri
));
return
CommonResult
.
success
(
socialUserService
.
getAuthorizeUrl
(
type
,
redirectUri
));
}
}
@PostMapping
(
"/social-
quick-
login"
)
@PostMapping
(
"/social-login"
)
@ApiOperation
(
"社交快捷登录,使用 code 授权码
"
)
@ApiOperation
(
value
=
"社交快捷登录,使用 code 授权码"
,
notes
=
"适合未登录的用户,但是社交账号已绑定用户
"
)
@OperateLog
(
enable
=
false
)
// 避免 Post 请求被记录操作日志
@OperateLog
(
enable
=
false
)
// 避免 Post 请求被记录操作日志
public
CommonResult
<
AuthLoginRespVO
>
socialQuickLogin
(
@RequestBody
@Valid
AuthSocialQuickLoginReqVO
reqVO
)
{
public
CommonResult
<
AuthLoginRespVO
>
socialQuickLogin
(
@RequestBody
@Valid
AuthSocialLoginReqVO
reqVO
)
{
return
success
(
authService
.
socialQuickLogin
(
reqVO
));
return
success
(
authService
.
socialLogin
(
reqVO
));
}
@PostMapping
(
"/social-bind-login"
)
@ApiOperation
(
"社交绑定登录,使用 code 授权码 + 账号密码"
)
@OperateLog
(
enable
=
false
)
// 避免 Post 请求被记录操作日志
public
CommonResult
<
AuthLoginRespVO
>
socialBindLogin
(
@RequestBody
@Valid
AuthSocialBindLoginReqVO
reqVO
)
{
return
success
(
authService
.
socialBindLogin
(
reqVO
));
}
}
}
}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthLoginReqVO.java
浏览文件 @
b37e593a
package
cn
.
iocoder
.
yudao
.
module
.
system
.
controller
.
admin
.
auth
.
vo
;
package
cn
.
iocoder
.
yudao
.
module
.
system
.
controller
.
admin
.
auth
.
vo
;
import
cn.hutool.core.util.StrUtil
;
import
cn.iocoder.yudao.framework.common.validation.InEnum
;
import
cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
@@ -8,10 +11,11 @@ import lombok.Data;
...
@@ -8,10 +11,11 @@ import lombok.Data;
import
lombok.NoArgsConstructor
;
import
lombok.NoArgsConstructor
;
import
org.hibernate.validator.constraints.Length
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.AssertTrue
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Pattern
;
import
javax.validation.constraints.Pattern
;
@ApiModel
(
"管理后台 - 账号密码登录 Request VO
"
)
@ApiModel
(
value
=
"管理后台 - 账号密码登录 Request VO"
,
description
=
"如果登录并绑定社交用户,需要传递 social 开头的参数
"
)
@Data
@Data
@NoArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@AllArgsConstructor
...
@@ -29,6 +33,8 @@ public class AuthLoginReqVO {
...
@@ -29,6 +33,8 @@ public class AuthLoginReqVO {
@Length
(
min
=
4
,
max
=
16
,
message
=
"密码长度为 4-16 位"
)
@Length
(
min
=
4
,
max
=
16
,
message
=
"密码长度为 4-16 位"
)
private
String
password
;
private
String
password
;
// ========== 图片验证码相关 ==========
@ApiModelProperty
(
value
=
"验证码"
,
required
=
true
,
example
=
"1024"
,
notes
=
"验证码开启时,需要传递"
)
@ApiModelProperty
(
value
=
"验证码"
,
required
=
true
,
example
=
"1024"
,
notes
=
"验证码开启时,需要传递"
)
@NotEmpty
(
message
=
"验证码不能为空"
,
groups
=
CodeEnableGroup
.
class
)
@NotEmpty
(
message
=
"验证码不能为空"
,
groups
=
CodeEnableGroup
.
class
)
private
String
code
;
private
String
code
;
...
@@ -37,9 +43,31 @@ public class AuthLoginReqVO {
...
@@ -37,9 +43,31 @@ public class AuthLoginReqVO {
@NotEmpty
(
message
=
"唯一标识不能为空"
,
groups
=
CodeEnableGroup
.
class
)
@NotEmpty
(
message
=
"唯一标识不能为空"
,
groups
=
CodeEnableGroup
.
class
)
private
String
uuid
;
private
String
uuid
;
// ========== 绑定社交登录时,需要传递如下参数 ==========
@ApiModelProperty
(
value
=
"社交平台的类型"
,
required
=
true
,
example
=
"10"
,
notes
=
"参见 SysUserSocialTypeEnum 枚举值"
)
@InEnum
(
SocialTypeEnum
.
class
)
private
Integer
socialType
;
@ApiModelProperty
(
value
=
"授权码"
,
required
=
true
,
example
=
"1024"
)
private
String
socialCode
;
@ApiModelProperty
(
value
=
"state"
,
required
=
true
,
example
=
"9b2ffbc1-7425-4155-9894-9d5c08541d62"
)
private
String
socialState
;
/**
/**
* 开启验证码的 Group
* 开启验证码的 Group
*/
*/
public
interface
CodeEnableGroup
{}
public
interface
CodeEnableGroup
{}
@AssertTrue
(
message
=
"授权码不能为空"
)
public
boolean
isSocialCodeValid
()
{
return
socialType
==
null
||
StrUtil
.
isNotEmpty
(
socialCode
);
}
@AssertTrue
(
message
=
"授权 state 不能为空"
)
public
boolean
isSocialState
()
{
return
socialType
==
null
||
StrUtil
.
isNotEmpty
(
socialState
);
}
}
}
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocial
Quick
LoginReqVO.java
→
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/vo/AuthSocialLoginReqVO.java
浏览文件 @
b37e593a
package
cn
.
iocoder
.
yudao
.
module
.
system
.
controller
.
admin
.
auth
.
vo
;
package
cn
.
iocoder
.
yudao
.
module
.
system
.
controller
.
admin
.
auth
.
vo
;
import
cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum
;
import
cn.iocoder.yudao.framework.common.validation.InEnum
;
import
cn.iocoder.yudao.framework.common.validation.InEnum
;
import
cn.iocoder.yudao.module.system.enums.social.SocialTypeEnum
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.AllArgsConstructor
;
...
@@ -12,12 +12,12 @@ import lombok.NoArgsConstructor;
...
@@ -12,12 +12,12 @@ import lombok.NoArgsConstructor;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
import
javax.validation.constraints.NotNull
;
@ApiModel
(
"管理后台 - 社交
快捷登录 Request VO,使用 code 授权
码"
)
@ApiModel
(
"管理后台 - 社交
绑定登录 Request VO,使用 code 授权码 + 账号密
码"
)
@Data
@Data
@NoArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@AllArgsConstructor
@Builder
@Builder
public
class
AuthSocial
Quick
LoginReqVO
{
public
class
AuthSocialLoginReqVO
{
@ApiModelProperty
(
value
=
"社交平台的类型"
,
required
=
true
,
example
=
"10"
,
notes
=
"参见 UserSocialTypeEnum 枚举值"
)
@ApiModelProperty
(
value
=
"社交平台的类型"
,
required
=
true
,
example
=
"10"
,
notes
=
"参见 UserSocialTypeEnum 枚举值"
)
@InEnum
(
SocialTypeEnum
.
class
)
@InEnum
(
SocialTypeEnum
.
class
)
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenController.java
浏览文件 @
b37e593a
...
@@ -16,7 +16,7 @@ import cn.iocoder.yudao.module.system.convert.oauth2.OAuth2OpenConvert;
...
@@ -16,7 +16,7 @@ import cn.iocoder.yudao.module.system.convert.oauth2.OAuth2OpenConvert;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ApproveDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ApproveDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO
;
import
cn.iocoder.yudao.module.system.enums.
auth
.OAuth2GrantTypeEnum
;
import
cn.iocoder.yudao.module.system.enums.
oauth2
.OAuth2GrantTypeEnum
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ApproveService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ApproveService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ClientService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ClientService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2GrantService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2GrantService
;
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/auth/AuthConvert.java
浏览文件 @
b37e593a
...
@@ -66,7 +66,6 @@ public interface AuthConvert {
...
@@ -66,7 +66,6 @@ public interface AuthConvert {
}
}
SocialUserBindReqDTO
convert
(
Long
userId
,
Integer
userType
,
AuthSocialBindLoginReqVO
reqVO
);
SocialUserBindReqDTO
convert
(
Long
userId
,
Integer
userType
,
AuthSocialBindLoginReqVO
reqVO
);
SocialUserBindReqDTO
convert
(
Long
userId
,
Integer
userType
,
AuthSocialQuickLoginReqVO
reqVO
);
SmsCodeSendReqDTO
convert
(
AuthSmsSendReqVO
reqVO
);
SmsCodeSendReqDTO
convert
(
AuthSmsSendReqVO
reqVO
);
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/oauth2/OAuth2ClientDO.java
浏览文件 @
b37e593a
...
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.oauth2;
...
@@ -2,7 +2,7 @@ package cn.iocoder.yudao.module.system.dal.dataobject.oauth2;
import
cn.iocoder.yudao.framework.common.enums.CommonStatusEnum
;
import
cn.iocoder.yudao.framework.common.enums.CommonStatusEnum
;
import
cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO
;
import
cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO
;
import
cn.iocoder.yudao.module.system.enums.
auth
.OAuth2GrantTypeEnum
;
import
cn.iocoder.yudao.module.system.enums.
oauth2
.OAuth2GrantTypeEnum
;
import
com.baomidou.mybatisplus.annotation.KeySequence
;
import
com.baomidou.mybatisplus.annotation.KeySequence
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableId
;
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java
浏览文件 @
b37e593a
...
@@ -60,15 +60,7 @@ public interface AdminAuthService {
...
@@ -60,15 +60,7 @@ public interface AdminAuthService {
* @param reqVO 登录信息
* @param reqVO 登录信息
* @return 登录结果
* @return 登录结果
*/
*/
AuthLoginRespVO
socialQuickLogin
(
@Valid
AuthSocialQuickLoginReqVO
reqVO
);
AuthLoginRespVO
socialLogin
(
@Valid
AuthSocialLoginReqVO
reqVO
);
/**
* 社交绑定登录,使用 code 授权码 + 账号密码
*
* @param reqVO 登录信息
* @return 登录结果
*/
AuthLoginRespVO
socialBindLogin
(
@Valid
AuthSocialBindLoginReqVO
reqVO
);
/**
/**
* 刷新访问令牌
* 刷新访问令牌
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java
浏览文件 @
b37e593a
...
@@ -8,13 +8,14 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
...
@@ -8,13 +8,14 @@ import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
import
cn.iocoder.yudao.framework.common.util.validation.ValidationUtils
;
import
cn.iocoder.yudao.framework.common.util.validation.ValidationUtils
;
import
cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO
;
import
cn.iocoder.yudao.module.system.api.logger.dto.LoginLogCreateReqDTO
;
import
cn.iocoder.yudao.module.system.api.sms.SmsCodeApi
;
import
cn.iocoder.yudao.module.system.api.sms.SmsCodeApi
;
import
cn.iocoder.yudao.module.system.api.social.dto.SocialUserBindReqDTO
;
import
cn.iocoder.yudao.module.system.controller.admin.auth.vo.*
;
import
cn.iocoder.yudao.module.system.controller.admin.auth.vo.*
;
import
cn.iocoder.yudao.module.system.convert.auth.AuthConvert
;
import
cn.iocoder.yudao.module.system.convert.auth.AuthConvert
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO
;
import
cn.iocoder.yudao.module.system.enums.auth.OAuth2ClientConstants
;
import
cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum
;
import
cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum
;
import
cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum
;
import
cn.iocoder.yudao.module.system.enums.logger.LoginResultEnum
;
import
cn.iocoder.yudao.module.system.enums.oauth2.OAuth2ClientConstants
;
import
cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum
;
import
cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum
;
import
cn.iocoder.yudao.module.system.service.common.CaptchaService
;
import
cn.iocoder.yudao.module.system.service.common.CaptchaService
;
import
cn.iocoder.yudao.module.system.service.logger.LoginLogService
;
import
cn.iocoder.yudao.module.system.service.logger.LoginLogService
;
...
@@ -91,6 +92,12 @@ public class AdminAuthServiceImpl implements AdminAuthService {
...
@@ -91,6 +92,12 @@ public class AdminAuthServiceImpl implements AdminAuthService {
// 使用账号密码,进行登录
// 使用账号密码,进行登录
AdminUserDO
user
=
authenticate
(
reqVO
.
getUsername
(),
reqVO
.
getPassword
());
AdminUserDO
user
=
authenticate
(
reqVO
.
getUsername
(),
reqVO
.
getPassword
());
// 如果 socialType 非空,说明需要绑定社交用户
if
(
reqVO
.
getSocialType
()
!=
null
)
{
socialUserService
.
bindSocialUser
(
new
SocialUserBindReqDTO
(
user
.
getId
(),
getUserType
().
getValue
(),
reqVO
.
getSocialType
(),
reqVO
.
getSocialCode
(),
reqVO
.
getSocialState
()));
}
// 创建 Token 令牌,记录登录日志
// 创建 Token 令牌,记录登录日志
return
createTokenAfterLoginSuccess
(
user
.
getId
(),
reqVO
.
getUsername
(),
LoginLogTypeEnum
.
LOGIN_USERNAME
);
return
createTokenAfterLoginSuccess
(
user
.
getId
(),
reqVO
.
getUsername
(),
LoginLogTypeEnum
.
LOGIN_USERNAME
);
}
}
...
@@ -166,7 +173,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
...
@@ -166,7 +173,7 @@ public class AdminAuthServiceImpl implements AdminAuthService {
}
}
@Override
@Override
public
AuthLoginRespVO
social
QuickLogin
(
AuthSocialQuick
LoginReqVO
reqVO
)
{
public
AuthLoginRespVO
social
Login
(
AuthSocial
LoginReqVO
reqVO
)
{
// 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
// 使用 code 授权码,进行登录。然后,获得到绑定的用户编号
Long
userId
=
socialUserService
.
getBindUserId
(
UserTypeEnum
.
ADMIN
.
getValue
(),
reqVO
.
getType
(),
Long
userId
=
socialUserService
.
getBindUserId
(
UserTypeEnum
.
ADMIN
.
getValue
(),
reqVO
.
getType
(),
reqVO
.
getCode
(),
reqVO
.
getState
());
reqVO
.
getCode
(),
reqVO
.
getState
());
...
@@ -184,18 +191,6 @@ public class AdminAuthServiceImpl implements AdminAuthService {
...
@@ -184,18 +191,6 @@ public class AdminAuthServiceImpl implements AdminAuthService {
return
createTokenAfterLoginSuccess
(
user
.
getId
(),
user
.
getUsername
(),
LoginLogTypeEnum
.
LOGIN_SOCIAL
);
return
createTokenAfterLoginSuccess
(
user
.
getId
(),
user
.
getUsername
(),
LoginLogTypeEnum
.
LOGIN_SOCIAL
);
}
}
@Override
public
AuthLoginRespVO
socialBindLogin
(
AuthSocialBindLoginReqVO
reqVO
)
{
// 使用账号密码,进行登录。
AdminUserDO
user
=
authenticate
(
reqVO
.
getUsername
(),
reqVO
.
getPassword
());
// 绑定社交用户
socialUserService
.
bindSocialUser
(
AuthConvert
.
INSTANCE
.
convert
(
user
.
getId
(),
getUserType
().
getValue
(),
reqVO
));
// 创建 Token 令牌,记录登录日志
return
createTokenAfterLoginSuccess
(
user
.
getId
(),
reqVO
.
getUsername
(),
LoginLogTypeEnum
.
LOGIN_SOCIAL
);
}
@Override
@Override
public
AuthLoginRespVO
refreshToken
(
String
refreshToken
)
{
public
AuthLoginRespVO
refreshToken
(
String
refreshToken
)
{
OAuth2AccessTokenDO
accessTokenDO
=
oauth2TokenService
.
refreshAccessToken
(
refreshToken
,
OAuth2ClientConstants
.
CLIENT_ID_DEFAULT
);
OAuth2AccessTokenDO
accessTokenDO
=
oauth2TokenService
.
refreshAccessToken
(
refreshToken
,
OAuth2ClientConstants
.
CLIENT_ID_DEFAULT
);
...
...
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/sms/SmsSendServiceImpl.java
浏览文件 @
b37e593a
...
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
...
@@ -11,6 +11,7 @@ import cn.iocoder.yudao.framework.sms.core.client.SmsClientFactory;
import
cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult
;
import
cn.iocoder.yudao.framework.sms.core.client.SmsCommonResult
;
import
cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO
;
import
cn.iocoder.yudao.framework.sms.core.client.dto.SmsReceiveRespDTO
;
import
cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO
;
import
cn.iocoder.yudao.framework.sms.core.client.dto.SmsSendRespDTO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsChannelDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.sms.SmsTemplateDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO
;
import
cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage
;
import
cn.iocoder.yudao.module.system.mq.message.sms.SmsSendMessage
;
...
@@ -40,7 +41,8 @@ public class SmsSendServiceImpl implements SmsSendService {
...
@@ -40,7 +41,8 @@ public class SmsSendServiceImpl implements SmsSendService {
private
AdminUserService
adminUserService
;
private
AdminUserService
adminUserService
;
@Resource
@Resource
private
MemberService
memberService
;
private
MemberService
memberService
;
@Resource
private
SmsChannelService
smsChannelService
;
@Resource
@Resource
private
SmsTemplateService
smsTemplateService
;
private
SmsTemplateService
smsTemplateService
;
@Resource
@Resource
...
@@ -80,13 +82,18 @@ public class SmsSendServiceImpl implements SmsSendService {
...
@@ -80,13 +82,18 @@ public class SmsSendServiceImpl implements SmsSendService {
String
templateCode
,
Map
<
String
,
Object
>
templateParams
)
{
String
templateCode
,
Map
<
String
,
Object
>
templateParams
)
{
// 校验短信模板是否合法
// 校验短信模板是否合法
SmsTemplateDO
template
=
this
.
checkSmsTemplateValid
(
templateCode
);
SmsTemplateDO
template
=
this
.
checkSmsTemplateValid
(
templateCode
);
// 校验短信渠道是否合法
SmsChannelDO
smsChannel
=
this
.
checkSmsChannelValid
(
template
.
getChannelId
());
// 校验手机号码是否存在
// 校验手机号码是否存在
mobile
=
this
.
checkMobile
(
mobile
);
mobile
=
this
.
checkMobile
(
mobile
);
// 构建有序的模板参数。为什么放在这个位置,是提前保证模板参数的正确性,而不是到了插入发送日志
// 构建有序的模板参数。为什么放在这个位置,是提前保证模板参数的正确性,而不是到了插入发送日志
List
<
KeyValue
<
String
,
Object
>>
newTemplateParams
=
this
.
buildTemplateParams
(
template
,
templateParams
);
List
<
KeyValue
<
String
,
Object
>>
newTemplateParams
=
this
.
buildTemplateParams
(
template
,
templateParams
);
// 创建发送日志。如果模板被禁用,则不发送短信,只记录日志
// 创建发送日志。如果模板被禁用,则不发送短信,只记录日志
Boolean
isSend
=
CommonStatusEnum
.
ENABLE
.
getStatus
().
equals
(
template
.
getStatus
());
Boolean
isSend
=
CommonStatusEnum
.
ENABLE
.
getStatus
().
equals
(
template
.
getStatus
())
&&
CommonStatusEnum
.
ENABLE
.
getStatus
().
equals
(
smsChannel
.
getStatus
());
;
String
content
=
smsTemplateService
.
formatSmsTemplateContent
(
template
.
getContent
(),
templateParams
);
String
content
=
smsTemplateService
.
formatSmsTemplateContent
(
template
.
getContent
(),
templateParams
);
Long
sendLogId
=
smsLogService
.
createSmsLog
(
mobile
,
userId
,
userType
,
isSend
,
template
,
content
,
templateParams
);
Long
sendLogId
=
smsLogService
.
createSmsLog
(
mobile
,
userId
,
userType
,
isSend
,
template
,
content
,
templateParams
);
...
@@ -98,6 +105,16 @@ public class SmsSendServiceImpl implements SmsSendService {
...
@@ -98,6 +105,16 @@ public class SmsSendServiceImpl implements SmsSendService {
return
sendLogId
;
return
sendLogId
;
}
}
@VisibleForTesting
public
SmsChannelDO
checkSmsChannelValid
(
Long
channelId
)
{
// 获得短信模板。考虑到效率,从缓存中获取
SmsChannelDO
channelDO
=
smsChannelService
.
getSmsChannel
(
channelId
);
// 短信模板不存在
if
(
channelDO
==
null
)
{
throw
exception
(
SMS_SEND_TEMPLATE_NOT_EXISTS
);
}
return
channelDO
;
}
@VisibleForTesting
@VisibleForTesting
public
SmsTemplateDO
checkSmsTemplateValid
(
String
templateCode
)
{
public
SmsTemplateDO
checkSmsTemplateValid
(
String
templateCode
)
{
...
@@ -112,10 +129,10 @@ public class SmsSendServiceImpl implements SmsSendService {
...
@@ -112,10 +129,10 @@ public class SmsSendServiceImpl implements SmsSendService {
/**
/**
* 将参数模板,处理成有序的 KeyValue 数组
* 将参数模板,处理成有序的 KeyValue 数组
*
*
<p>
* 原因是,部分短信平台并不是使用 key 作为参数,而是数组下标,例如说腾讯云 https://cloud.tencent.com/document/product/382/39023
* 原因是,部分短信平台并不是使用 key 作为参数,而是数组下标,例如说腾讯云 https://cloud.tencent.com/document/product/382/39023
*
*
* @param template 短信模板
* @param template
短信模板
* @param templateParams 原始参数
* @param templateParams 原始参数
* @return 处理后的参数
* @return 处理后的参数
*/
*/
...
...
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/controller/admin/oauth2/OAuth2OpenControllerTest.java
浏览文件 @
b37e593a
...
@@ -14,7 +14,7 @@ import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.open.OAuth2Open
...
@@ -14,7 +14,7 @@ import cn.iocoder.yudao.module.system.controller.admin.oauth2.vo.open.OAuth2Open
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2AccessTokenDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ApproveDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ApproveDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO
;
import
cn.iocoder.yudao.module.system.dal.dataobject.oauth2.OAuth2ClientDO
;
import
cn.iocoder.yudao.module.system.enums.
auth
.OAuth2GrantTypeEnum
;
import
cn.iocoder.yudao.module.system.enums.
oauth2
.OAuth2GrantTypeEnum
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ApproveService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ApproveService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ClientService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2ClientService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2GrantService
;
import
cn.iocoder.yudao.module.system.service.oauth2.OAuth2GrantService
;
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论