From 8dcc5bdf8a17adc160ce2f9685c83b40c8da345d Mon Sep 17 00:00:00 2001 From: kezhijie Date: Thu, 23 Nov 2023 13:50:07 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#5556?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/controller/JeecgController.java | 45 ++++++++++--------- .../dashboard/JeecgSentinelApplication.java | 3 ++ .../src/main/resources/application.yml | 7 +-- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java index f3ff51ed..b2a58446 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java @@ -37,12 +37,14 @@ import java.util.*; */ @Slf4j public class JeecgController> { - /**issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service*/ + /** + * issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service + */ @Autowired protected S service; @Resource private JeecgBaseConfig jeecgBaseConfig; - + /** * 导出excel * @@ -57,7 +59,7 @@ public class JeecgController> { String selections = request.getParameter("selections"); if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); - queryWrapper.in("id",selectionList); + queryWrapper.in("id", selectionList); } // Step.2 获取导出数据 List exportList = service.list(queryWrapper); @@ -68,53 +70,54 @@ public class JeecgController> { mv.addObject(NormalExcelConstants.FILE_NAME, title); mv.addObject(NormalExcelConstants.CLASS, clazz); //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置-------------------- - ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); + ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload()); //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置---------------------- - mv.addObject(NormalExcelConstants.PARAMS,exportParams); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, exportList); return mv; } + /** * 根据每页sheet数量导出多sheet * * @param request - * @param object 实体类 - * @param clazz 实体类class - * @param title 标题 + * @param object 实体类 + * @param clazz 实体类class + * @param title 标题 * @param exportFields 导出字段自定义 - * @param pageNum 每个sheet的数据条数 + * @param pageNum 每个sheet的数据条数 * @param request */ - protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title,String exportFields,Integer pageNum) { + protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title, String exportFields, Integer pageNum) { // Step.1 组装查询条件 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 计算分页sheet数据 double total = service.count(); - int count = (int)Math.ceil(total/pageNum); + int count = (int) Math.ceil(total / pageNum); //update-begin-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 --- // Step.3 过滤选中数据 String selections = request.getParameter("selections"); if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); - queryWrapper.in("id",selectionList); + queryWrapper.in("id", selectionList); } //update-end-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 --- // Step.4 多sheet处理 List> listMap = new ArrayList>(); - for (int i = 1; i <=count ; i++) { + for (int i = 1; i <= count; i++) { Page page = new Page(i, pageNum); IPage pageList = service.page(page, queryWrapper); List exportList = pageList.getRecords(); Map map = new HashMap<>(5); - ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title+i,jeecgBaseConfig.getPath().getUpload()); + ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title + i, jeecgBaseConfig.getPath().getUpload()); exportParams.setType(ExcelType.XSSF); //map.put("title",exportParams); //表格Title - map.put(NormalExcelConstants.PARAMS,exportParams); + map.put(NormalExcelConstants.PARAMS, exportParams); //表格对应实体 - map.put(NormalExcelConstants.CLASS,clazz); + map.put(NormalExcelConstants.CLASS, clazz); //数据集合 map.put(NormalExcelConstants.DATA_LIST, exportList); listMap.add(map); @@ -133,9 +136,9 @@ public class JeecgController> { * * @param request */ - protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title,String exportFields) { - ModelAndView mv = this.exportXls(request,object,clazz,title); - mv.addObject(NormalExcelConstants.EXPORT_FIELDS,exportFields); + protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title, String exportFields) { + ModelAndView mv = this.exportXls(request, object, clazz, title); + mv.addObject(NormalExcelConstants.EXPORT_FIELDS, exportFields); return mv; } @@ -184,9 +187,9 @@ public class JeecgController> { //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示 String msg = e.getMessage(); log.error(msg, e); - if(msg!=null && msg.indexOf("Duplicate entry")>=0){ + if (msg != null && msg.indexOf("Duplicate entry") >= 0) { return Result.error("文件导入失败:有重复数据!"); - }else{ + } else { return Result.error("文件导入失败:" + e.getMessage()); } //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示 diff --git a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/JeecgSentinelApplication.java b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/JeecgSentinelApplication.java index 64d78814..a64b50a4 100644 --- a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/JeecgSentinelApplication.java +++ b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/java/com/alibaba/csp/sentinel/dashboard/JeecgSentinelApplication.java @@ -36,6 +36,9 @@ public class JeecgSentinelApplication { triggerSentinelInit(); ConfigurableApplicationContext application = SpringApplication.run(JeecgSentinelApplication.class, args); Environment env = application.getEnvironment(); + // 目前jeecg-sentinel 1.8.3 版本存在alibaba-sentinel 1.8.3版本 启动nacos数据源导致配置不生效的问题,以下为临时处理办法 + System.getProperties().setProperty("sentinel.dashboard.auth.username", env.getProperty("sentinel.dashboard.auth.username")); + System.getProperties().setProperty("sentinel.dashboard.auth.password", env.getProperty("sentinel.dashboard.auth.password")); String port = env.getProperty("server.port"); log.info("\n----------------------------------------------------------\n\t" + "Application SentinelDashboard is running! Access URLs:\n\t" + diff --git a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/resources/application.yml b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/resources/application.yml index 551dd725..017cd904 100644 --- a/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/resources/application.yml +++ b/jeecg-server-cloud/jeecg-visual/jeecg-cloud-sentinel/src/main/resources/application.yml @@ -18,8 +18,6 @@ auth: filter: exclude-url-suffixes: htm,html,js,css,map,ico,ttf,woff,png exclude-urls: /,/auth/login,/auth/logout,/registry/machine,/version - password: sentinel - username: sentinel logging: level: org: @@ -34,4 +32,7 @@ nacos: ip: @config.server-addr@ sentinel: dashboard: - version: 1.8.2 \ No newline at end of file + version: 1.8.2 + auth: + username: sentinel + password: sentinel \ No newline at end of file From 1d4098ae14c527e0f5c03fe8931d894af5d5f713 Mon Sep 17 00:00:00 2001 From: kezhijie Date: Mon, 4 Dec 2023 20:02:30 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20#5569?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/jeecg/config/shiro/ShiroConfig.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 597f2650..2c6357fb 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -9,10 +9,7 @@ import org.apache.shiro.spring.LifecycleBeanPostProcessor; import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; -import org.crazycake.shiro.IRedisManager; -import org.crazycake.shiro.RedisCacheManager; -import org.crazycake.shiro.RedisClusterManager; -import org.crazycake.shiro.RedisManager; +import org.crazycake.shiro.*; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.util.oConvertUtils; import org.jeecg.config.JeecgBaseConfig; @@ -20,11 +17,13 @@ import org.jeecg.config.shiro.filters.CustomShiroFilterFactoryBean; import org.jeecg.config.shiro.filters.JwtFilter; import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.data.redis.RedisProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DependsOn; import org.springframework.core.env.Environment; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import redis.clients.jedis.HostAndPort; import redis.clients.jedis.JedisCluster; @@ -32,6 +31,7 @@ import redis.clients.jedis.JedisCluster; import javax.annotation.Resource; import javax.servlet.Filter; import java.util.*; +import java.util.stream.Collectors; /** * @author: Scott @@ -49,6 +49,8 @@ public class ShiroConfig { private Environment env; @Resource private JeecgBaseConfig jeecgBaseConfig; + @Autowired(required = false) + private RedisProperties redisProperties; /** * Filter Chain定义说明 @@ -249,6 +251,19 @@ public class ShiroConfig { public IRedisManager redisManager() { log.info("===============(2)创建RedisManager,连接Redis.."); IRedisManager manager; + + // sentinel cluster redis + if (Objects.nonNull(redisProperties) + && Objects.nonNull(redisProperties.getSentinel()) + && !CollectionUtils.isEmpty(redisProperties.getSentinel().getNodes())) { + RedisSentinelManager sentinelManager = new RedisSentinelManager(); + sentinelManager.setMasterName(redisProperties.getSentinel().getMaster()); + sentinelManager.setHost(String.join(",", redisProperties.getSentinel().getNodes())); + sentinelManager.setPassword(redisProperties.getSentinel().getPassword()); + sentinelManager.setDatabase(redisProperties.getDatabase()); + + return sentinelManager; + } // redis 单机支持,在集群为空,或者集群无机器时候使用 add by jzyadmin@163.com if (lettuceConnectionFactory.getClusterConfiguration() == null || lettuceConnectionFactory.getClusterConfiguration().getClusterNodes().isEmpty()) { RedisManager redisManager = new RedisManager(); From 65b0fab80d5575012ff8d5c4a5584d57da28d572 Mon Sep 17 00:00:00 2001 From: kezhijie Date: Tue, 5 Dec 2023 10:09:14 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/controller/JeecgController.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java index b2a58446..5a07bde2 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java @@ -37,9 +37,7 @@ import java.util.*; */ @Slf4j public class JeecgController> { - /** - * issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service - */ + /**issues/2933 JeecgController注入service时改用protected修饰,能避免重复引用service*/ @Autowired protected S service; @Resource @@ -59,7 +57,7 @@ public class JeecgController> { String selections = request.getParameter("selections"); if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); - queryWrapper.in("id", selectionList); + queryWrapper.in("id",selectionList); } // Step.2 获取导出数据 List exportList = service.list(queryWrapper); @@ -70,54 +68,53 @@ public class JeecgController> { mv.addObject(NormalExcelConstants.FILE_NAME, title); mv.addObject(NormalExcelConstants.CLASS, clazz); //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置-------------------- - ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); + ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); exportParams.setImageBasePath(jeecgBaseConfig.getPath().getUpload()); //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置---------------------- - mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.PARAMS,exportParams); mv.addObject(NormalExcelConstants.DATA_LIST, exportList); return mv; } - /** * 根据每页sheet数量导出多sheet * * @param request - * @param object 实体类 - * @param clazz 实体类class - * @param title 标题 + * @param object 实体类 + * @param clazz 实体类class + * @param title 标题 * @param exportFields 导出字段自定义 - * @param pageNum 每个sheet的数据条数 + * @param pageNum 每个sheet的数据条数 * @param request */ - protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title, String exportFields, Integer pageNum) { + protected ModelAndView exportXlsSheet(HttpServletRequest request, T object, Class clazz, String title,String exportFields,Integer pageNum) { // Step.1 组装查询条件 QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); // Step.2 计算分页sheet数据 double total = service.count(); - int count = (int) Math.ceil(total / pageNum); + int count = (int)Math.ceil(total/pageNum); //update-begin-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 --- // Step.3 过滤选中数据 String selections = request.getParameter("selections"); if (oConvertUtils.isNotEmpty(selections)) { List selectionList = Arrays.asList(selections.split(",")); - queryWrapper.in("id", selectionList); + queryWrapper.in("id",selectionList); } //update-end-author:liusq---date:20220629--for: 多sheet导出根据选择导出写法调整 --- // Step.4 多sheet处理 List> listMap = new ArrayList>(); - for (int i = 1; i <= count; i++) { + for (int i = 1; i <=count ; i++) { Page page = new Page(i, pageNum); IPage pageList = service.page(page, queryWrapper); List exportList = pageList.getRecords(); Map map = new HashMap<>(5); - ExportParams exportParams = new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title + i, jeecgBaseConfig.getPath().getUpload()); + ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title+i,jeecgBaseConfig.getPath().getUpload()); exportParams.setType(ExcelType.XSSF); //map.put("title",exportParams); //表格Title - map.put(NormalExcelConstants.PARAMS, exportParams); + map.put(NormalExcelConstants.PARAMS,exportParams); //表格对应实体 - map.put(NormalExcelConstants.CLASS, clazz); + map.put(NormalExcelConstants.CLASS,clazz); //数据集合 map.put(NormalExcelConstants.DATA_LIST, exportList); listMap.add(map); @@ -136,9 +133,9 @@ public class JeecgController> { * * @param request */ - protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title, String exportFields) { - ModelAndView mv = this.exportXls(request, object, clazz, title); - mv.addObject(NormalExcelConstants.EXPORT_FIELDS, exportFields); + protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title,String exportFields) { + ModelAndView mv = this.exportXls(request,object,clazz,title); + mv.addObject(NormalExcelConstants.EXPORT_FIELDS,exportFields); return mv; } @@ -187,9 +184,9 @@ public class JeecgController> { //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示 String msg = e.getMessage(); log.error(msg, e); - if (msg != null && msg.indexOf("Duplicate entry") >= 0) { + if(msg!=null && msg.indexOf("Duplicate entry")>=0){ return Result.error("文件导入失败:有重复数据!"); - } else { + }else{ return Result.error("文件导入失败:" + e.getMessage()); } //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示 From decea393a540781f31b31d6029fcbb9f06b1baf5 Mon Sep 17 00:00:00 2001 From: kezhijie Date: Tue, 5 Dec 2023 10:13:29 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jeecg/common/system/base/controller/JeecgController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java index 5a07bde2..f3ff51ed 100644 --- a/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java +++ b/jeecg-boot-base-core/src/main/java/org/jeecg/common/system/base/controller/JeecgController.java @@ -42,7 +42,7 @@ public class JeecgController> { protected S service; @Resource private JeecgBaseConfig jeecgBaseConfig; - + /** * 导出excel * From 06cc4ec0fe7787f3bb060943f478ac7834eeda50 Mon Sep 17 00:00:00 2001 From: kezhijie Date: Tue, 5 Dec 2023 18:24:09 +0800 Subject: [PATCH 5/5] Update docker-compose.yml --- docker-compose.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9820531c..d65aa759 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,6 +19,8 @@ services: --default-authentication-plugin=caching_sha2_password ports: - 3306:3306 + networks: + - jeecg-boot jeecg-boot-redis: image: redis:5.0 @@ -27,6 +29,8 @@ services: restart: always hostname: jeecg-boot-redis container_name: jeecg-boot-redis + networks: + - jeecg-boot jeecg-boot-system: build: @@ -39,4 +43,10 @@ services: image: jeecg-boot-system hostname: jeecg-boot-system ports: - - 8080:8080 \ No newline at end of file + - 8080:8080 + networks: + - jeecg-boot + +networks: + jeecg-boot: + name: jeecg_boot