Skip to content

Commit 7255d25

Browse files
committed
Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/yudao-cloud
# Conflicts: # yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java
2 parents c5909e4 + 047252d commit 7255d25

File tree

11 files changed

+50
-34
lines changed

11 files changed

+50
-34
lines changed

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/config/YudaoMybatisAutoConfiguration.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
88
import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
99
import com.baomidou.mybatisplus.extension.incrementer.*;
10+
import com.baomidou.mybatisplus.extension.parser.JsqlParserGlobal;
11+
import com.baomidou.mybatisplus.extension.parser.cache.JdkSerialCaffeineJsqlParseCache;
1012
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
1113
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
1214
import org.apache.ibatis.annotations.Mapper;
@@ -16,6 +18,8 @@
1618
import org.springframework.context.annotation.Bean;
1719
import org.springframework.core.env.ConfigurableEnvironment;
1820

21+
import java.util.concurrent.TimeUnit;
22+
1923
/**
2024
* MyBaits 配置类
2125
*
@@ -26,6 +30,14 @@
2630
lazyInitialization = "${mybatis.lazy-initialization:false}") // Mapper 懒加载,目前仅用于单元测试
2731
public class YudaoMybatisAutoConfiguration {
2832

33+
static {
34+
// 动态 SQL 智能优化支持本地缓存加速解析,更完善的租户复杂 XML 动态 SQL 支持,静态注入缓存
35+
JsqlParserGlobal.setJsqlParseCache(new JdkSerialCaffeineJsqlParseCache(
36+
(cache) -> cache.maximumSize(1024)
37+
.expireAfterWrite(5, TimeUnit.SECONDS))
38+
);
39+
}
40+
2941
@Bean
3042
public MybatisPlusInterceptor mybatisPlusInterceptor() {
3143
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
@@ -34,7 +46,7 @@ public MybatisPlusInterceptor mybatisPlusInterceptor() {
3446
}
3547

3648
@Bean
37-
public MetaObjectHandler defaultMetaObjectHandler(){
49+
public MetaObjectHandler defaultMetaObjectHandler() {
3850
return new DefaultDBFieldHandler(); // 自动填充参数类
3951
}
4052

yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/signature/core/aop/ApiSignatureAspect.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public boolean verifySignature(ApiSignature signature, HttpServletRequest reques
6969

7070
// 3. 将 nonce 记入缓存,防止重复使用(重点二:此处需要将 ttl 设定为允许 timestamp 时间差的值 x 2 )
7171
String nonce = request.getHeader(signature.nonce());
72-
signatureRedisDAO.setNonce(nonce, signature.timeout() * 2, signature.timeUnit());
72+
signatureRedisDAO.setNonce(appId, nonce, signature.timeout() * 2, signature.timeUnit());
7373
return true;
7474
}
7575

@@ -113,7 +113,7 @@ private boolean verifyHeaders(ApiSignature signature, HttpServletRequest request
113113
}
114114

115115
// 3. 检查 nonce 是否存在,有且仅能使用一次
116-
return signatureRedisDAO.getNonce(nonce) == null;
116+
return signatureRedisDAO.getNonce(appId, nonce) == null;
117117
}
118118

119119
/**
@@ -165,5 +165,4 @@ private static SortedMap<String, String> getRequestParameterMap(HttpServletReque
165165
return sortedMap;
166166
}
167167

168-
}
169-
168+
}

yudao-framework/yudao-spring-boot-starter-protection/src/main/java/cn/iocoder/yudao/framework/signature/core/redis/ApiSignatureRedisDAO.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class ApiSignatureRedisDAO {
2222
* VALUE 格式:String
2323
* 过期时间:不固定
2424
*/
25-
private static final String SIGNATURE_NONCE = "api_signature_nonce:%s";
25+
private static final String SIGNATURE_NONCE = "api_signature_nonce:%s:%s";
2626

