
RuoYi-Vue-Plus 5.3.0 New Spring Edition Released - Powerful Integration with warm-flow
1/25/25About 11 min

Changelog
Major Updates
- Refactored data permission implementation logic to support annotation on any mapper method, eliminating the need to find the real mapper for annotation.
- Rewrote the workflow module, integrating warm-flow workflow and removing flowable workflow (too complex, many people find it difficult to understand).
Dependency Upgrades
- update springboot 3.2.11 => 3.4.1
- update springboot-admin 3.2.3 => 3.4.1
- update mybatis-plus 3.5.8 => 3.5.9
- update snailjob 1.1.2 => 1.3.0 (Thanks dhb52)
- update springdoc 2.6.0 => 2.8.3
- update redisson 3.37.0 => 3.43.0
- update justauth 1.16.6 => 1.16.7 Supports multiple login methods, not limited to third-party logins.
- update mybatis-plus 3.5.9 => 3.5.10
- update hutool 5.8.31 => 5.8.35
- update mapstruct-plus 1.4.5 => 1.4.6
- update lombok 1.18.34 => 1.18.36
- update anyline 20241022 => 20250101
Feature Updates
- update Optimized the OSS image URL query interface to use the 'query' identifier.
- update Optimized third-party binding and unbinding to verify token existence.
- update Optimized the method for obtaining temporary URLs for OSS private buckets (Thanks 秋辞未寒).
- update Optimized the ws module to close session connections when replacing sessions.
- update Optimized data permissions; skips if the current annotation does not meet the template.
- update Optimized the use of request storage for dynamic tenants to avoid multiple Redis queries per request.
- update Optimized department information modification by adding transactions (Thanks AprilWind).
- update Optimized by adding menu selection extension parameters (Thanks 玲娜贝er).
- update Optimized the scheduled task pool when virtual threads are enabled in a JDK21 environment (Thanks 秋辞未寒).
- update Optimized SSE; if the obtained token list is empty, delete the storage corresponding to the userid.
- update Optimized the data permission handler by adding default value handling for cases where expression variables do not correspond to annotations or are null.
- update Optimized errors when using tools after closing SSE.
- update Optimized by adding one-click enable/disable for mybatis-plus logical deletion.
- update Optimized log time display color (Thanks 疯狂的牛子Li).
- update Adapted TOPIAM 2.0 single sign-on (SSO) (Thanks 马铃薯头).
- update Optimized and improved the WeChat Mini Program login interface logic.
- update Optimized and refactored the DateUtils tool class for greater practicality.
- update Optimized by adding common query methods for departments, roles, positions, and users.
- update Optimized by adding position data to the logged-in user.
- update Optimized by removing department query status validation, shifting filtering to the frontend for easier viewing of data under disabled departments.
- update Optimized the department tree by adding a disabled flag.
- update Optimized the workflow module by adding interface document generation functionality.
- update Optimized code generation by adding a default sorting rule for buildQueryWrapper.
- update Optimized code generation to fix the issue of creation/update time being overwritten.
- update Optimized code generation sorting (Thanks AprilWind).
- update Optimized online user queries to prioritize data under the tenant, reducing data volume.
- update Optimized tenant domain name matching to be case-insensitive.
- update Optimized the code generator to convert database field names to lowercase by default, avoiding issues with some databases using uppercase.
- update Optimized by reducing SSE authentication failure logs to debug level due to the retry mechanism causing excessive output.
- update Optimized the destruction method for bounded queues; a special destruction method should be used.
- update Optimized Redis serialization to support the faster Apache binary cross-language serialization scheme.
- update Optimized the tenant log module name.
- update Optimized by adding a default data permission option: "Department and below or own data permission".
- update Optimized the code generator for precise primary key retrieval in PostgreSQL databases.
- update Optimized code generator type retrieval.
- update Optimized the personal center force logout device interface path.
- update Optimized Dockerfile to eliminate warn warnings.
- update Optimized by adding comments to client tool classes (Thanks AprilWind).
- update Optimized by adding comments to Undertow custom configuration information (Thanks AprilWind).
- update Optimized by intercepting crawler tracking and other junk requests.
- update Optimized by changing the Log exception record length to 5000.
- update Optimized by expanding the Log parameter record length to 5000 to better suit actual needs.
- update Optimized XSS wrapper Parameter handling to be compatible with containers that do not allow parameter changes.
- update Optimized to support passing multiple roles and permission identifiers for desensitization.
- update Optimized role deletion to clear cache.
- update Optimized code encapsulation using new methods in ObjectUtils.
- update Optimized data permission queries by adding caching.
- update Optimized code generator numeric type judgment.
- update Optimized the logical deletion status to 1 to avoid misunderstandings.
- update Refactored by changing UserConstants to SystemConstants for unified constant usage, reducing difficulty and misunderstandings.
- update Optimized by encapsulating department query methods based on parent ID.
- update Optimized to skip data permission checks if no user ID is passed.
- update Optimized the display of multiple base points in the department tree, supporting nodes with the same name to be displayed side by side.
- update Optimized by removing OSS bucket detection; errors will naturally occur if the bucket doesn't exist, making extra detection unnecessary.
- update Optimized the rate limiting annotation by adding a fixed cleanup time.
- update Optimized the sys_social table by adding a default value for tenant ID.
- update Optimized deprecated Jackson methods.
- update Optimized the multi-tenant plugin initialization process.
- update Optimized by removing the GenUtils setCreateBy logic, unifying it through automatic injection settings.
- update Optimized by replacing deprecated methods getKeysStreamByPattern and trySetRate in RedisUtils (Thanks Lucien_Lu).
- update Optimized by removing the automatic bucket creation code logic (cloud vendors restrict bucket operations).
- update Optimized the code logic for clearing online users by role.
New Features
- add Added export template required field and remark annotation implementation (Thanks liyang).
- add Added a Redisson-based ID generator tool (Thanks 秋辞未寒).
- add Added validation support for enum checks (Thanks 秋辞未寒).
- add Added validation support for enum checks (Thanks 秋辞未寒) - (Note: Appears twice in original).
- add Added object utility class (Thanks 秋辞未寒).
- add Added demo for email with multiple attachments.
Bug Fixes
- fix Fixed file download issue where setting content-length was ineffective.
- fix Fixed Satoken DAO layer getting timeout in seconds, causing loss of millisecond precision (temporary fix, waiting for official Satoken solution).
- fix Fixed PostgreSQL table metadata lacking creation time (very peculiar), used new Date() as a substitute.
- fix Fixed incorrect logic for multi-role, multi-annotation containing ignore permission identifiers in data permissions.
- fix Fixed bean not found error when SSE is not enabled.
- fix Fixed errors in the personal center's avatar modification and password change interfaces caused by data permissions (Thanks QianRj).
- fix Fixed department data permission caching errors (Thanks QianRj).
- fix Fixed missing parameter issues in third-party authorization tools for some websites.
- fix Fixed code generation issue where special characters in the middle of table names were filtered; changed to filter only at the beginning.
- fix Fixed field length exceeding database limit issue.
- fix Fixed regular expression error in filters.
- fix Fixed monitor context-path causing 404 error upon logout and re-login.
- fix Fixed issues caused by multi-role and permission identifier共用 in data permissions: https://gitee.com/dromara/RuoYi-Vue-Plus/issues/IB4CS4.
- fix Fixed by excluding Tomcat dependencies contained within the websocket package (causing issues).
- fix Fixed PageQuery JSON conversion error.
- fix Fixed SSE close interface disconnection issue.
- fix Fixed typo in PlusSmsDao#clean method.
- fix Fixed excel cascading dropdown data error (Thanks Emil.Zhang).
- fix Fixed method errors in modules lacking mp dependency.
- fix Fixed code generation paging errors caused by the new mp version using the latest SQL Server syntax by default.
- fix Fixed OssClient rollback error modification.
- fix Fixed registration log status recording error.
Frontend Changes
- update typescript 5.4.5 => 5.7.2
- update vite 5.2.12 => 5.4.11
- update vue 3.4.34 => 3.5.13
- update element-plus 2.7.8 => 2.8.8
- update eslint upgraded to v9 version (Thanks 玲娜贝er).
- update vue-i18n 10.0.5
- update Optimized parseTime hint error issue.
- update Optimized i18n variable hints.
- update Optimized by rewriting workflow-related pages.
- update Optimized theme color display brightness in dark mode (Thanks LiuHao).
- update Optimized hasRoles method by adding super admin check.
- update Optimized user page by adding import/export permission identifiers.
- update Optimized TopNav internal link menu click highlight.
- update Optimized new/edit user by filtering disabled departments.
- update Optimized whitelist by adding regex matching examples.
- update Optimized whitelist to support wildcard path matching.
- update Optimized i18n $t method to support TS type hints (Thanks 玲娜贝er).
- update Optimized login page multi-language button style.
- update Optimized by adding i18n content to login and registration pages and adding language switch buttons (Thanks QianRj).
- update Optimized eslint upgrade to v9 & updated code that did not comply with validation rules (Thanks 玲娜贝er).
- update Optimized full code standardization.
- update Optimized code generation import dropdown default value handling.
- update Optimized menu breadcrumb navigation to support multi-level display.
- update Optimized parameter key-value replacement with multi-line text.
- update Optimized by adding default data permission option: "Department and below or own data permission".
- update Optimized permission loadView to avoid looping through entire modules, allowing view folders within views (Thanks admin_lijinfu).
- update Optimized personal center force logout device interface path.
- update Optimized by reading i18n language pack information directly from @/lang/*.ts files (Thanks QianRj).
- update Optimized by migrating the sync dictionary function to tenant management.
- update Optimized by refactoring operation log detail styles (Thanks 玲娜贝er).
- update Optimized dictionary caching using Map instead of Array for higher efficiency (Thanks 月夜).
- update Optimized by checking if filenames contain special characters.
- update Optimized getTenantList interface to dynamically decide whether to pass the token.
- fix Fixed issue where switching tenants with too many tabs caused freezing.
- fix Fixed incorrect permission string for the modify button in user management interface (Thanks QianRj).
- fix Fixed OSS configuration page to display configuration key and hide primary key ID.
- fix Fixed page API deprecation warnings.
- fix Fixed code generation list loading issue.
- fix Fixed issue where internal link pages couldn't open when Tags-Views were closed by default.
- fix Fixed user selection component ID type inconsistency issue.
- fix Fixed code generation querying the list twice after editing.
- fix Fixed 404 error when login lacks redirect parameter.
- fix Fixed monitor context-path causing 404 error upon logout and re-login.
- fix Fixed inconsistent redirect behavior between manual logout and token expiration logout.
- fix Fixed issue where SSE close requests were still sent after disabling SSE, causing errors.
- fix Fixed data caching issue in embedded pages causing inconsistency with external pages.
Platform Introduction
RuoYi-Vue-Plus is a rewrite of RuoYi-Vue, comprehensively upgraded for
distributed clusters and multi-tenancyscenarios (not compatible with the original framework).
Project code and documentation are open source, free, and commercially usable. Just retain the open-source license file in the project. Code for a lifetime, open source for interest, open source for learning, open source to let everyone truly learn technology.
System Demo: https://plus-doc.dromara.org/#/common/demo_system
Frontend Project Address: https://gitee.com/JavaLionLi/plus-ui Member Frontend Project Address: Based on vben5 https://gitee.com/dapppp/ruoyi-plus-vben5
Documentation Address: https://plus-doc.dromara.org
Functional Differences Between This Framework and RuoYi
| Feature | This Framework | RuoYi |
|---|---|---|
| Frontend Project | Rewritten using Vue3 + TS + ElementPlus | Based on Vue2/Vue3 + JS |
| Backend Project Structure | Plugin-based + extension package form, decoupled structure, easy to extend | Modules inject into each other, heavily coupled, difficult to extend |
| Backend Code Style | Strictly follows Alibaba规范 and project-unified code formatting | Code writing and structure differ from conventions, creating reading barriers |
| Web Container | Uses Undertow, a high-performance container based on XNIO | Uses Tomcat |
| Permission Authentication | Uses Sa-Token, Jwt; static use, full-featured, low coupling, high extensibility | Uses Spring Security; cumbersome configuration, poor extensibility |
| Permission Annotations | Uses Sa-Token; supports annotations for login check, role check, permission check, secondary auth check, HttpBasic check, ignore check. Role and permission checks support multiple conditions like AND, OR, or complex expressions like Permission OR Role. | Only supports existence matching |
| Third-party Auth | Uses JustAuth third-party login component; supports dozens of authentications like WeChat, DingTalk | None |
| Relational DB Support | Natively supports MySQL, Oracle, PostgreSQL, SQLServer. Supports heterogeneous switching (supports all databases mybatis-plus supports, just add JDBC dependency. Success cases include Dameng, Kingbase). | Supports Mysql, Oracle. Does not support concurrent use or heterogeneous switching. |
| Cache Database | Supports Redis 5-7, supports most new features like distributed rate limiting, distributed queues. | Simple Redis get/set support. |
| Redis Client | Uses Redisson (officially recommended by Redis), Netty-based client tool. Supports over 90% of Redis commands. Underlying optimizations avoid many incorrect usages (e.g., keys converted to scan). Supports standalone, sentinel, single-master cluster, multi-master cluster modes. | Lettuce + RedisTemplate; supports few modes, tools are cumbersome to use. Connection pool uses common-pool, many bugs, frequent issues. |
| Cache Annotations | Uses Spring-Cache annotations, extended implementation supports more features (e.g., TTL, max idle time, group max length). Data auto-cached with just an annotation. | Requires manual Redis code logic. |
| ORM Framework | Uses Mybatis-Plus; object-based, barely any SQL needed, full Java operation, powerful with many plugins (e.g., multi-tenant, paging, optimistic lock). | Uses Mybatis; XML-based, requires manual SQL writing. |
| SQL Monitoring | Uses p6spy; can output complete SQL and execution time monitoring. | Log output; requires manual SQL and parameter拼接, not easy for quick debugging. |
| Data Paging | Uses Mybatis-Plus paging plugin. Framework extended it, objectified paging object, supports multiple parameter passing methods, supports frontend multi-sorting, complex sorting. | Uses PageHelper; only supports single query paging, parameters only from param, only single sort, poor functionality and extensibility, bad experience. |
| Data Permissions | Uses Mybatis-Plus plugin;自行 analyzes and拼接 SQL, seamless filtering. Just set annotation conditions on Mapper, supports various customizations, not limited to department/role. | Uses annotation+aop implementation; based on department/role, generated SQL has poor compatibility, doesn't support other business extensions. Generated SQL needs manual splicing onto specific business SQL, doesn't work for multiple Mapper queries. |
| Data Desensitization | Uses annotation + jackson; desensitizes during serialization, supports different conditions per module. Supports multiple strategies: ID card, phone, address, email, bank card, etc. Extensible. | None |
| Data Encryption | Uses annotation + mybatis interceptor; auto encrypts/decrypts during data access. Supports multiple strategies: BASE64, AES, RSA, SM2, SM4, etc. | None |
| Interface Transmission Encryption | Uses dynamic AES + RSA to encrypt request body; each request has a different key, greatly reducing crackability. | None |
| Data Translation | Uses annotation + jackson; dynamically modifies data during serialization, translates data. Supports multiple modes: mapping translation, direct translation, other extended condition translation. Interface-based, two steps for custom extension. Built-in多种 translation implementations. | None |
| Multi-Datasource Framework | Uses dynamic-datasource; supports most databases on the market. Dynamically manage heterogeneous databases via yml config, or add datasources via frontend page. Supports SpEL expressions to switch datasource based on request header/parameters. | Based on druid; manual code configuration for datasources, cumbersome configuration, poor support. |
| Multi-Datasource Transaction | Uses dynamic-datasource; supports transaction rollback across different types of databases. | Not supported |
| Database Connection Pool | Uses HikariCP; Spring's built-in connection pool, simple configuration, famous for performance and stability. | Uses druid; many bugs, poor community maintenance, low activity, numerous cumbersome configurations, average performance. |
| Database Primary Key | Uses Snowflake ID; time-based, ordered, increasing, unique ID. No more worries about primary key conflicts during sharding/merging. | Uses database auto-increment ID; limited data volume support, doesn't support unique primary keys across multiple datasources. |
| WebSocket Protocol | Based on Spring's encapsulated WebSocket protocol; extended Token auth and distributed session sync, not just single-machine useless. | None |
| SSE Push | Uses Spring SSE implementation; extended Token auth and distributed session sync. | None |
| Serialization | Uses Jackson; Spring's built-in serialization, reliable!!! | Uses fastjson; infamous bugjson |
| Distributed Idempotence | Simplified implementation referencing Meituan's GTIS anti-duplication system (details in docs). | Manual annotation implementation based on aop. |
| Distributed Lock | Uses Lock4j,底层 based on Redisson. | None |
| Distributed Task Scheduling | Uses SnailJob; natively supports distribution, unified management center, supports multiple databases, sharding, retry, DAG task flows, etc. | Uses Quartz; database lock-based, poor performance, clusters require much configuration and modification. |
| File Storage | Uses Minio; distributed file storage, natively supports multi-machine, multi-disk, multi-shard, multi-replica storage. Supports permission management, secure, files can be encrypted. | Uses local file storage; files exposed, easily lost/leaked, doesn't support clusters, has single point of failure. |
| Cloud Storage | Uses AWS S3 protocol client; supports all vendors supporting S3 protocol: Qiniu, Alibaba, Tencent, etc. | Not supported |
| SMS | Uses sms4j SMS fusion package; supports dozens of SMS vendors. Just configure vendor keys in yml. Multiple vendors can be used together. | Not supported |
| Uses mail-api universal protocol; supports most email vendors. | Not supported | |
| Interface Documentation | Uses SpringDoc, javadoc; annotation-free, zero intrusion based on Java comments. Just write good comments, no need to write lots of doc annotations. | Uses Springfox; discontinued, requires writing大量 annotations to support doc generation. |
| Validation Framework | Uses Validation; supports annotation and utility class validation. Annotations support i18n. | Only supports annotations, and annotations don't support i18n. |
| Excel Framework | Uses Alibaba EasyExcel; plugin-based. Framework added many features: auto-merge相同 content, auto-arrange layout, dictionary translation, etc. | Based on POI manual implementation; limited functionality, complex, poor extensibility. |
| Workflow Support | Supports various complex approvals: transfer, delegate, add/sign subtract/sign,会签,或签,票签, etc. | None |
| Utility Framework | Uses Hutool, Lombok; hundreds of tools cover 90% of needs. Auto-generates get/set etc. based on annotations, simplifying framework code. | Handwritten tools, unstable, prone to issues. Limited number of tools. Code bloated, need to handwrite get/set etc. |
| Monitoring Framework | Uses SpringBoot-Admin; based on SpringBoot official actuator probe mechanism. Real-time service status monitoring. Framework extended it with online log viewing monitoring. | None |
| Tracing | Uses Apache SkyWalking; troubled not knowing where requests went or where problems occurred? Use it to see every node a request passes through in real-time. | None |
| Code Generator | Just design the table structure, generate all CRUD code and pages with one click. Reduces development load by 80%, focus on business design. Adapted for MP, SpringDoc standardized code. Supports dynamic multi-datasource code generation. | Code generation for native structure, only supports single datasource generation. |
| Deployment | Supports Docker orchestration; one-click setup for all environments. Developers no longer worry about environment setup. | Native jar deployment; other environments require manual download, installation, and setup. |
| Project Path Modification | Provides detailed modification plan documentation and made some changes; very easy to modify to your liking. | Requires much modification, limited documentation. |
| Internationalization (i18n) | Dynamically returns text in different languages based on request header. Low development difficulty, has corresponding utils, supports i18n for most annotation content. | Only provides basic functions, others need self-writing extension. |
| Code Unit Testing | Provides unit testing, usage methods, writing methods, and maven multi-environment unit test plugin. | Only provides basic functions, others need self-writing extension. |
| Demo Cases | Provides practical use cases of framework features; a separate module offers many comprehensive examples. | None |