2727
/**
2828
* 签名密钥
@@ -36,16 +36,16 @@ public class ApiSignatureRedisDAO {
3636

3737
// ========== 验签随机数 ==========
3838

39-
public String getNonce(String nonce) {
40-
return stringRedisTemplate.opsForValue().get(formatNonceKey(nonce));
39+
public String getNonce(String appId, String nonce) {
40+
return stringRedisTemplate.opsForValue().get(formatNonceKey(appId, nonce));
4141
}
4242

43-
public void setNonce(String nonce, int time, TimeUnit timeUnit) {
44-
stringRedisTemplate.opsForValue().set(formatNonceKey(nonce), "", time, timeUnit);
43+
public void setNonce(String appId, String nonce, int time, TimeUnit timeUnit) {
44+
stringRedisTemplate.opsForValue().set(formatNonceKey(appId, nonce), "", time, timeUnit);
4545
}
4646

47-
private static String formatNonceKey(String key) {
48-
return String.format(SIGNATURE_NONCE, key);
47+
private static String formatNonceKey(String appId, String nonce) {
48+
return String.format(SIGNATURE_NONCE, appId, nonce);
4949
}
5050

5151
// ========== 签名密钥 ==========

yudao-framework/yudao-spring-boot-starter-protection/src/test/java/cn/iocoder/yudao/framework/signature/core/ApiSignatureTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public void testSignatureGet() throws IOException {
6969
// 断言结果
7070
assertTrue(result);
7171
// 断言调用
72-
verify(signatureRedisDAO).setNonce(eq(nonce), eq(120), eq(TimeUnit.SECONDS));
72+
verify(signatureRedisDAO).setNonce(eq(appId), eq(nonce), eq(120), eq(TimeUnit.SECONDS));
7373
}
7474

7575
}

yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/operatelog/core/service/LogRecordServiceImpl.java

+16-10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.mzt.logapi.beans.LogRecord;
1010
import com.mzt.logapi.service.ILogRecordService;
1111
import lombok.extern.slf4j.Slf4j;
12+
import org.springframework.scheduling.annotation.Async;
1213

1314
import javax.annotation.Resource;
1415
import javax.servlet.http.HttpServletRequest;
@@ -28,19 +29,24 @@ public class LogRecordServiceImpl implements ILogRecordService {
2829
private OperateLogApi operateLogApi;
2930

3031
@Override
32+
@Async
3133
public void record(LogRecord logRecord) {
32-
// 1. 补全通用字段
3334
OperateLogCreateReqDTO reqDTO = new OperateLogCreateReqDTO();
34-
reqDTO.setTraceId(TracerUtils.getTraceId());
35-
// 补充用户信息
36-
fillUserFields(reqDTO);
37-
// 补全模块信息
38-
fillModuleFields(reqDTO, logRecord);
39-
// 补全请求信息
40-
fillRequestFields(reqDTO);
35+
try {
36+
reqDTO.setTraceId(TracerUtils.getTraceId());
37+
// 补充用户信息
38+
fillUserFields(reqDTO);
39+
// 补全模块信息
40+
fillModuleFields(reqDTO, logRecord);
41+
// 补全请求信息
42+
fillRequestFields(reqDTO);
4143

42-
// 2. 异步记录日志
43-
operateLogApi.createOperateLog(reqDTO);
44+
// 2. 异步记录日志
45+
operateLogApi.createOperateLog(reqDTO).getCheckedData();
46+
} catch (Throwable ex) {
47+
// 由于 @Async 异步调用,这里打印下日志,更容易跟进
48+
log.error("[record][url({}) log({}) 发生异常]", reqDTO.getRequestUrl(), reqDTO, ex);
49+
}
4450
}
4551

4652
private static void fillUserFields(OperateLogCreateReqDTO reqDTO) {

yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoSecurityAutoConfiguration.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import cn.iocoder.yudao.framework.web.core.handler.GlobalExceptionHandler;
1111
import cn.iocoder.yudao.module.system.api.oauth2.OAuth2TokenApi;
1212
import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
13+
import jakarta.annotation.Resource;
1314
import org.springframework.beans.factory.config.MethodInvokingFactoryBean;
1415
import org.springframework.boot.autoconfigure.AutoConfiguration;
1516
import org.springframework.boot.autoconfigure.AutoConfigureOrder;
@@ -21,8 +22,6 @@
2122
import org.springframework.security.web.AuthenticationEntryPoint;
2223
import org.springframework.security.web.access.AccessDeniedHandler;
2324

24-
import javax.annotation.Resource;
25-
2625
/**
2726
* Spring Security 自动配置类,主要用于相关组件的配置
2827
*

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/definition/BpmModelServiceImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public class BpmModelServiceImpl implements BpmModelService {
6363
@Override
6464
public PageResult<Model> getModelPage(BpmModelPageReqVO pageVO) {
6565
ModelQuery modelQuery = repositoryService.createModelQuery();
66+
modelQuery.modelTenantId(FlowableUtils.getTenantId());
6667
if (StrUtil.isNotBlank(pageVO.getKey())) {
6768
modelQuery.modelKey(pageVO.getKey());
6869
}
@@ -78,7 +79,6 @@ public PageResult<Model> getModelPage(BpmModelPageReqVO pageVO) {
7879
return PageResult.empty(count);
7980
}
8081
List<Model> models = modelQuery
81-
.modelTenantId(FlowableUtils.getTenantId())
8282
.orderByCreateTime().desc()
8383
.listPage(PageUtils.getStart(pageVO), pageVO.getPageSize());
8484
return new PageResult<>(models, count);

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public PageResult<HistoricTaskInstance> getTaskDonePage(Long userId, BpmTaskPage
119119
}
120120
if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) {
121121
taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0]));
122-
taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[1]));
122+
taskQuery.taskCreatedBefore(DateUtils.of(pageVO.getCreateTime()[1]));
123123
}
124124
// 执行查询
125125
long count = taskQuery.count();
@@ -141,7 +141,7 @@ public PageResult<HistoricTaskInstance> getTaskPage(Long userId, BpmTaskPageReqV
141141
}
142142
if (ArrayUtil.isNotEmpty(pageVO.getCreateTime())) {
143143
taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[0]));
144-
taskQuery.taskCreatedAfter(DateUtils.of(pageVO.getCreateTime()[1]));
144+
taskQuery.taskCreatedBefore(DateUtils.of(pageVO.getCreateTime()[1]));
145145
}
146146
// 执行查询
147147
long count = taskQuery.count();

yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/DictTypeConstants.java

-2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ public interface DictTypeConstants {
1818
String LOGIN_TYPE = "system_login_type"; // 登录日志的类型
1919
String LOGIN_RESULT = "system_login_result"; // 登录结果
2020

21-
String ERROR_CODE_TYPE = "system_error_code_type"; // 错误码的类型枚举
22-
2321
String SMS_CHANNEL_CODE = "system_sms_channel_code"; // 短信渠道编码
2422
String SMS_TEMPLATE_TYPE = "system_sms_template_type"; // 短信模板类型
2523
String SMS_SEND_STATUS = "system_sms_send_status"; // 短信发送状态

yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImpl.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cn.hutool.core.collection.CollUtil;
44
import cn.hutool.core.collection.CollectionUtil;
5+
import cn.hutool.core.util.ObjUtil;
56
import cn.hutool.core.util.ObjectUtil;
67
import cn.hutool.extra.spring.SpringUtil;
78
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
@@ -61,7 +62,7 @@ public Long createRole(RoleSaveReqVO createReqVO, Integer type) {
6162
// 2. 插入到数据库
6263
RoleDO role = BeanUtils.toBean(createReqVO, RoleDO.class)
6364
.setType(ObjectUtil.defaultIfNull(type, RoleTypeEnum.CUSTOM.getType()))
64-
.setStatus(CommonStatusEnum.ENABLE.getStatus())
65+
.setStatus(ObjUtil.defaultIfNull(createReqVO.getStatus(), CommonStatusEnum.ENABLE.getStatus()))
6566
.setDataScope(DataScopeEnum.ALL.getScope()); // 默认可查看所有数据。原因是,可能一些项目不需要项目权限
6667
roleMapper.insert(role);
6768

yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/permission/RoleServiceImplTest.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ public class RoleServiceImplTest extends BaseDbUnitTest {
5151
public void testCreateRole() {
5252
// 准备参数
5353
RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class)
54-
.setId(null); // 防止 id 被赋值
54+
.setId(null) // 防止 id 被赋值
55+
.setStatus(randomCommonStatus());
5556

5657
// 调用
5758
Long roleId = roleService.createRole(reqVO, null);
5859
// 断言
5960
RoleDO roleDO = roleMapper.selectById(roleId);
6061
assertPojoEquals(reqVO, roleDO, "id");
6162
assertEquals(RoleTypeEnum.CUSTOM.getType(), roleDO.getType());
62-
assertEquals(CommonStatusEnum.ENABLE.getStatus(), roleDO.getStatus());
6363
assertEquals(DataScopeEnum.ALL.getScope(), roleDO.getDataScope());
6464
}
6565

@@ -70,7 +70,8 @@ public void testUpdateRole() {
7070
roleMapper.insert(roleDO);
7171
// 准备参数
7272
Long id = roleDO.getId();
73-
RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class, o -> o.setId(id));
73+
RoleSaveReqVO reqVO = randomPojo(RoleSaveReqVO.class, o -> o.setId(id)
74+
.setStatus(randomCommonStatus()));
7475

7576
// 调用
7677
roleService.updateRole(reqVO);

0 commit comments

Comments
 (0)