diff --git a/.run/ruoyi-auth.run.xml b/.run/ruoyi-auth.run.xml index a9ccb971c..602e84f3f 100644 --- a/.run/ruoyi-auth.run.xml +++ b/.run/ruoyi-auth.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-gateway.run.xml b/.run/ruoyi-gateway.run.xml index d6e7acbd4..c58de3c76 100644 --- a/.run/ruoyi-gateway.run.xml +++ b/.run/ruoyi-gateway.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-gen.run.xml b/.run/ruoyi-gen.run.xml index a0f7634ac..d7169ac80 100644 --- a/.run/ruoyi-gen.run.xml +++ b/.run/ruoyi-gen.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-job.run.xml b/.run/ruoyi-job.run.xml index a7efdc39f..ed3eabd2c 100644 --- a/.run/ruoyi-job.run.xml +++ b/.run/ruoyi-job.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-monitor.run.xml b/.run/ruoyi-monitor.run.xml index 01b8e6450..2536cd4ab 100644 --- a/.run/ruoyi-monitor.run.xml +++ b/.run/ruoyi-monitor.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-nacos.run.xml b/.run/ruoyi-nacos.run.xml index 61539c965..4d7b6f437 100644 --- a/.run/ruoyi-nacos.run.xml +++ b/.run/ruoyi-nacos.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-resource.run.xml b/.run/ruoyi-resource.run.xml index 01d2e8b98..1718d3fc0 100644 --- a/.run/ruoyi-resource.run.xml +++ b/.run/ruoyi-resource.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-seata-server.run.xml b/.run/ruoyi-seata-server.run.xml index 941f5d08f..330efb28f 100644 --- a/.run/ruoyi-seata-server.run.xml +++ b/.run/ruoyi-seata-server.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-sentinel-dashboard.run.xml b/.run/ruoyi-sentinel-dashboard.run.xml index bb91d8b01..8e5c71577 100644 --- a/.run/ruoyi-sentinel-dashboard.run.xml +++ b/.run/ruoyi-sentinel-dashboard.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-system.run.xml b/.run/ruoyi-system.run.xml index 163b278b2..ad31d27ef 100644 --- a/.run/ruoyi-system.run.xml +++ b/.run/ruoyi-system.run.xml @@ -2,7 +2,7 @@ - diff --git a/.run/ruoyi-xxl-job-admin.run.xml b/.run/ruoyi-xxl-job-admin.run.xml index 1ca6c1c6a..fcc16cb8b 100644 --- a/.run/ruoyi-xxl-job-admin.run.xml +++ b/.run/ruoyi-xxl-job-admin.run.xml @@ -2,7 +2,7 @@ - diff --git a/README.md b/README.md index 650367541..f2bb930d8 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://gitee.com/JavaLionLi/RuoYi-Cloud-Plus/blob/master/LICENSE) [![使用IntelliJ IDEA开发维护](https://img.shields.io/badge/IntelliJ%20IDEA-提供支持-blue.svg)](https://www.jetbrains.com/?from=RuoYi-Cloud-Plus)
-[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-1.5.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Cloud-Plus) +[![RuoYi-Cloud-Plus](https://img.shields.io/badge/RuoYi_Cloud_Plus-1.6.0-success.svg)](https://gitee.com/JavaLionLi/RuoYi-Cloud-Plus) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-2.7-blue.svg)]() [![JDK-8+](https://img.shields.io/badge/JDK-8-green.svg)]() [![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]() diff --git a/config/nacos/application-common.yml b/config/nacos/application-common.yml index 59f5c8ca8..65c806803 100644 --- a/config/nacos/application-common.yml +++ b/config/nacos/application-common.yml @@ -230,10 +230,22 @@ mybatis-plus: updateStrategy: NOT_NULL where-strategy: NOT_NULL +# 数据加密 +mybatis-encryptor: + # 是否开启加密 + enable: false + # 默认加密算法 + algorithm: BASE64 + # 编码方式 BASE64/HEX。默认BASE64 + encode: BASE64 + # 安全秘钥 对称算法的秘钥 如:AES,SM4 + password: + # 公私钥 非对称算法的公私钥 如:SM2,RSA + publicKey: + privateKey: + # swagger配置 swagger: - # 是否开启swagger - enabled: true info: # 标题 title: '标题:RuoYi-Cloud-Plus微服务权限管理系统_接口文档' @@ -259,6 +271,9 @@ swagger: ruoyi-gen: /code springdoc: + api-docs: + # 是否开启接口文档 + enabled: true swagger-ui: # 持久化认证数据 persistAuthorization: true diff --git a/config/nacos/datasource.yml b/config/nacos/datasource.yml index 89fa5eb3e..cb3ac5290 100644 --- a/config/nacos/datasource.yml +++ b/config/nacos/datasource.yml @@ -39,15 +39,17 @@ spring: # 最小空闲线程数量 minIdle: 10 # 配置获取连接等待超时的时间 - connectionTimeout: 10000 + connectionTimeout: 30000 # 校验超时时间 validationTimeout: 5000 # 空闲连接存活最大时间,默认10分钟 - idleTimeout: 60000 + idleTimeout: 600000 # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟 - maxLifetime: 900000 + maxLifetime: 1800000 # 连接测试query(配置检测连接是否有效) connectionTestQuery: SELECT 1 + # 多久检查一次连接的活性 + keepaliveTime: 30000 # seata配置 seata: diff --git a/config/nacos/ruoyi-gateway.yml b/config/nacos/ruoyi-gateway.yml index 1195e25f8..4f5a4828a 100644 --- a/config/nacos/ruoyi-gateway.yml +++ b/config/nacos/ruoyi-gateway.yml @@ -88,6 +88,8 @@ spring: # sentinel 配置 sentinel: + filter: + enabled: false # nacos配置持久化 datasource: ds1: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index accb40e30..7f0ab312f 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -29,7 +29,7 @@ services: network_mode: "host" nacos: - image: ruoyi/ruoyi-nacos:1.5.0 + image: ruoyi/ruoyi-nacos:1.6.0 container_name: nacos ports: - "8848:8848" @@ -96,7 +96,7 @@ services: network_mode: "host" seata-server: - image: ruoyi/ruoyi-seata-server:1.5.0 + image: ruoyi/ruoyi-seata-server:1.6.0 container_name: seata-server ports: - "7091:7091" @@ -135,7 +135,7 @@ services: network_mode: "host" sentinel: - image: ruoyi/ruoyi-sentinel-dashboard:1.5.0 + image: ruoyi/ruoyi-sentinel-dashboard:1.6.0 container_name: sentinel environment: TZ: Asia/Shanghai @@ -150,7 +150,7 @@ services: network_mode: "host" ruoyi-monitor: - image: ruoyi/ruoyi-monitor:1.5.0 + image: ruoyi/ruoyi-monitor:1.6.0 container_name: ruoyi-monitor environment: # 时区上海 @@ -166,7 +166,7 @@ services: network_mode: "host" ruoyi-xxl-job-admin: - image: ruoyi/ruoyi-xxl-job-admin:1.5.0 + image: ruoyi/ruoyi-xxl-job-admin:1.6.0 container_name: ruoyi-xxl-job-admin environment: # 时区上海 @@ -182,7 +182,7 @@ services: network_mode: "host" ruoyi-gateway: - image: ruoyi/ruoyi-gateway:1.5.0 + image: ruoyi/ruoyi-gateway:1.6.0 container_name: ruoyi-gateway environment: # 时区上海 @@ -198,7 +198,7 @@ services: network_mode: "host" ruoyi-auth: - image: ruoyi/ruoyi-auth:1.5.0 + image: ruoyi/ruoyi-auth:1.6.0 container_name: ruoyi-auth environment: # 时区上海 @@ -214,7 +214,7 @@ services: network_mode: "host" ruoyi-system: - image: ruoyi/ruoyi-system:1.5.0 + image: ruoyi/ruoyi-system:1.6.0 container_name: ruoyi-system environment: # 时区上海 @@ -230,7 +230,7 @@ services: network_mode: "host" ruoyi-gen: - image: ruoyi/ruoyi-gen:1.5.0 + image: ruoyi/ruoyi-gen:1.6.0 container_name: ruoyi-gen environment: # 时区上海 @@ -246,7 +246,7 @@ services: network_mode: "host" ruoyi-job: - image: ruoyi/ruoyi-job:1.5.0 + image: ruoyi/ruoyi-job:1.6.0 container_name: ruoyi-job environment: # 时区上海 @@ -262,7 +262,7 @@ services: network_mode: "host" ruoyi-resource: - image: ruoyi/ruoyi-resource:1.5.0 + image: ruoyi/ruoyi-resource:1.6.0 container_name: ruoyi-resource environment: # 时区上海 @@ -396,6 +396,10 @@ services: ALLOW_ANONYMOUS_LOGIN: "yes" ZOO_SERVER_ID: 1 ZOO_PORT_NUMBER: 2181 + # 自带的控制台 一般用不上可自行开启 + ZOO_ENABLE_ADMIN_SERVER: "no" + # 自带控制台的端口 + ZOO_ADMIN_SERVER_PORT_NUMBER: 8080 network_mode: "host" kafka: @@ -435,13 +439,13 @@ services: network_mode: "host" sky-oap: - image: apache/skywalking-oap-server:8.9.1 + image: apache/skywalking-oap-server:9.3.0 container_name: sky-oap ports: - "11800:11800" - "12800:12800" environment: - JAVA_OPTS: -Xms512m -Xmx1g + JAVA_OPTS: -Xms1G -Xmx2G #记录数据的有效期,单位天 SW_CORE_RECORD_DATA_TTL: 7 #分析指标数据的有效期,单位天 @@ -452,14 +456,14 @@ services: network_mode: "host" sky-ui: - image: apache/skywalking-ui:8.9.1 + image: apache/skywalking-ui:9.3.0 container_name: sky-ui ports: - "18080:18080" environment: + SW_SERVER_PORT: 18080 SW_OAP_ADDRESS: http://127.0.0.1:12800 TZ: Asia/Shanghai - JAVA_OPTS: "-Dserver.port=18080" depends_on: - sky-oap network_mode: "host" diff --git a/docker/skywalking/agent/LICENSE b/docker/skywalking/agent/LICENSE index c90e8e6c3..c78714d00 100644 --- a/docker/skywalking/agent/LICENSE +++ b/docker/skywalking/agent/LICENSE @@ -215,12 +215,12 @@ Apache 2.0 licenses The following components are provided under the Apache License. See project link for details. The text of each license is the standard Apache 2.0 license. - raphw (byte-buddy) 1.12.13: http://bytebuddy.net/ , Apache 2.0 + raphw (byte-buddy) 1.12.19: http://bytebuddy.net/ , Apache 2.0 Google: grpc-java 1.50.0: https://github.com/grpc/grpc-java, Apache 2.0 Google: gson 2.8.9: https://github.com/google/gson , Apache 2.0 Google: proto-google-common-protos 2.0.1: https://github.com/googleapis/googleapis , Apache 2.0 Google: jsr305 3.0.2: http://central.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.0/jsr305-3.0.0.pom , Apache 2.0 - netty 4.1.79: https://github.com/netty/netty/blob/4.1/LICENSE.txt, Apache 2.0 + netty 4.1.86: https://github.com/netty/netty/blob/4.1/LICENSE.txt, Apache 2.0 ======================================================================== BSD licenses diff --git a/docker/skywalking/agent/NOTICE b/docker/skywalking/agent/NOTICE index 3aba92637..673951e2e 100644 --- a/docker/skywalking/agent/NOTICE +++ b/docker/skywalking/agent/NOTICE @@ -1,5 +1,5 @@ Apache SkyWalking -Copyright 2017-2022 The Apache Software Foundation +Copyright 2017-2023 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). diff --git a/docker/skywalking/agent/activations/apm-toolkit-kafka-activation-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-kafka-activation-8.14.0.jar similarity index 61% rename from docker/skywalking/agent/activations/apm-toolkit-kafka-activation-8.13.0.jar rename to docker/skywalking/agent/activations/apm-toolkit-kafka-activation-8.14.0.jar index 0b2b63c24..7e0efc8ed 100644 Binary files a/docker/skywalking/agent/activations/apm-toolkit-kafka-activation-8.13.0.jar and b/docker/skywalking/agent/activations/apm-toolkit-kafka-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-logback-1.x-activation-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-logback-1.x-activation-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/activations/apm-toolkit-logback-1.x-activation-8.13.0.jar rename to docker/skywalking/agent/activations/apm-toolkit-logback-1.x-activation-8.14.0.jar index 99b20ad68..bc0cbd3f6 100644 Binary files a/docker/skywalking/agent/activations/apm-toolkit-logback-1.x-activation-8.13.0.jar and b/docker/skywalking/agent/activations/apm-toolkit-logback-1.x-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-logging-common-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-logging-common-8.13.0.jar deleted file mode 100644 index c38c7ad75..000000000 Binary files a/docker/skywalking/agent/activations/apm-toolkit-logging-common-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-logging-common-8.14.0.jar b/docker/skywalking/agent/activations/apm-toolkit-logging-common-8.14.0.jar new file mode 100644 index 000000000..74d34f880 Binary files /dev/null and b/docker/skywalking/agent/activations/apm-toolkit-logging-common-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-meter-activation-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-meter-activation-8.14.0.jar similarity index 61% rename from docker/skywalking/agent/activations/apm-toolkit-meter-activation-8.13.0.jar rename to docker/skywalking/agent/activations/apm-toolkit-meter-activation-8.14.0.jar index 09e538883..29115f4d5 100644 Binary files a/docker/skywalking/agent/activations/apm-toolkit-meter-activation-8.13.0.jar and b/docker/skywalking/agent/activations/apm-toolkit-meter-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-micrometer-activation-8.14.0.jar b/docker/skywalking/agent/activations/apm-toolkit-micrometer-activation-8.14.0.jar new file mode 100644 index 000000000..25970a97f Binary files /dev/null and b/docker/skywalking/agent/activations/apm-toolkit-micrometer-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-opentracing-activation-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-opentracing-activation-8.14.0.jar similarity index 61% rename from docker/skywalking/agent/activations/apm-toolkit-opentracing-activation-8.13.0.jar rename to docker/skywalking/agent/activations/apm-toolkit-opentracing-activation-8.14.0.jar index 1d0041e7e..c2b5c32e0 100644 Binary files a/docker/skywalking/agent/activations/apm-toolkit-opentracing-activation-8.13.0.jar and b/docker/skywalking/agent/activations/apm-toolkit-opentracing-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-trace-activation-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-trace-activation-8.14.0.jar similarity index 58% rename from docker/skywalking/agent/activations/apm-toolkit-trace-activation-8.13.0.jar rename to docker/skywalking/agent/activations/apm-toolkit-trace-activation-8.14.0.jar index 50f3da4ca..5cef0d547 100644 Binary files a/docker/skywalking/agent/activations/apm-toolkit-trace-activation-8.13.0.jar and b/docker/skywalking/agent/activations/apm-toolkit-trace-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/activations/apm-toolkit-webflux-activation-8.13.0.jar b/docker/skywalking/agent/activations/apm-toolkit-webflux-activation-8.14.0.jar similarity index 67% rename from docker/skywalking/agent/activations/apm-toolkit-webflux-activation-8.13.0.jar rename to docker/skywalking/agent/activations/apm-toolkit-webflux-activation-8.14.0.jar index 376a56148..0aed4fa9d 100644 Binary files a/docker/skywalking/agent/activations/apm-toolkit-webflux-activation-8.13.0.jar and b/docker/skywalking/agent/activations/apm-toolkit-webflux-activation-8.14.0.jar differ diff --git a/docker/skywalking/agent/config/agent.config b/docker/skywalking/agent/config/agent.config index 236135e7a..ac9a5379a 100644 --- a/docker/skywalking/agent/config/agent.config +++ b/docker/skywalking/agent/config/agent.config @@ -89,6 +89,9 @@ agent.ssl_key_path=${SW_AGENT_SSL_KEY_PATH:} agent.ssl_cert_chain_path=${SW_AGENT_SSL_CERT_CHAIN_PATH:} +# Enable the agent kernel services and instrumentation. +agent.enable=${SW_AGENT_ENABLE:true} + # Limit the length of the ipv4 list size. osinfo.ipv4_list_size=${SW_AGENT_OSINFO_IPV4_LIST_SIZE:10} @@ -152,6 +155,8 @@ correlation.value_max_length=${SW_CORRELATION_VALUE_MAX_LENGTH:128} correlation.auto_tag_keys=${SW_CORRELATION_AUTO_TAG_KEYS:} # The buffer size of collected JVM info. jvm.buffer_size=${SW_JVM_BUFFER_SIZE:600} +# The period in seconds of JVM metrics collection. Unit is second. +jvm.metrics_collect_period=${SW_JVM_METRICS_COLLECT_PERIOD:1} # The buffer channel size. buffer.channel_size=${SW_BUFFER_CHANNEL_SIZE:5} # The buffer size. @@ -190,7 +195,7 @@ plugin.elasticsearch.trace_dsl=${SW_PLUGIN_ELASTICSEARCH_TRACE_DSL:false} # If true, the fully qualified method name will be used as the endpoint name instead of the request URL, default is false. plugin.springmvc.use_qualified_name_as_endpoint_name=${SW_PLUGIN_SPRINGMVC_USE_QUALIFIED_NAME_AS_ENDPOINT_NAME:false} # If true, the fully qualified method name will be used as the operation name instead of the given operation name, default is false. -plugin.toolit.use_qualified_name_as_operation_name=${SW_PLUGIN_TOOLIT_USE_QUALIFIED_NAME_AS_OPERATION_NAME:false} +plugin.toolkit.use_qualified_name_as_operation_name=${SW_PLUGIN_TOOLKIT_USE_QUALIFIED_NAME_AS_OPERATION_NAME:false} # If set to true, the parameters of the sql (typically `java.sql.PreparedStatement`) would be collected. plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS:false} # If set to positive number, the `db.sql.parameters` would be truncated to this length, otherwise it would be completely saved, which may cause performance problem. @@ -274,3 +279,35 @@ plugin.neo4j.cypher_parameters_max_length=${SW_PLUGIN_NEO4J_CYPHER_PARAMETERS_MA plugin.neo4j.cypher_body_max_length=${SW_PLUGIN_NEO4J_CYPHER_BODY_MAX_LENGTH:2048} # If set to a positive number and activate `trace sampler CPU policy plugin`, the trace would not be collected when agent process CPU usage percent is greater than `plugin.cpupolicy.sample_cpu_usage_percent_limit`. plugin.cpupolicy.sample_cpu_usage_percent_limit=${SW_SAMPLE_CPU_USAGE_PERCENT_LIMIT:-1} +# This config item controls that whether the Micronaut http client plugin should collect the parameters of the request. Also, activate implicitly in the profiled trace. +plugin.micronauthttpclient.collect_http_params=${SW_PLUGIN_MICRONAUTHTTPCLIENT_COLLECT_HTTP_PARAMS:false} +# This config item controls that whether the Micronaut http server plugin should collect the parameters of the request. Also, activate implicitly in the profiled trace. +plugin.micronauthttpserver.collect_http_params=${SW_PLUGIN_MICRONAUTHTTPSERVER_COLLECT_HTTP_PARAMS:false} +# Specify which command should be converted to write operation +plugin.memcached.operation_mapping_write=${SW_PLUGIN_MEMCACHED_OPERATION_MAPPING_WRITE:set,add,replace,append,prepend,cas,delete,touch,incr,decr} +# Specify which command should be converted to read operation +plugin.memcached.operation_mapping_read=${SW_PLUGIN_MEMCACHED_OPERATION_MAPPING_READ:get,gets,getAndTouch,getKeys,getKeysWithExpiryCheck,getKeysNoDuplicateCheck} +# Specify which command should be converted to write operation +plugin.ehcache.operation_mapping_write=${SW_PLUGIN_EHCACHE_OPERATION_MAPPING_WRITE:tryRemoveImmediately,remove,removeAndReturnElement,removeAll,removeQuiet,removeWithWriter,put,putAll,replace,removeQuiet,removeWithWriter,removeElement,removeAll,putWithWriter,putQuiet,putIfAbsent,putIfAbsent} +# Specify which command should be converted to read operation +plugin.ehcache.operation_mapping_read=${SW_PLUGIN_EHCACHE_OPERATION_MAPPING_READ:get,getAll,getQuiet,getKeys,getKeysWithExpiryCheck,getKeysNoDuplicateCheck,releaseRead,tryRead,getWithLoader,getAll,loadAll,getAllWithLoader} +# Specify which command should be converted to write operation +plugin.guavacache.operation_mapping_write=${SW_PLUGIN_GUAVACACHE_OPERATION_MAPPING_WRITE:put,putAll,invalidate,invalidateAll,invalidateAll,cleanUp} +# Specify which command should be converted to read operation +plugin.guavacache.operation_mapping_read=${SW_PLUGIN_GUAVACACHE_OPERATION_MAPPING_READ:getIfPresent,get,getAllPresent,size} +# If set to true, the parameters of Redis commands would be collected by Jedis agent. +plugin.jedis.trace_redis_parameters=${SW_PLUGIN_JEDIS_TRACE_REDIS_PARAMETERS:false} +# If set to positive number and plugin.jedis.trace_redis_parameters is set to true, Redis command parameters would be collected and truncated to this length. +plugin.jedis.redis_parameter_max_length=${SW_PLUGIN_JEDIS_REDIS_PARAMETER_MAX_LENGTH:128} +# Specify which command should be converted to write operation +plugin.jedis.operation_mapping_write=${SW_PLUGIN_JEDIS_OPERATION_MAPPING_WRITE:getset,set,setbit,setex,setnx,setrange,strlen,mset,msetnx,psetex,incr,incrby,incrbyfloat,decr,decrby,append,hmset,hset,hsetnx,hincrby,hincrbyfloat,hdel,rpoplpush,rpush,rpushx,lpush,lpushx,lrem,ltrim,lset,brpoplpush,linsert,sadd,sdiff,sdiffstore,sinterstore,sismember,srem,sunion,sunionstore,sinter,zadd,zincrby,zinterstore,zrange,zrangebylex,zrangebyscore,zrank,zrem,zremrangebylex,zremrangebyrank,zremrangebyscore,zrevrange,zrevrangebyscore,zrevrank,zunionstore,xadd,xdel,del,xtrim} +# Specify which command should be converted to read operation +plugin.jedis.operation_mapping_read=${SW_PLUGIN_JEDIS_OPERATION_MAPPING_READ:getrange,getbit,mget,hvals,hkeys,hlen,hexists,hget,hgetall,hmget,blpop,brpop,lindex,llen,lpop,lrange,rpop,scard,srandmember,spop,sscan,smove,zlexcount,zscore,zscan,zcard,zcount,xget,get,xread,xlen,xrange,xrevrange} +# If set to true, the parameters of Redis commands would be collected by Redisson agent. +plugin.redisson.trace_redis_parameters=${SW_PLUGIN_REDISSON_TRACE_REDIS_PARAMETERS:false} +# If set to positive number and plugin.redisson.trace_redis_parameters is set to true, Redis command parameters would be collected and truncated to this length. +plugin.redisson.redis_parameter_max_length=${SW_PLUGIN_REDISSON_REDIS_PARAMETER_MAX_LENGTH:128} +# Specify which command should be converted to write operation +plugin.redisson.operation_mapping_write=${SW_PLUGIN_REDISSON_OPERATION_MAPPING_WRITE:getset,set,setbit,setex,setnx,setrange,strlen,mset,msetnx,psetex,incr,incrby,incrbyfloat,decr,decrby,append,hmset,hset,hsetnx,hincrby,hincrbyfloat,hdel,rpoplpush,rpush,rpushx,lpush,lpushx,lrem,ltrim,lset,brpoplpush,linsert,sadd,sdiff,sdiffstore,sinterstore,sismember,srem,sunion,sunionstore,sinter,zadd,zincrby,zinterstore,zrange,zrangebylex,zrangebyscore,zrank,zrem,zremrangebylex,zremrangebyrank,zremrangebyscore,zrevrange,zrevrangebyscore,zrevrank,zunionstore,xadd,xdel,del,xtrim} +# Specify which command should be converted to read operation +plugin.redisson.operation_mapping_read=${SW_PLUGIN_REDISSON_OPERATION_MAPPING_READ:getrange,getbit,mget,hvals,hkeys,hlen,hexists,hget,hgetall,hmget,blpop,brpop,lindex,llen,lpop,lrange,rpop,scard,srandmember,spop,sscan,smove,zlexcount,zscore,zscan,zcard,zcount,xget,get,xread,xlen,xrange,xrevrange} diff --git a/docker/skywalking/agent/plugins/apm-canal-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-canal-1.x-plugin-8.14.0.jar similarity index 55% rename from docker/skywalking/agent/plugins/apm-canal-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-canal-1.x-plugin-8.14.0.jar index 00b26f143..ba56f4d10 100644 Binary files a/docker/skywalking/agent/plugins/apm-canal-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-canal-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-customize-enhance-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-customize-enhance-plugin-8.14.0.jar similarity index 64% rename from docker/skywalking/agent/plugins/apm-customize-enhance-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-customize-enhance-plugin-8.14.0.jar index 92fec59a4..73ac283e6 100644 Binary files a/docker/skywalking/agent/plugins/apm-customize-enhance-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-customize-enhance-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-dubbo-2.7.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-dubbo-2.7.x-plugin-8.13.0.jar deleted file mode 100644 index 69960da22..000000000 Binary files a/docker/skywalking/agent/plugins/apm-dubbo-2.7.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-dubbo-2.7.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-dubbo-2.7.x-plugin-8.14.0.jar new file mode 100644 index 000000000..f0bbda78d Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-dubbo-2.7.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-dubbo-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-dubbo-3.x-plugin-8.14.0.jar similarity index 62% rename from docker/skywalking/agent/plugins/apm-dubbo-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-dubbo-3.x-plugin-8.14.0.jar index d1d4d5eba..ac2568186 100644 Binary files a/docker/skywalking/agent/plugins/apm-dubbo-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-dubbo-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-dubbo-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-dubbo-plugin-8.13.0.jar deleted file mode 100644 index 54976c94d..000000000 Binary files a/docker/skywalking/agent/plugins/apm-dubbo-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-dubbo-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-dubbo-plugin-8.14.0.jar new file mode 100644 index 000000000..ead98fd2d Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-dubbo-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-elasticsearch-6.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-elasticsearch-6.x-plugin-8.14.0.jar similarity index 66% rename from docker/skywalking/agent/plugins/apm-elasticsearch-6.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-elasticsearch-6.x-plugin-8.14.0.jar index 48d21b9f0..3a4cd21a1 100644 Binary files a/docker/skywalking/agent/plugins/apm-elasticsearch-6.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-elasticsearch-6.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-elasticsearch-7.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-elasticsearch-7.x-plugin-8.14.0.jar similarity index 53% rename from docker/skywalking/agent/plugins/apm-elasticsearch-7.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-elasticsearch-7.x-plugin-8.14.0.jar index 322ced4fe..11245edae 100644 Binary files a/docker/skywalking/agent/plugins/apm-elasticsearch-7.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-elasticsearch-7.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-feign-default-http-9.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-feign-default-http-9.x-plugin-8.14.0.jar similarity index 60% rename from docker/skywalking/agent/plugins/apm-feign-default-http-9.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-feign-default-http-9.x-plugin-8.14.0.jar index 9edabed5c..f42e91f7c 100644 Binary files a/docker/skywalking/agent/plugins/apm-feign-default-http-9.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-feign-default-http-9.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-grpc-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-grpc-1.x-plugin-8.14.0.jar similarity index 64% rename from docker/skywalking/agent/plugins/apm-grpc-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-grpc-1.x-plugin-8.14.0.jar index ec0c8c1b5..71d1b3b39 100644 Binary files a/docker/skywalking/agent/plugins/apm-grpc-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-grpc-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-guava-cache-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-guava-cache-plugin-8.14.0.jar similarity index 55% rename from docker/skywalking/agent/plugins/apm-guava-cache-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-guava-cache-plugin-8.14.0.jar index 3177292e4..715deb25a 100644 Binary files a/docker/skywalking/agent/plugins/apm-guava-cache-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-guava-cache-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-guava-eventbus-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-guava-eventbus-plugin-8.13.0.jar deleted file mode 100644 index 6d521f74f..000000000 Binary files a/docker/skywalking/agent/plugins/apm-guava-eventbus-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-guava-eventbus-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-guava-eventbus-plugin-8.14.0.jar new file mode 100644 index 000000000..ac151f126 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-guava-eventbus-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-h2-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-h2-1.x-plugin-8.14.0.jar similarity index 53% rename from docker/skywalking/agent/plugins/apm-h2-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-h2-1.x-plugin-8.14.0.jar index 8f7919673..31142055e 100644 Binary files a/docker/skywalking/agent/plugins/apm-h2-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-h2-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-hikaricp-3.x-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-hikaricp-3.x-4.x-plugin-8.14.0.jar similarity index 66% rename from docker/skywalking/agent/plugins/apm-hikaricp-3.x-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-hikaricp-3.x-4.x-plugin-8.14.0.jar index 3ef98fc89..27f989f76 100644 Binary files a/docker/skywalking/agent/plugins/apm-hikaricp-3.x-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-hikaricp-3.x-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-httpClient-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-httpClient-4.x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-httpClient-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-httpClient-4.x-plugin-8.14.0.jar index 82a2679de..4b31b34be 100644 Binary files a/docker/skywalking/agent/plugins/apm-httpClient-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-httpClient-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-httpasyncclient-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-httpasyncclient-4.x-plugin-8.14.0.jar similarity index 64% rename from docker/skywalking/agent/plugins/apm-httpasyncclient-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-httpasyncclient-4.x-plugin-8.14.0.jar index 0953256a0..5326cf8d4 100644 Binary files a/docker/skywalking/agent/plugins/apm-httpasyncclient-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-httpasyncclient-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-httpclient-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-httpclient-3.x-plugin-8.14.0.jar similarity index 63% rename from docker/skywalking/agent/plugins/apm-httpclient-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-httpclient-3.x-plugin-8.14.0.jar index 0a1f1e4d9..106698eaf 100644 Binary files a/docker/skywalking/agent/plugins/apm-httpclient-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-httpclient-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-httpclient-5.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-httpclient-5.x-plugin-8.14.0.jar similarity index 60% rename from docker/skywalking/agent/plugins/apm-httpclient-5.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-httpclient-5.x-plugin-8.14.0.jar index 180239808..8baec7811 100644 Binary files a/docker/skywalking/agent/plugins/apm-httpclient-5.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-httpclient-5.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-httpclient-commons-8.13.0.jar b/docker/skywalking/agent/plugins/apm-httpclient-commons-8.13.0.jar deleted file mode 100644 index 4d2c0f15d..000000000 Binary files a/docker/skywalking/agent/plugins/apm-httpclient-commons-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-httpclient-commons-8.14.0.jar b/docker/skywalking/agent/plugins/apm-httpclient-commons-8.14.0.jar new file mode 100644 index 000000000..5b6ea35e5 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-httpclient-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-hutool-http-5.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-hutool-http-5.x-plugin-8.14.0.jar similarity index 58% rename from docker/skywalking/agent/plugins/apm-hutool-http-5.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-hutool-http-5.x-plugin-8.14.0.jar index 99fc0a3c2..723f23dbc 100644 Binary files a/docker/skywalking/agent/plugins/apm-hutool-http-5.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-hutool-http-5.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-influxdb-2.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-influxdb-2.x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-influxdb-2.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-influxdb-2.x-plugin-8.14.0.jar index df7723777..2b81cbcc4 100644 Binary files a/docker/skywalking/agent/plugins/apm-influxdb-2.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-influxdb-2.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-jdbc-commons-8.13.0.jar b/docker/skywalking/agent/plugins/apm-jdbc-commons-8.14.0.jar similarity index 62% rename from docker/skywalking/agent/plugins/apm-jdbc-commons-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-jdbc-commons-8.14.0.jar index 87a63ea23..7b50f7dc9 100644 Binary files a/docker/skywalking/agent/plugins/apm-jdbc-commons-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-jdbc-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-jdk-http-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-jdk-http-plugin-8.14.0.jar similarity index 61% rename from docker/skywalking/agent/plugins/apm-jdk-http-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-jdk-http-plugin-8.14.0.jar index b51ba345d..b2cec5e80 100644 Binary files a/docker/skywalking/agent/plugins/apm-jdk-http-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-jdk-http-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-jdk-threading-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-jdk-threading-plugin-8.14.0.jar similarity index 51% rename from docker/skywalking/agent/plugins/apm-jdk-threading-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-jdk-threading-plugin-8.14.0.jar index c94c68236..b85617f03 100644 Binary files a/docker/skywalking/agent/plugins/apm-jdk-threading-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-jdk-threading-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-jdk-threadpool-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-jdk-threadpool-plugin-8.14.0.jar similarity index 57% rename from docker/skywalking/agent/plugins/apm-jdk-threadpool-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-jdk-threadpool-plugin-8.14.0.jar index c8a0feebb..3694fa306 100644 Binary files a/docker/skywalking/agent/plugins/apm-jdk-threadpool-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-jdk-threadpool-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-kafka-commons-8.13.0.jar b/docker/skywalking/agent/plugins/apm-kafka-commons-8.14.0.jar similarity index 54% rename from docker/skywalking/agent/plugins/apm-kafka-commons-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-kafka-commons-8.14.0.jar index ab910e28c..b9f07425a 100644 Binary files a/docker/skywalking/agent/plugins/apm-kafka-commons-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-kafka-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-kafka-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-kafka-plugin-8.13.0.jar deleted file mode 100644 index b85b6ea25..000000000 Binary files a/docker/skywalking/agent/plugins/apm-kafka-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-kafka-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-kafka-plugin-8.14.0.jar new file mode 100644 index 000000000..a4a107f32 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-kafka-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-kotlin-coroutine-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-kotlin-coroutine-plugin-8.14.0.jar similarity index 59% rename from docker/skywalking/agent/plugins/apm-kotlin-coroutine-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-kotlin-coroutine-plugin-8.14.0.jar index 39d9ca6ff..705c7cd46 100644 Binary files a/docker/skywalking/agent/plugins/apm-kotlin-coroutine-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-kotlin-coroutine-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mariadb-2.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mariadb-2.x-plugin-8.13.0.jar deleted file mode 100644 index 25b8da75e..000000000 Binary files a/docker/skywalking/agent/plugins/apm-mariadb-2.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-mariadb-2.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-mariadb-2.x-plugin-8.14.0.jar new file mode 100644 index 000000000..5bde54f8b Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-mariadb-2.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mongodb-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mongodb-3.x-plugin-8.14.0.jar similarity index 50% rename from docker/skywalking/agent/plugins/apm-mongodb-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-mongodb-3.x-plugin-8.14.0.jar index a78ead89d..d2999fe80 100644 Binary files a/docker/skywalking/agent/plugins/apm-mongodb-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-mongodb-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mongodb-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mongodb-4.x-plugin-8.14.0.jar similarity index 57% rename from docker/skywalking/agent/plugins/apm-mongodb-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-mongodb-4.x-plugin-8.14.0.jar index 70ad159bd..747e1f737 100644 Binary files a/docker/skywalking/agent/plugins/apm-mongodb-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-mongodb-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mssql-commons-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mssql-commons-8.13.0.jar deleted file mode 100644 index 3f8d4cd61..000000000 Binary files a/docker/skywalking/agent/plugins/apm-mssql-commons-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-mssql-commons-8.14.0.jar b/docker/skywalking/agent/plugins/apm-mssql-commons-8.14.0.jar new file mode 100644 index 000000000..3712f091b Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-mssql-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mssql-jdbc-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mssql-jdbc-plugin-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/plugins/apm-mssql-jdbc-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-mssql-jdbc-plugin-8.14.0.jar index 49a9057fc..d20c1e112 100644 Binary files a/docker/skywalking/agent/plugins/apm-mssql-jdbc-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-mssql-jdbc-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mssql-jtds-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mssql-jtds-1.x-plugin-8.13.0.jar deleted file mode 100644 index 0c8646930..000000000 Binary files a/docker/skywalking/agent/plugins/apm-mssql-jtds-1.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-mssql-jtds-1.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-mssql-jtds-1.x-plugin-8.14.0.jar new file mode 100644 index 000000000..36247d5a1 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-mssql-jtds-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mybatis-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mybatis-3.x-plugin-8.14.0.jar similarity index 60% rename from docker/skywalking/agent/plugins/apm-mybatis-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-mybatis-3.x-plugin-8.14.0.jar index ca7ef4bb1..b6ec954e3 100644 Binary files a/docker/skywalking/agent/plugins/apm-mybatis-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-mybatis-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mysql-5.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mysql-5.x-plugin-8.13.0.jar deleted file mode 100644 index 77a376667..000000000 Binary files a/docker/skywalking/agent/plugins/apm-mysql-5.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-mysql-5.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-mysql-5.x-plugin-8.14.0.jar new file mode 100644 index 000000000..4038e2693 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-mysql-5.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mysql-8.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mysql-8.x-plugin-8.14.0.jar similarity index 50% rename from docker/skywalking/agent/plugins/apm-mysql-8.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-mysql-8.x-plugin-8.14.0.jar index 64f1998fc..8e7031393 100644 Binary files a/docker/skywalking/agent/plugins/apm-mysql-8.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-mysql-8.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-mysql-commons-8.13.0.jar b/docker/skywalking/agent/plugins/apm-mysql-commons-8.13.0.jar deleted file mode 100644 index 349ce94c5..000000000 Binary files a/docker/skywalking/agent/plugins/apm-mysql-commons-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-mysql-commons-8.14.0.jar b/docker/skywalking/agent/plugins/apm-mysql-commons-8.14.0.jar new file mode 100644 index 000000000..dbe70e97e Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-mysql-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-netty-socketio-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-netty-socketio-plugin-8.14.0.jar similarity index 65% rename from docker/skywalking/agent/plugins/apm-netty-socketio-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-netty-socketio-plugin-8.14.0.jar index cbc285ffc..69ccb85c0 100644 Binary files a/docker/skywalking/agent/plugins/apm-netty-socketio-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-netty-socketio-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-okhttp-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-okhttp-3.x-plugin-8.14.0.jar similarity index 55% rename from docker/skywalking/agent/plugins/apm-okhttp-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-okhttp-3.x-plugin-8.14.0.jar index 25bf7b59c..2707cb3c3 100644 Binary files a/docker/skywalking/agent/plugins/apm-okhttp-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-okhttp-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-okhttp-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-okhttp-4.x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-okhttp-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-okhttp-4.x-plugin-8.14.0.jar index ba74ca94f..ecc105b1e 100644 Binary files a/docker/skywalking/agent/plugins/apm-okhttp-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-okhttp-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-okhttp-common-8.13.0.jar b/docker/skywalking/agent/plugins/apm-okhttp-common-8.14.0.jar similarity index 67% rename from docker/skywalking/agent/plugins/apm-okhttp-common-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-okhttp-common-8.14.0.jar index 6a7812638..c4fb3dda0 100644 Binary files a/docker/skywalking/agent/plugins/apm-okhttp-common-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-okhttp-common-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-postgresql-8.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-postgresql-8.x-plugin-8.13.0.jar deleted file mode 100644 index 9eb10403e..000000000 Binary files a/docker/skywalking/agent/plugins/apm-postgresql-8.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-postgresql-8.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-postgresql-8.x-plugin-8.14.0.jar new file mode 100644 index 000000000..2e916bb37 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-postgresql-8.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-pulsar-2.2-2.7-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-pulsar-2.2-2.7-plugin-8.13.0.jar deleted file mode 100644 index 44ebd833e..000000000 Binary files a/docker/skywalking/agent/plugins/apm-pulsar-2.2-2.7-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-pulsar-2.2-2.7-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-pulsar-2.2-2.7-plugin-8.14.0.jar new file mode 100644 index 000000000..a9e218af5 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-pulsar-2.2-2.7-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-pulsar-2.8.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-pulsar-2.8.x-plugin-8.13.0.jar deleted file mode 100644 index 7448785a9..000000000 Binary files a/docker/skywalking/agent/plugins/apm-pulsar-2.8.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-pulsar-2.8.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-pulsar-2.8.x-plugin-8.14.0.jar new file mode 100644 index 000000000..1a03bf81f Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-pulsar-2.8.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-pulsar-common-8.13.0.jar b/docker/skywalking/agent/plugins/apm-pulsar-common-8.14.0.jar similarity index 50% rename from docker/skywalking/agent/plugins/apm-pulsar-common-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-pulsar-common-8.14.0.jar index f917efe19..ecf9dcec4 100644 Binary files a/docker/skywalking/agent/plugins/apm-pulsar-common-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-pulsar-common-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-quasar-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-quasar-plugin-8.13.0.jar deleted file mode 100644 index 58c0ba8d5..000000000 Binary files a/docker/skywalking/agent/plugins/apm-quasar-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-quasar-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-quasar-plugin-8.14.0.jar new file mode 100644 index 000000000..e0c24873b Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-quasar-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-rabbitmq-5.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-rabbitmq-plugin-8.14.0.jar similarity index 55% rename from docker/skywalking/agent/plugins/apm-rabbitmq-5.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-rabbitmq-plugin-8.14.0.jar index 46846c32a..39419ea96 100644 Binary files a/docker/skywalking/agent/plugins/apm-rabbitmq-5.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-rabbitmq-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-redisson-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-redisson-3.x-plugin-8.13.0.jar deleted file mode 100644 index 8ed92989a..000000000 Binary files a/docker/skywalking/agent/plugins/apm-redisson-3.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-redisson-3.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-redisson-3.x-plugin-8.14.0.jar new file mode 100644 index 000000000..24d57f378 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-redisson-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-resttemplate-4.3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-resttemplate-4.3.x-plugin-8.14.0.jar similarity index 63% rename from docker/skywalking/agent/plugins/apm-resttemplate-4.3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-resttemplate-4.3.x-plugin-8.14.0.jar index 7e1fe8256..c3ee6fc6c 100644 Binary files a/docker/skywalking/agent/plugins/apm-resttemplate-4.3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-resttemplate-4.3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-rocketmq-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-rocketmq-3.x-plugin-8.14.0.jar similarity index 54% rename from docker/skywalking/agent/plugins/apm-rocketmq-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-rocketmq-3.x-plugin-8.14.0.jar index 6628af189..de0a69249 100644 Binary files a/docker/skywalking/agent/plugins/apm-rocketmq-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-rocketmq-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-rocketmq-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-rocketmq-4.x-plugin-8.13.0.jar deleted file mode 100644 index 2fc26b6c3..000000000 Binary files a/docker/skywalking/agent/plugins/apm-rocketmq-4.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-rocketmq-4.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-rocketmq-4.x-plugin-8.14.0.jar new file mode 100644 index 000000000..680e2539d Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-rocketmq-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-sentinel-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-sentinel-1.x-plugin-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/plugins/apm-sentinel-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-sentinel-1.x-plugin-8.14.0.jar index 6e98d3b30..6e882f183 100644 Binary files a/docker/skywalking/agent/plugins/apm-sentinel-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-sentinel-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-sharding-sphere-4.1.0-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-sharding-sphere-4.1.0-plugin-8.14.0.jar similarity index 50% rename from docker/skywalking/agent/plugins/apm-sharding-sphere-4.1.0-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-sharding-sphere-4.1.0-plugin-8.14.0.jar index 6ca75eb23..d5c13c2b6 100644 Binary files a/docker/skywalking/agent/plugins/apm-sharding-sphere-4.1.0-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-sharding-sphere-4.1.0-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-shardingsphere-4.0.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-shardingsphere-4.0.x-plugin-8.14.0.jar similarity index 57% rename from docker/skywalking/agent/plugins/apm-shardingsphere-4.0.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-shardingsphere-4.0.x-plugin-8.14.0.jar index 47c244454..1666a5bad 100644 Binary files a/docker/skywalking/agent/plugins/apm-shardingsphere-4.0.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-shardingsphere-4.0.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-shardingsphere-5.0.0-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-shardingsphere-5.0.0-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-shardingsphere-5.0.0-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-shardingsphere-5.0.0-plugin-8.14.0.jar index 58a115fad..f359ed1dd 100644 Binary files a/docker/skywalking/agent/plugins/apm-shardingsphere-5.0.0-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-shardingsphere-5.0.0-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-annotation-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-annotation-plugin-8.14.0.jar similarity index 57% rename from docker/skywalking/agent/plugins/apm-spring-annotation-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-annotation-plugin-8.14.0.jar index 8395c9d85..86dd039f6 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-annotation-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-annotation-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-async-annotation-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-async-annotation-plugin-8.14.0.jar similarity index 54% rename from docker/skywalking/agent/plugins/apm-spring-async-annotation-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-async-annotation-plugin-8.14.0.jar index 2290281c7..97d051d5e 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-async-annotation-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-async-annotation-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-cloud-feign-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-cloud-feign-1.x-plugin-8.14.0.jar similarity index 57% rename from docker/skywalking/agent/plugins/apm-spring-cloud-feign-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-cloud-feign-1.x-plugin-8.14.0.jar index afb678295..ce8492647 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-cloud-feign-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-cloud-feign-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-cloud-feign-2.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-cloud-feign-2.x-plugin-8.13.0.jar deleted file mode 100644 index 1812d01ff..000000000 Binary files a/docker/skywalking/agent/plugins/apm-spring-cloud-feign-2.x-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-spring-cloud-feign-2.x-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-spring-cloud-feign-2.x-plugin-8.14.0.jar new file mode 100644 index 000000000..2b3600dc5 Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-spring-cloud-feign-2.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.0.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.0.x-plugin-8.14.0.jar similarity index 57% rename from docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.0.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.0.x-plugin-8.14.0.jar index 49c7cec43..516d3c7a6 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.0.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.0.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.14.0.jar index 37e3ac870..d6a940f1d 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-3.x-plugin-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/plugins/apm-spring-cloud-gateway-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-cloud-gateway-3.x-plugin-8.14.0.jar index 596e374db..bb2f17ce9 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-cloud-gateway-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-concurrent-util-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-concurrent-util-4.x-plugin-8.14.0.jar similarity index 51% rename from docker/skywalking/agent/plugins/apm-spring-concurrent-util-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-concurrent-util-4.x-plugin-8.14.0.jar index 1a8bb8b45..9319da324 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-concurrent-util-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-concurrent-util-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-core-patch-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-core-patch-8.14.0.jar similarity index 59% rename from docker/skywalking/agent/plugins/apm-spring-core-patch-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-core-patch-8.14.0.jar index f62e1eaab..f5020460f 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-core-patch-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-core-patch-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-kafka-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-kafka-1.x-plugin-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/plugins/apm-spring-kafka-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-kafka-1.x-plugin-8.14.0.jar index 4f14e7a82..f1be31752 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-kafka-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-kafka-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-kafka-2.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-kafka-2.x-plugin-8.14.0.jar similarity index 53% rename from docker/skywalking/agent/plugins/apm-spring-kafka-2.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-kafka-2.x-plugin-8.14.0.jar index 77773a7cf..83895c1ab 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-kafka-2.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-kafka-2.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-scheduled-annotation-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-scheduled-annotation-plugin-8.14.0.jar similarity index 54% rename from docker/skywalking/agent/plugins/apm-spring-scheduled-annotation-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-scheduled-annotation-plugin-8.14.0.jar index dc5dff96f..d80afa8c9 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-scheduled-annotation-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-scheduled-annotation-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-tx-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-tx-plugin-8.13.0.jar deleted file mode 100644 index bb37e361c..000000000 Binary files a/docker/skywalking/agent/plugins/apm-spring-tx-plugin-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/apm-spring-tx-plugin-8.14.0.jar b/docker/skywalking/agent/plugins/apm-spring-tx-plugin-8.14.0.jar new file mode 100644 index 000000000..4fc1f30bb Binary files /dev/null and b/docker/skywalking/agent/plugins/apm-spring-tx-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-spring-webflux-5.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-spring-webflux-5.x-plugin-8.14.0.jar similarity index 62% rename from docker/skywalking/agent/plugins/apm-spring-webflux-5.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-spring-webflux-5.x-plugin-8.14.0.jar index e93e7d062..f55818267 100644 Binary files a/docker/skywalking/agent/plugins/apm-spring-webflux-5.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-spring-webflux-5.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-springmvc-annotation-3.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-springmvc-annotation-3.x-plugin-8.14.0.jar similarity index 55% rename from docker/skywalking/agent/plugins/apm-springmvc-annotation-3.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-springmvc-annotation-3.x-plugin-8.14.0.jar index 1a98c31c1..bb3dca8f0 100644 Binary files a/docker/skywalking/agent/plugins/apm-springmvc-annotation-3.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-springmvc-annotation-3.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-springmvc-annotation-4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-springmvc-annotation-4.x-plugin-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/plugins/apm-springmvc-annotation-4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-springmvc-annotation-4.x-plugin-8.14.0.jar index 7675c7048..ccfc4f98e 100644 Binary files a/docker/skywalking/agent/plugins/apm-springmvc-annotation-4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-springmvc-annotation-4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-springmvc-annotation-5.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-springmvc-annotation-5.x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-springmvc-annotation-5.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-springmvc-annotation-5.x-plugin-8.14.0.jar index 3c0bdb617..f43ab9183 100644 Binary files a/docker/skywalking/agent/plugins/apm-springmvc-annotation-5.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-springmvc-annotation-5.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-springmvc-annotation-commons-8.13.0.jar b/docker/skywalking/agent/plugins/apm-springmvc-annotation-commons-8.14.0.jar similarity index 59% rename from docker/skywalking/agent/plugins/apm-springmvc-annotation-commons-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-springmvc-annotation-commons-8.14.0.jar index 38487220b..cedfc731c 100644 Binary files a/docker/skywalking/agent/plugins/apm-springmvc-annotation-commons-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-springmvc-annotation-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-tomcat-thread-pool-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-tomcat-thread-pool-plugin-8.14.0.jar similarity index 58% rename from docker/skywalking/agent/plugins/apm-tomcat-thread-pool-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-tomcat-thread-pool-plugin-8.14.0.jar index ef7f83481..4fe23ffac 100644 Binary files a/docker/skywalking/agent/plugins/apm-tomcat-thread-pool-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-tomcat-thread-pool-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-trace-ignore-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-trace-ignore-plugin-8.14.0.jar similarity index 54% rename from docker/skywalking/agent/plugins/apm-trace-ignore-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-trace-ignore-plugin-8.14.0.jar index bd6815a31..01e8da1fe 100644 Binary files a/docker/skywalking/agent/plugins/apm-trace-ignore-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-trace-ignore-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-undertow-2.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-undertow-2.x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/apm-undertow-2.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-undertow-2.x-plugin-8.14.0.jar index 35fab4d22..86ea8b305 100644 Binary files a/docker/skywalking/agent/plugins/apm-undertow-2.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-undertow-2.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-undertow-worker-thread-pool-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-undertow-worker-thread-pool-plugin-8.14.0.jar similarity index 52% rename from docker/skywalking/agent/plugins/apm-undertow-worker-thread-pool-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-undertow-worker-thread-pool-plugin-8.14.0.jar index 1eea95ed9..422ed5d7b 100644 Binary files a/docker/skywalking/agent/plugins/apm-undertow-worker-thread-pool-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-undertow-worker-thread-pool-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-xxl-job-2.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-xxl-job-2.x-plugin-8.14.0.jar similarity index 59% rename from docker/skywalking/agent/plugins/apm-xxl-job-2.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-xxl-job-2.x-plugin-8.14.0.jar index a1a2b23ed..b2903593b 100644 Binary files a/docker/skywalking/agent/plugins/apm-xxl-job-2.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-xxl-job-2.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/apm-zookeeper-3.4.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/apm-zookeeper-3.4.x-plugin-8.14.0.jar similarity index 66% rename from docker/skywalking/agent/plugins/apm-zookeeper-3.4.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/apm-zookeeper-3.4.x-plugin-8.14.0.jar index 6bc0c675e..0407b8e81 100644 Binary files a/docker/skywalking/agent/plugins/apm-zookeeper-3.4.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/apm-zookeeper-3.4.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/druid-1.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/druid-1.x-plugin-8.14.0.jar similarity index 64% rename from docker/skywalking/agent/plugins/druid-1.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/druid-1.x-plugin-8.14.0.jar index b1bd41043..7609cf29d 100644 Binary files a/docker/skywalking/agent/plugins/druid-1.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/druid-1.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/dubbo-2.7.x-conflict-patch-8.13.0.jar b/docker/skywalking/agent/plugins/dubbo-2.7.x-conflict-patch-8.14.0.jar similarity index 71% rename from docker/skywalking/agent/plugins/dubbo-2.7.x-conflict-patch-8.13.0.jar rename to docker/skywalking/agent/plugins/dubbo-2.7.x-conflict-patch-8.14.0.jar index 4eb60a561..ccebf5174 100644 Binary files a/docker/skywalking/agent/plugins/dubbo-2.7.x-conflict-patch-8.13.0.jar and b/docker/skywalking/agent/plugins/dubbo-2.7.x-conflict-patch-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/dubbo-3.x-conflict-patch-8.13.0.jar b/docker/skywalking/agent/plugins/dubbo-3.x-conflict-patch-8.14.0.jar similarity index 70% rename from docker/skywalking/agent/plugins/dubbo-3.x-conflict-patch-8.13.0.jar rename to docker/skywalking/agent/plugins/dubbo-3.x-conflict-patch-8.14.0.jar index fbace1b5d..c35f8d509 100644 Binary files a/docker/skywalking/agent/plugins/dubbo-3.x-conflict-patch-8.13.0.jar and b/docker/skywalking/agent/plugins/dubbo-3.x-conflict-patch-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/dubbo-conflict-patch-8.13.0.jar b/docker/skywalking/agent/plugins/dubbo-conflict-patch-8.14.0.jar similarity index 67% rename from docker/skywalking/agent/plugins/dubbo-conflict-patch-8.13.0.jar rename to docker/skywalking/agent/plugins/dubbo-conflict-patch-8.14.0.jar index 18121acfa..576a2d30f 100644 Binary files a/docker/skywalking/agent/plugins/dubbo-conflict-patch-8.13.0.jar and b/docker/skywalking/agent/plugins/dubbo-conflict-patch-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/graphql-12.x-15.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/graphql-12.x-15.x-plugin-8.14.0.jar similarity index 59% rename from docker/skywalking/agent/plugins/graphql-12.x-15.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/graphql-12.x-15.x-plugin-8.14.0.jar index 7d02ba042..4c72e402f 100644 Binary files a/docker/skywalking/agent/plugins/graphql-12.x-15.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/graphql-12.x-15.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/graphql-16plus-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/graphql-16plus-plugin-8.14.0.jar similarity index 63% rename from docker/skywalking/agent/plugins/graphql-16plus-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/graphql-16plus-plugin-8.14.0.jar index 0a4ae6538..1b1d8fda4 100644 Binary files a/docker/skywalking/agent/plugins/graphql-16plus-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/graphql-16plus-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/graphql-8.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/graphql-8.x-plugin-8.14.0.jar similarity index 54% rename from docker/skywalking/agent/plugins/graphql-8.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/graphql-8.x-plugin-8.14.0.jar index 54b305036..897fda075 100644 Binary files a/docker/skywalking/agent/plugins/graphql-8.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/graphql-8.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/graphql-9.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/graphql-9.x-plugin-8.14.0.jar similarity index 59% rename from docker/skywalking/agent/plugins/graphql-9.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/graphql-9.x-plugin-8.14.0.jar index 63b31045e..3e8744364 100644 Binary files a/docker/skywalking/agent/plugins/graphql-9.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/graphql-9.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/spring-commons-8.13.0.jar b/docker/skywalking/agent/plugins/spring-commons-8.13.0.jar deleted file mode 100644 index 54365c481..000000000 Binary files a/docker/skywalking/agent/plugins/spring-commons-8.13.0.jar and /dev/null differ diff --git a/docker/skywalking/agent/plugins/spring-commons-8.14.0.jar b/docker/skywalking/agent/plugins/spring-commons-8.14.0.jar new file mode 100644 index 000000000..2dd60912c Binary files /dev/null and b/docker/skywalking/agent/plugins/spring-commons-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/spring-webflux-5.x-webclient-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/spring-webflux-5.x-webclient-plugin-8.14.0.jar similarity index 62% rename from docker/skywalking/agent/plugins/spring-webflux-5.x-webclient-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/spring-webflux-5.x-webclient-plugin-8.14.0.jar index 00d910952..9eeec81a6 100644 Binary files a/docker/skywalking/agent/plugins/spring-webflux-5.x-webclient-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/spring-webflux-5.x-webclient-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/thrift-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/thrift-plugin-8.14.0.jar similarity index 63% rename from docker/skywalking/agent/plugins/thrift-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/thrift-plugin-8.14.0.jar index 1b64da9c8..ba9282cbf 100644 Binary files a/docker/skywalking/agent/plugins/thrift-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/thrift-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/tomcat-10x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/tomcat-10x-plugin-8.14.0.jar similarity index 56% rename from docker/skywalking/agent/plugins/tomcat-10x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/tomcat-10x-plugin-8.14.0.jar index 3d243648d..5f3ef7bcf 100644 Binary files a/docker/skywalking/agent/plugins/tomcat-10x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/tomcat-10x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/plugins/tomcat-7.x-8.x-plugin-8.13.0.jar b/docker/skywalking/agent/plugins/tomcat-7.x-8.x-plugin-8.14.0.jar similarity index 51% rename from docker/skywalking/agent/plugins/tomcat-7.x-8.x-plugin-8.13.0.jar rename to docker/skywalking/agent/plugins/tomcat-7.x-8.x-plugin-8.14.0.jar index a1c0273a0..8f17f1d96 100644 Binary files a/docker/skywalking/agent/plugins/tomcat-7.x-8.x-plugin-8.13.0.jar and b/docker/skywalking/agent/plugins/tomcat-7.x-8.x-plugin-8.14.0.jar differ diff --git a/docker/skywalking/agent/skywalking-agent.jar b/docker/skywalking/agent/skywalking-agent.jar index 72ce3c326..e9fef5359 100644 Binary files a/docker/skywalking/agent/skywalking-agent.jar and b/docker/skywalking/agent/skywalking-agent.jar differ diff --git a/pom.xml b/pom.xml index cd066c2ef..6a03abd4c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,19 +6,19 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 RuoYi-Cloud-Plus https://gitee.com/JavaLionLi/RuoYi-Cloud-Plus RuoYi-Cloud-Plus微服务系统 - 1.5.0 + 1.6.0 UTF-8 UTF-8 1.8 - 2.7.7 - 2021.0.5 + 2.7.9 + 2021.0.6 2.7.10 2.2.2 3.5.10 @@ -26,20 +26,21 @@ 3.9.1 3.5.2 2.3 - 2.2.7 - 1.6.14 + 2.2.8 + 1.6.15 5.2.3 - 3.1.5 - 5.8.11 - 3.19.1 + 3.2.1 + 5.8.15 + 3.20.0 2.2.3 2.3.1 1.34.0 1.18.24 - 7.1.1 + 7.2 1.1.1 7.14.0 - 8.13.0 + 8.14.0 + 1.72 1.33 @@ -47,12 +48,12 @@ 1.2.83 - 1.12.373 + 1.12.400 4.10.0 2.0.23 - 3.1.660 + 3.1.687 @@ -268,6 +269,13 @@ ${xxl-job.version} + + + org.bouncycastle + bcprov-jdk15to18 + ${bouncycastle.version} + + net.logstash.logback diff --git a/ruoyi-api/pom.xml b/ruoyi-api/pom.xml index 9c6744a22..f8ceb81bd 100644 --- a/ruoyi-api/pom.xml +++ b/ruoyi-api/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-api/ruoyi-api-bom/pom.xml b/ruoyi-api/ruoyi-api-bom/pom.xml index 0cc5ef5f5..a1aef5c43 100644 --- a/ruoyi-api/ruoyi-api-bom/pom.xml +++ b/ruoyi-api/ruoyi-api-bom/pom.xml @@ -8,7 +8,7 @@ com.ruoyi ruoyi-api-bom pom - 1.5.0 + 1.6.0 ruoyi-api-bom api依赖项 diff --git a/ruoyi-api/ruoyi-api-resource/pom.xml b/ruoyi-api/ruoyi-api-resource/pom.xml index 3c42a37e0..eb3d4e149 100644 --- a/ruoyi-api/ruoyi-api-resource/pom.xml +++ b/ruoyi-api/ruoyi-api-resource/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-api - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java b/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java index 1bcad8e5a..e63242282 100644 --- a/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java +++ b/ruoyi-api/ruoyi-api-resource/src/main/java/com/ruoyi/resource/api/RemoteFileService.java @@ -17,4 +17,13 @@ public interface RemoteFileService { * @return 结果 */ SysFile upload(String name, String originalFilename, String contentType, byte[] file) throws ServiceException; + + /** + * 通过ossId查询对应的url + * + * @param ossIds ossId串逗号分隔 + * @return url串逗号分隔 + */ + String selectUrlByIds(String ossIds); + } diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml index bb9084ced..6ea64c521 100644 --- a/ruoyi-api/ruoyi-api-system/pom.xml +++ b/ruoyi-api/ruoyi-api-system/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-api - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java new file mode 100644 index 000000000..c6ef9addd --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteDeptService.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.api; + +/** + * 部门服务 + * + * @author Lion Li + */ +public interface RemoteDeptService { + + /** + * 通过部门ID查询部门名称 + * + * @param deptIds 部门ID串逗号分隔 + * @return 部门名称串逗号分隔 + */ + String selectDeptNameByIds(String deptIds); + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java index 22cea2772..3589a3c84 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java @@ -44,4 +44,11 @@ public interface RemoteUserService { */ Boolean registerUserInfo(SysUser sysUser); + /** + * 通过userId查询用户账户 + * + * @param userId 用户id + * @return 结果 + */ + String selectUserNameById(Long userId); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java index 523ed46b7..d9e5fecd4 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysRole.java @@ -115,12 +115,6 @@ public class SysRole extends BaseEntity { @TableField(exist = false) private Long[] deptIds; - /** - * 角色菜单权限 - */ - @TableField(exist = false) - private Set permissions; - public SysRole(Long roleId) { this.roleId = roleId; } diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml index 849e172ac..532ed3f5d 100644 --- a/ruoyi-auth/pom.xml +++ b/ruoyi-auth/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 53b3fd3a0..37f448784 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -1,10 +1,10 @@ package com.ruoyi.auth.controller; -import com.alibaba.nacos.api.common.Constants; import com.ruoyi.auth.form.LoginBody; import com.ruoyi.auth.form.RegisterBody; import com.ruoyi.auth.form.SmsLoginBody; import com.ruoyi.auth.service.SysLoginService; +import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.domain.R; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; @@ -38,8 +38,8 @@ public class TokenController { String accessToken = sysLoginService.login(form.getUsername(), form.getPassword()); // 接口返回信息 - Map rspMap = new HashMap(); - rspMap.put("access_token", accessToken); + Map rspMap = new HashMap<>(); + rspMap.put(Constants.ACCESS_TOKEN, accessToken); return R.ok(rspMap); } @@ -54,7 +54,7 @@ public class TokenController { Map ajax = new HashMap<>(); // 生成令牌 String token = sysLoginService.smsLogin(smsLoginBody.getPhonenumber(), smsLoginBody.getSmsCode()); - ajax.put(Constants.TOKEN, token); + ajax.put(Constants.ACCESS_TOKEN, token); return R.ok(ajax); } @@ -69,7 +69,7 @@ public class TokenController { Map ajax = new HashMap<>(); // 生成令牌 String token = sysLoginService.xcxLogin(xcxCode); - ajax.put(Constants.TOKEN, token); + ajax.put(Constants.ACCESS_TOKEN, token); return R.ok(ajax); } diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index c2595a09a..d89383469 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 4.0.0 @@ -34,6 +34,8 @@ ruoyi-common-sentinel ruoyi-common-skylog ruoyi-common-prometheus + ruoyi-common-translation + ruoyi-common-encrypt ruoyi-common diff --git a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml index 3f48a6143..802098e7c 100644 --- a/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-alibaba-bom/pom.xml @@ -6,7 +6,7 @@ com.ruoyi ruoyi-common-alibaba-bom - 1.5.0 + 1.6.0 pom @@ -18,7 +18,7 @@ 1.8.6 1.6.1 2.2.0 - 3.1.4 + 3.1.7 1.0.11 diff --git a/ruoyi-common/ruoyi-common-bom/pom.xml b/ruoyi-common/ruoyi-common-bom/pom.xml index 515abe4f3..285258784 100644 --- a/ruoyi-common/ruoyi-common-bom/pom.xml +++ b/ruoyi-common/ruoyi-common-bom/pom.xml @@ -6,7 +6,7 @@ com.ruoyi ruoyi-common-bom - 1.5.0 + 1.6.0 pom @@ -161,6 +161,19 @@ ruoyi-common-prometheus ${project.version} + + + com.ruoyi + ruoyi-common-translation + ${project.version} + + + + com.ruoyi + ruoyi-common-encrypt + ${project.version} + + diff --git a/ruoyi-common/ruoyi-common-core/pom.xml b/ruoyi-common/ruoyi-common-core/pom.xml index 37fca7942..69b521324 100644 --- a/ruoyi-common/ruoyi-common-core/pom.xml +++ b/ruoyi-common/ruoyi-common-core/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java index ba09e9c41..b0d657375 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheNames.java @@ -30,6 +30,16 @@ public interface CacheNames { */ String SYS_DICT = "sys_dict"; + /** + * 用户账户 + */ + String SYS_USER_NAME = "sys_user_name#30d"; + + /** + * 部门 + */ + String SYS_DEPT = "sys_dept#30d"; + /** * OSS内容 */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java index f99c885c6..5ff91af42 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java @@ -81,4 +81,6 @@ public interface Constants { */ String REPEAT_SUBMIT_KEY = "repeat_submit:"; + String ACCESS_TOKEN = "access_token"; + } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java deleted file mode 100644 index 8a04fcb9e..000000000 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.ruoyi.common.core.constant; - -/** - * 权限相关通用常量 - * - * @author Lion Li - */ -public interface SecurityConstants { - /** - * 用户ID字段 - */ - String DETAILS_USER_ID = "user_id"; - - /** - * 用户名字段 - */ - String DETAILS_USERNAME = "username"; - - /** - * 授权信息字段 - */ - String AUTHORIZATION_HEADER = "authorization"; - - /** - * 请求来源 - */ - String FROM_SOURCE = "from-source"; - - /** - * 内部请求 - */ - String INNER = "inner"; - - /** - * 用户标识 - */ - String USER_KEY = "user_key"; - - /** - * 登录用户 - */ - String LOGIN_USER = "login_user"; -} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java deleted file mode 100644 index f70eb57d8..000000000 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/ServiceNameConstants.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ruoyi.common.core.constant; - -/** - * 服务名称 - * - * @author Lion Li - */ -public interface ServiceNameConstants { - - String AUTH_SERVICE = "ruoyi-auth"; - String SYSTEM_SERVICE = "ruoyi-system"; - String FILE_SERVICE = "ruoyi-file"; -} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java index 2eab20c73..a02ba4f2b 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/UserConstants.java @@ -111,13 +111,6 @@ public interface UserConstants { */ String INNER_LINK = "InnerLink"; - /** - * 校验返回结果码 - */ - String UNIQUE = "0"; - - String NOT_UNIQUE = "1"; - /** * 用户名长度限制 */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/service/DictService.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/service/DictService.java index 2b649fcfc..4b4267764 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/service/DictService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/service/DictService.java @@ -1,5 +1,7 @@ package com.ruoyi.common.core.service; +import com.ruoyi.common.core.utils.StringUtils; + /** * 字典服务服务 * @@ -7,11 +9,6 @@ package com.ruoyi.common.core.service; */ public interface DictService { - /** - * 分隔符 - */ - String SEPARATOR = ","; - /** * 根据字典类型和字典值获取字典标签 * @@ -20,7 +17,7 @@ public interface DictService { * @return 字典标签 */ default String getDictLabel(String dictType, String dictValue) { - return getDictLabel(dictType, dictValue, SEPARATOR); + return getDictLabel(dictType, dictValue, StringUtils.SEPARATOR); } /** @@ -31,7 +28,7 @@ public interface DictService { * @return 字典值 */ default String getDictValue(String dictType, String dictLabel) { - return getDictValue(dictType, dictLabel, SEPARATOR); + return getDictValue(dictType, dictLabel, StringUtils.SEPARATOR); } /** diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java index 4ae00a295..1c5662c28 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ServletUtils.java @@ -96,7 +96,7 @@ public class ServletUtils extends ServletUtil { public static Map getParamMap(ServletRequest request) { Map params = new HashMap<>(); for (Map.Entry entry : getParams(request).entrySet()) { - params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + params.put(entry.getKey(), StringUtils.join(entry.getValue(), StringUtils.SEPARATOR)); } return params; } diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StreamUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StreamUtils.java index 8a9a55613..27fd05733 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StreamUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StreamUtils.java @@ -42,7 +42,7 @@ public class StreamUtils { * @return 拼接后的list */ public static String join(Collection collection, Function function) { - return join(collection, function, ","); + return join(collection, function, StringUtils.SEPARATOR); } /** diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java index e2bbbb2c9..3f0c1b46f 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/StringUtils.java @@ -1,16 +1,16 @@ package com.ruoyi.common.core.utils; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Validator; import cn.hutool.core.util.StrUtil; import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.springframework.util.AntPathMatcher; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 字符串工具类 @@ -20,237 +20,238 @@ import java.util.Set; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class StringUtils extends org.apache.commons.lang3.StringUtils { - /** - * 获取参数不为空值 - * - * @param str defaultValue 要判断的value - * @return value 返回值 - */ - public static String blankToDefault(String str, String defaultValue) { - return StrUtil.blankToDefault(str, defaultValue); - } + public static final String SEPARATOR = ","; - /** - * * 判断一个字符串是否为空串 - * - * @param str String - * @return true:为空 false:非空 - */ - public static boolean isEmpty(String str) { - return StrUtil.isEmpty(str); - } + /** + * 获取参数不为空值 + * + * @param str defaultValue 要判断的value + * @return value 返回值 + */ + public static String blankToDefault(String str, String defaultValue) { + return StrUtil.blankToDefault(str, defaultValue); + } - /** - * * 判断一个字符串是否为非空串 - * - * @param str String - * @return true:非空串 false:空串 - */ - public static boolean isNotEmpty(String str) { - return !isEmpty(str); - } + /** + * * 判断一个字符串是否为空串 + * + * @param str String + * @return true:为空 false:非空 + */ + public static boolean isEmpty(String str) { + return StrUtil.isEmpty(str); + } - /** - * 去空格 - */ - public static String trim(String str) { - return StrUtil.trim(str); - } + /** + * * 判断一个字符串是否为非空串 + * + * @param str String + * @return true:非空串 false:空串 + */ + public static boolean isNotEmpty(String str) { + return !isEmpty(str); + } - /** - * 截取字符串 - * - * @param str 字符串 - * @param start 开始 - * @return 结果 - */ - public static String substring(final String str, int start) { - return substring(str, start, str.length()); - } + /** + * 去空格 + */ + public static String trim(String str) { + return StrUtil.trim(str); + } - /** - * 截取字符串 - * - * @param str 字符串 - * @param start 开始 - * @param end 结束 - * @return 结果 - */ - public static String substring(final String str, int start, int end) { - return StrUtil.sub(str, start, end); - } + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @return 结果 + */ + public static String substring(final String str, int start) { + return substring(str, start, str.length()); + } - /** - * 格式化文本, {} 表示占位符
- * 此方法只是简单将占位符 {} 按照顺序替换为参数
- * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
- * 例:
- * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
- * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
- * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
- * - * @param template 文本模板,被替换的部分用 {} 表示 - * @param params 参数值 - * @return 格式化后的文本 - */ - public static String format(String template, Object... params) { - return StrUtil.format(template, params); - } + /** + * 截取字符串 + * + * @param str 字符串 + * @param start 开始 + * @param end 结束 + * @return 结果 + */ + public static String substring(final String str, int start, int end) { + return StrUtil.sub(str, start, end); + } - /** - * 是否为http(s)://开头 - * - * @param link 链接 - * @return 结果 - */ - public static boolean ishttp(String link) { - return Validator.isUrl(link); - } + /** + * 格式化文本, {} 表示占位符
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is {} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 文本模板,被替换的部分用 {} 表示 + * @param params 参数值 + * @return 格式化后的文本 + */ + public static String format(String template, Object... params) { + return StrUtil.format(template, params); + } - /** - * 字符串转set - * - * @param str 字符串 - * @param sep 分隔符 - * @return set集合 - */ - public static Set str2Set(String str, String sep) { - return new HashSet<>(str2List(str, sep, true, false)); - } + /** + * 是否为http(s)://开头 + * + * @param link 链接 + * @return 结果 + */ + public static boolean ishttp(String link) { + return Validator.isUrl(link); + } - /** - * 字符串转list - * - * @param str 字符串 - * @param sep 分隔符 - * @param filterBlank 过滤纯空白 - * @param trim 去掉首尾空白 - * @return list集合 - */ - public static List str2List(String str, String sep, boolean filterBlank, boolean trim) { - List list = new ArrayList<>(); - if (isEmpty(str)) { - return list; - } + /** + * 字符串转set + * + * @param str 字符串 + * @param sep 分隔符 + * @return set集合 + */ + public static Set str2Set(String str, String sep) { + return new HashSet<>(str2List(str, sep, true, false)); + } - // 过滤空白字符串 - if (filterBlank && isBlank(str)) { - return list; - } - String[] split = str.split(sep); - for (String string : split) { - if (filterBlank && isBlank(string)) { - continue; - } - if (trim) { - string = trim(string); - } - list.add(string); - } + /** + * 字符串转list + * + * @param str 字符串 + * @param sep 分隔符 + * @param filterBlank 过滤纯空白 + * @param trim 去掉首尾空白 + * @return list集合 + */ + public static List str2List(String str, String sep, boolean filterBlank, boolean trim) { + List list = new ArrayList<>(); + if (isEmpty(str)) { + return list; + } - return list; - } + // 过滤空白字符串 + if (filterBlank && isBlank(str)) { + return list; + } + String[] split = str.split(sep); + for (String string : split) { + if (filterBlank && isBlank(string)) { + continue; + } + if (trim) { + string = trim(string); + } + list.add(string); + } - /** - * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 - * - * @param cs 指定字符串 - * @param searchCharSequences 需要检查的字符串数组 - * @return 是否包含任意一个字符串 - */ - public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) { - return StrUtil.containsAnyIgnoreCase(cs, searchCharSequences); - } + return list; + } - /** - * 驼峰转下划线命名 - */ - public static String toUnderScoreCase(String str) { - return StrUtil.toUnderlineCase(str); - } + /** + * 查找指定字符串是否包含指定字符串列表中的任意一个字符串同时串忽略大小写 + * + * @param cs 指定字符串 + * @param searchCharSequences 需要检查的字符串数组 + * @return 是否包含任意一个字符串 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) { + return StrUtil.containsAnyIgnoreCase(cs, searchCharSequences); + } - /** - * 是否包含字符串 - * - * @param str 验证字符串 - * @param strs 字符串组 - * @return 包含返回true - */ - public static boolean inStringIgnoreCase(String str, String... strs) { - return StrUtil.equalsAnyIgnoreCase(str, strs); - } + /** + * 驼峰转下划线命名 + */ + public static String toUnderScoreCase(String str) { + return StrUtil.toUnderlineCase(str); + } - /** - * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld - * - * @param name 转换前的下划线大写方式命名的字符串 - * @return 转换后的驼峰式命名的字符串 - */ - public static String convertToCamelCase(String name) { - return StrUtil.upperFirst(StrUtil.toCamelCase(name)); - } + /** + * 是否包含字符串 + * + * @param str 验证字符串 + * @param strs 字符串组 + * @return 包含返回true + */ + public static boolean inStringIgnoreCase(String str, String... strs) { + return StrUtil.equalsAnyIgnoreCase(str, strs); + } - /** - * 驼峰式命名法 例如:user_name->userName - */ - public static String toCamelCase(String s) { - return StrUtil.toCamelCase(s); - } + /** + * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld + * + * @param name 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String convertToCamelCase(String name) { + return StrUtil.upperFirst(StrUtil.toCamelCase(name)); + } - /** - * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 - * - * @param str 指定字符串 - * @param strs 需要检查的字符串数组 - * @return 是否匹配 - */ - public static boolean matches(String str, List strs) { - if (isEmpty(str) || CollUtil.isEmpty(strs)) { - return false; - } - for (String pattern : strs) { - if (isMatch(pattern, str)) { - return true; - } - } - return false; - } + /** + * 驼峰式命名法 例如:user_name->userName + */ + public static String toCamelCase(String s) { + return StrUtil.toCamelCase(s); + } - /** - * 判断url是否与规则配置: - * ? 表示单个字符; - * * 表示一层路径内的任意字符串,不可跨层级; - * ** 表示任意层路径; - * - * @param pattern 匹配规则 - * @param url 需要匹配的url - * @return - */ - public static boolean isMatch(String pattern, String url) { - AntPathMatcher matcher = new AntPathMatcher(); - return matcher.match(pattern, url); - } + /** + * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 + * + * @param str 指定字符串 + * @param strs 需要检查的字符串数组 + * @return 是否匹配 + */ + public static boolean matches(String str, List strs) { + if (isEmpty(str) || CollUtil.isEmpty(strs)) { + return false; + } + for (String pattern : strs) { + if (isMatch(pattern, str)) { + return true; + } + } + return false; + } + + /** + * 判断url是否与规则配置: + * ? 表示单个字符; + * * 表示一层路径内的任意字符串,不可跨层级; + * ** 表示任意层路径; + * + * @param pattern 匹配规则 + * @param url 需要匹配的url + */ + public static boolean isMatch(String pattern, String url) { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } /** * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 * - * @param num 数字对象 + * @param num 数字对象 * @param size 字符串指定长度 * @return 返回数字的字符串格式,该字符串为指定长度。 */ - public static final String padl(final Number num, final int size) { + public static String padl(final Number num, final int size) { return padl(num.toString(), size, '0'); } /** * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 * - * @param s 原始字符串 + * @param s 原始字符串 * @param size 字符串指定长度 - * @param c 用于补齐的字符 + * @param c 用于补齐的字符 * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 */ - public static final String padl(final String s, final int size, final char c) { + public static String padl(final String s, final int size, final char c) { final StringBuilder sb = new StringBuilder(size); if (s != null) { final int len = s.length(); @@ -270,4 +271,55 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { return sb.toString(); } + /** + * 切分字符串(分隔符默认逗号) + * + * @param str 被切分的字符串 + * @return 分割后的数据列表 + */ + public static List splitList(String str) { + return splitTo(str, Convert::toStr); + } + + /** + * 切分字符串 + * + * @param str 被切分的字符串 + * @param separator 分隔符 + * @return 分割后的数据列表 + */ + public static List splitList(String str, String separator) { + return splitTo(str, separator, Convert::toStr); + } + + /** + * 切分字符串自定义转换(分隔符默认逗号) + * + * @param str 被切分的字符串 + * @param mapper 自定义转换 + * @return 分割后的数据列表 + */ + public static List splitTo(String str, Function mapper) { + return splitTo(str, SEPARATOR, mapper); + } + + /** + * 切分字符串自定义转换 + * + * @param str 被切分的字符串 + * @param separator 分隔符 + * @param mapper 自定义转换 + * @return 分割后的数据列表 + */ + public static List splitTo(String str, String separator, Function mapper) { + if (isBlank(str)) { + return new ArrayList<>(0); + } + return StrUtil.split(str, separator) + .stream() + .filter(Objects::nonNull) + .map(mapper) + .collect(Collectors.toList()); + } + } diff --git a/ruoyi-common/ruoyi-common-dict/pom.xml b/ruoyi-common/ruoyi-common-dict/pom.xml index 65211857b..c7f672a06 100644 --- a/ruoyi-common/ruoyi-common-dict/pom.xml +++ b/ruoyi-common/ruoyi-common-dict/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/annotation/DictDataMapper.java b/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/annotation/DictDataMapper.java index c005bd790..c90e4f0bb 100644 --- a/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/annotation/DictDataMapper.java +++ b/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/annotation/DictDataMapper.java @@ -13,7 +13,9 @@ import java.lang.annotation.Target; * 字典数据映射注解 * * @author itino + * @deprecated 建议使用通用翻译注解 */ +@Deprecated @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD, ElementType.METHOD}) @JacksonAnnotationsInside diff --git a/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/jackson/DictDataJsonSerializer.java b/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/jackson/DictDataJsonSerializer.java index f6d900b73..fbe8b9af2 100644 --- a/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/jackson/DictDataJsonSerializer.java +++ b/ruoyi-common/ruoyi-common-dict/src/main/java/com/ruoyi/common/dict/jackson/DictDataJsonSerializer.java @@ -22,7 +22,9 @@ import java.util.Objects; * 字典数据json序列化工具 * * @author itino + * @deprecated 建议使用通用翻译注解 */ +@Deprecated @Slf4j public class DictDataJsonSerializer extends JsonSerializer implements ContextualSerializer { diff --git a/ruoyi-common/ruoyi-common-doc/pom.xml b/ruoyi-common/ruoyi-common-doc/pom.xml index d90eb4daf..a18b664f0 100644 --- a/ruoyi-common/ruoyi-common-doc/pom.xml +++ b/ruoyi-common/ruoyi-common-doc/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/SwaggerAutoConfiguration.java b/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/SwaggerAutoConfiguration.java index 272158d28..5ec4252de 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/SwaggerAutoConfiguration.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/SwaggerAutoConfiguration.java @@ -31,7 +31,7 @@ import java.util.*; @RequiredArgsConstructor @AutoConfiguration(before = SpringDocConfiguration.class) @EnableConfigurationProperties(SwaggerProperties.class) -@ConditionalOnProperty(name = "swagger.enabled", havingValue = "true", matchIfMissing = true) +@ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = true) public class SwaggerAutoConfiguration { private final SwaggerProperties swaggerProperties; diff --git a/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/properties/SwaggerProperties.java b/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/properties/SwaggerProperties.java index 53353f812..7cb92fe8b 100644 --- a/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/properties/SwaggerProperties.java +++ b/ruoyi-common/ruoyi-common-doc/src/main/java/com/ruoyi/common/doc/config/properties/SwaggerProperties.java @@ -22,11 +22,6 @@ import java.util.Map; @ConfigurationProperties(prefix = "swagger") public class SwaggerProperties { - /** - * 是否开启 openApi 文档 - */ - private Boolean enabled = true; - /** * 文档基本信息 */ diff --git a/ruoyi-common/ruoyi-common-dubbo/pom.xml b/ruoyi-common/ruoyi-common-dubbo/pom.xml index ec21e79e6..c0a93754f 100644 --- a/ruoyi-common/ruoyi-common-dubbo/pom.xml +++ b/ruoyi-common/ruoyi-common-dubbo/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-elasticsearch/pom.xml b/ruoyi-common/ruoyi-common-elasticsearch/pom.xml index 305b503c4..212a91c92 100644 --- a/ruoyi-common/ruoyi-common-elasticsearch/pom.xml +++ b/ruoyi-common/ruoyi-common-elasticsearch/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-encrypt/pom.xml b/ruoyi-common/ruoyi-common-encrypt/pom.xml new file mode 100644 index 000000000..c5aa3b58a --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/pom.xml @@ -0,0 +1,37 @@ + + + + com.ruoyi + ruoyi-common + 1.6.0 + + 4.0.0 + + ruoyi-common-encrypt + + + ruoyi-common-encrypt 数据加解密模块 + + + + + + com.ruoyi + ruoyi-common-core + + + + org.bouncycastle + bcprov-jdk15to18 + + + + cn.hutool + hutool-crypto + + + + + diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/annotation/EncryptField.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/annotation/EncryptField.java new file mode 100644 index 000000000..f549a6a8e --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/annotation/EncryptField.java @@ -0,0 +1,44 @@ +package com.ruoyi.common.encrypt.annotation; + +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + +import java.lang.annotation.*; + +/** + * 字段加密注解 + * + * @author 老马 + */ +@Documented +@Inherited +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +public @interface EncryptField { + + /** + * 加密算法 + */ + AlgorithmType algorithm() default AlgorithmType.DEFAULT; + + /** + * 秘钥。AES、SM4需要 + */ + String password() default ""; + + /** + * 公钥。RSA、SM2需要 + */ + String publicKey() default ""; + + /** + * 公钥。RSA、SM2需要 + */ + String privateKey() default ""; + + /** + * 编码方式。对加密算法为BASE64的不起作用 + */ + EncodeType encode() default EncodeType.DEFAULT; + +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/config/EncryptorAutoConfiguration.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/config/EncryptorAutoConfiguration.java new file mode 100644 index 000000000..55be902db --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/config/EncryptorAutoConfiguration.java @@ -0,0 +1,41 @@ +package com.ruoyi.common.encrypt.config; + +import com.ruoyi.common.encrypt.core.EncryptorManager; +import com.ruoyi.common.encrypt.interceptor.MybatisDecryptInterceptor; +import com.ruoyi.common.encrypt.interceptor.MybatisEncryptInterceptor; +import com.ruoyi.common.encrypt.properties.EncryptorProperties; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfiguration; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +/** + * 加解密配置 + * + * @author 老马 + * @version 4.6.0 + */ +@AutoConfiguration +@EnableConfigurationProperties(EncryptorProperties.class) +@ConditionalOnProperty(value = "mybatis-encryptor.enable", havingValue = "true") +public class EncryptorAutoConfiguration { + + @Autowired + private EncryptorProperties properties; + + @Bean + public EncryptorManager encryptorManager() { + return new EncryptorManager(); + } + + @Bean + public MybatisEncryptInterceptor mybatisEncryptInterceptor(EncryptorManager encryptorManager) { + return new MybatisEncryptInterceptor(encryptorManager, properties); + } + + @Bean + public MybatisDecryptInterceptor mybatisDecryptInterceptor(EncryptorManager encryptorManager) { + return new MybatisDecryptInterceptor(encryptorManager, properties); + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/EncryptContext.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/EncryptContext.java new file mode 100644 index 000000000..ff3825488 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/EncryptContext.java @@ -0,0 +1,41 @@ +package com.ruoyi.common.encrypt.core; + +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; +import lombok.Data; + +/** + * 加密上下文 用于encryptor传递必要的参数。 + * + * @author 老马 + * @version 4.6.0 + */ +@Data +public class EncryptContext { + + /** + * 默认算法 + */ + private AlgorithmType algorithm; + + /** + * 安全秘钥 + */ + private String password; + + /** + * 公钥 + */ + private String publicKey; + + /** + * 私钥 + */ + private String privateKey; + + /** + * 编码方式,base64/hex + */ + private EncodeType encode; + +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/EncryptorManager.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/EncryptorManager.java new file mode 100644 index 000000000..d86eb71ad --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/EncryptorManager.java @@ -0,0 +1,94 @@ +package com.ruoyi.common.encrypt.core; + +import cn.hutool.core.util.ReflectUtil; +import com.ruoyi.common.encrypt.annotation.EncryptField; +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 加密管理类 + * + * @author 老马 + * @version 4.6.0 + */ +@Slf4j +public class EncryptorManager { + + /** + * 缓存加密器 + */ + Map encryptorMap = new ConcurrentHashMap<>(); + + /** + * 类加密字段缓存 + */ + Map, Set> fieldCache = new ConcurrentHashMap<>(); + + /** + * 获取类加密字段缓存 + */ + public Set getFieldCache(Class sourceClazz) { + return fieldCache.computeIfAbsent(sourceClazz, clazz -> { + Field[] declaredFields = clazz.getDeclaredFields(); + Set fieldSet = Arrays.stream(declaredFields).filter(field -> + field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class) + .collect(Collectors.toSet()); + for (Field field : fieldSet) { + field.setAccessible(true); + } + return fieldSet; + }); + } + + /** + * 注册加密执行者到缓存 + * + * @param encryptContext 加密执行者需要的相关配置参数 + */ + public IEncryptor registAndGetEncryptor(EncryptContext encryptContext) { + if (encryptorMap.containsKey(encryptContext)) { + return encryptorMap.get(encryptContext); + } + IEncryptor encryptor = ReflectUtil.newInstance(encryptContext.getAlgorithm().getClazz(), encryptContext); + encryptorMap.put(encryptContext, encryptor); + return encryptor; + } + + /** + * 移除缓存中的加密执行者 + * + * @param encryptContext 加密执行者需要的相关配置参数 + */ + public void removeEncryptor(EncryptContext encryptContext) { + this.encryptorMap.remove(encryptContext); + } + + /** + * 根据配置进行加密。会进行本地缓存对应的算法和对应的秘钥信息。 + * + * @param value 待加密的值 + * @param encryptContext 加密相关的配置信息 + */ + public String encrypt(String value, EncryptContext encryptContext) { + IEncryptor encryptor = this.registAndGetEncryptor(encryptContext); + return encryptor.encrypt(value, encryptContext.getEncode()); + } + + /** + * 根据配置进行解密 + * + * @param value 待解密的值 + * @param encryptContext 加密相关的配置信息 + */ + public String decrypt(String value, EncryptContext encryptContext) { + IEncryptor encryptor = this.registAndGetEncryptor(encryptContext); + return encryptor.decrypt(value); + } + +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/IEncryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/IEncryptor.java new file mode 100644 index 000000000..d9642c0d1 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/IEncryptor.java @@ -0,0 +1,35 @@ +package com.ruoyi.common.encrypt.core; + +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + +/** + * 加解者 + * + * @author 老马 + * @version 4.6.0 + */ +public interface IEncryptor { + + /** + * 获得当前算法 + */ + AlgorithmType algorithm(); + + /** + * 加密 + * + * @param value 待加密字符串 + * @param encodeType 加密后的编码格式 + * @return 加密后的字符串 + */ + String encrypt(String value, EncodeType encodeType); + + /** + * 解密 + * + * @param value 待加密字符串 + * @return 解密后的字符串 + */ + String decrypt(String value); +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/AbstractEncryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/AbstractEncryptor.java new file mode 100644 index 000000000..b068ce77a --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/AbstractEncryptor.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.encrypt.core.encryptor; + +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.core.IEncryptor; + +/** + * 所有加密执行者的基类 + * + * @author 老马 + * @version 4.6.0 + */ +public abstract class AbstractEncryptor implements IEncryptor { + + public AbstractEncryptor(EncryptContext context) { + // 用户配置校验与配置注入 + } + +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/AesEncryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/AesEncryptor.java new file mode 100644 index 000000000..ea89d2cb7 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/AesEncryptor.java @@ -0,0 +1,69 @@ +package com.ruoyi.common.encrypt.core.encryptor; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.symmetric.AES; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + +import java.nio.charset.StandardCharsets; + +/** + * AES算法实现 + * + * @author 老马 + * @version 4.6.0 + */ +public class AesEncryptor extends AbstractEncryptor { + + private final AES aes; + + public AesEncryptor(EncryptContext context) { + super(context); + String password = context.getPassword(); + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("AES没有获得秘钥信息"); + } + // aes算法的秘钥要求是16位、24位、32位 + int[] array = {16, 24, 32}; + if (!ArrayUtil.contains(array, password.length())) { + throw new IllegalArgumentException("AES秘钥长度应该为16位、24位、32位,实际为" + password.length() + "位"); + } + aes = SecureUtil.aes(context.getPassword().getBytes(StandardCharsets.UTF_8)); + } + + /** + * 获得当前算法 + */ + @Override + public AlgorithmType algorithm() { + return AlgorithmType.AES; + } + + /** + * 加密 + * + * @param value 待加密字符串 + * @param encodeType 加密后的编码格式 + */ + @Override + public String encrypt(String value, EncodeType encodeType) { + if (encodeType == EncodeType.HEX) { + return aes.encryptHex(value); + } else { + return aes.encryptBase64(value); + } + } + + /** + * 解密 + * + * @param value 待加密字符串 + */ + @Override + public String decrypt(String value) { + return this.aes.decryptStr(value); + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Base64Encryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Base64Encryptor.java new file mode 100644 index 000000000..70f3e0026 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Base64Encryptor.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.encrypt.core.encryptor; + +import cn.hutool.core.codec.Base64; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + +/** + * Base64算法实现 + * + * @author 老马 + * @version 4.6.0 + */ +public class Base64Encryptor extends AbstractEncryptor { + + public Base64Encryptor(EncryptContext context) { + super(context); + } + + /** + * 获得当前算法 + */ + @Override + public AlgorithmType algorithm() { + return AlgorithmType.BASE64; + } + + /** + * 加密 + * + * @param value 待加密字符串 + * @param encodeType 加密后的编码格式 + */ + @Override + public String encrypt(String value, EncodeType encodeType) { + return Base64.encode(value); + } + + /** + * 解密 + * + * @param value 待加密字符串 + */ + @Override + public String decrypt(String value) { + return Base64.decodeStr(value); + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/RsaEncryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/RsaEncryptor.java new file mode 100644 index 000000000..bd7774ec2 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/RsaEncryptor.java @@ -0,0 +1,65 @@ +package com.ruoyi.common.encrypt.core.encryptor; + +import cn.hutool.core.codec.Base64; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + + +/** + * RSA算法实现 + * + * @author 老马 + * @version 4.6.0 + */ +public class RsaEncryptor extends AbstractEncryptor { + + private final RSA rsa; + + public RsaEncryptor(EncryptContext context) { + super(context); + String privateKey = context.getPrivateKey(); + String publicKey = context.getPublicKey(); + if (StringUtils.isAnyEmpty(privateKey, publicKey)) { + throw new IllegalArgumentException("RSA公私钥均需要提供,公钥加密,私钥解密。"); + } + this.rsa = SecureUtil.rsa(Base64.decode(privateKey), Base64.decode(publicKey)); + } + + /** + * 获得当前算法 + */ + @Override + public AlgorithmType algorithm() { + return AlgorithmType.RSA; + } + + /** + * 加密 + * + * @param value 待加密字符串 + * @param encodeType 加密后的编码格式 + */ + @Override + public String encrypt(String value, EncodeType encodeType) { + if (encodeType == EncodeType.HEX) { + return rsa.encryptHex(value, KeyType.PublicKey); + } else { + return rsa.encryptBase64(value, KeyType.PublicKey); + } + } + + /** + * 解密 + * + * @param value 待加密字符串 + */ + @Override + public String decrypt(String value) { + return this.rsa.decryptStr(value, KeyType.PrivateKey); + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Sm2Encryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Sm2Encryptor.java new file mode 100644 index 000000000..1e0bb9f17 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Sm2Encryptor.java @@ -0,0 +1,64 @@ +package com.ruoyi.common.encrypt.core.encryptor; + +import cn.hutool.core.codec.Base64; +import cn.hutool.crypto.SmUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.SM2; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + +/** + * sm2算法实现 + * + * @author 老马 + * @version 4.6.0 + */ +public class Sm2Encryptor extends AbstractEncryptor { + + private final SM2 sm2; + + public Sm2Encryptor(EncryptContext context) { + super(context); + String privateKey = context.getPrivateKey(); + String publicKey = context.getPublicKey(); + if (StringUtils.isAnyEmpty(privateKey, publicKey)) { + throw new IllegalArgumentException("SM2公私钥均需要提供,公钥加密,私钥解密。"); + } + this.sm2 = SmUtil.sm2(Base64.decode(privateKey), Base64.decode(publicKey)); + } + + /** + * 获得当前算法 + */ + @Override + public AlgorithmType algorithm() { + return AlgorithmType.SM2; + } + + /** + * 加密 + * + * @param value 待加密字符串 + * @param encodeType 加密后的编码格式 + */ + @Override + public String encrypt(String value, EncodeType encodeType) { + if (encodeType == EncodeType.HEX) { + return sm2.encryptHex(value, KeyType.PublicKey); + } else { + return sm2.encryptBase64(value, KeyType.PublicKey); + } + } + + /** + * 解密 + * + * @param value 待加密字符串 + */ + @Override + public String decrypt(String value) { + return this.sm2.decryptStr(value, KeyType.PrivateKey); + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Sm4Encryptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Sm4Encryptor.java new file mode 100644 index 000000000..b15050388 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/core/encryptor/Sm4Encryptor.java @@ -0,0 +1,67 @@ +package com.ruoyi.common.encrypt.core.encryptor; + +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SmUtil; +import cn.hutool.crypto.symmetric.SM4; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; + +import java.nio.charset.StandardCharsets; + +/** + * sm4算法实现 + * + * @author 老马 + * @version 4.6.0 + */ +public class Sm4Encryptor extends AbstractEncryptor { + + private final SM4 sm4; + + public Sm4Encryptor(EncryptContext context) { + super(context); + String password = context.getPassword(); + if (StrUtil.isBlank(password)) { + throw new IllegalArgumentException("SM4没有获得秘钥信息"); + } + // sm4算法的秘钥要求是16位长度 + if (16 != password.length()) { + throw new IllegalArgumentException("SM4秘钥长度应该为16位,实际为" + password.length() + "位"); + } + this.sm4 = SmUtil.sm4(password.getBytes(StandardCharsets.UTF_8)); + } + + /** + * 获得当前算法 + */ + @Override + public AlgorithmType algorithm() { + return AlgorithmType.SM4; + } + + /** + * 加密 + * + * @param value 待加密字符串 + * @param encodeType 加密后的编码格式 + */ + @Override + public String encrypt(String value, EncodeType encodeType) { + if (encodeType == EncodeType.HEX) { + return sm4.encryptHex(value); + } else { + return sm4.encryptBase64(value); + } + } + + /** + * 解密 + * + * @param value 待加密字符串 + */ + @Override + public String decrypt(String value) { + return this.sm4.decryptStr(value); + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/enumd/AlgorithmType.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/enumd/AlgorithmType.java new file mode 100644 index 000000000..ff02ecb75 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/enumd/AlgorithmType.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.encrypt.enumd; + +import com.ruoyi.common.encrypt.core.encryptor.*; +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 算法名称 + * + * @author 老马 + * @version 4.6.0 + */ +@Getter +@AllArgsConstructor +public enum AlgorithmType { + + /** + * 默认走yml配置 + */ + DEFAULT(null), + + /** + * base64 + */ + BASE64(Base64Encryptor.class), + + /** + * aes + */ + AES(AesEncryptor.class), + + /** + * rsa + */ + RSA(RsaEncryptor.class), + + /** + * sm2 + */ + SM2(Sm2Encryptor.class), + + /** + * sm4 + */ + SM4(Sm4Encryptor.class); + + private final Class clazz; +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/enumd/EncodeType.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/enumd/EncodeType.java new file mode 100644 index 000000000..f8d54999a --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/enumd/EncodeType.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.encrypt.enumd; + +/** + * 编码类型 + * + * @author 老马 + * @version 4.6.0 + */ +public enum EncodeType { + + /** + * 默认使用yml配置 + */ + DEFAULT, + + /** + * base64编码 + */ + BASE64, + + /** + * 16进制编码 + */ + HEX; + +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/interceptor/MybatisDecryptInterceptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/interceptor/MybatisDecryptInterceptor.java new file mode 100644 index 000000000..1bdd1c7cd --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/interceptor/MybatisDecryptInterceptor.java @@ -0,0 +1,113 @@ +package com.ruoyi.common.encrypt.interceptor; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.encrypt.annotation.EncryptField; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.core.EncryptorManager; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; +import com.ruoyi.common.encrypt.properties.EncryptorProperties; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.resultset.ResultSetHandler; +import org.apache.ibatis.plugin.*; + +import java.lang.reflect.Field; +import java.sql.Statement; +import java.util.*; + +/** + * 出参解密拦截器 + * + * @author 老马 + * @version 4.6.0 + */ +@Slf4j +@Intercepts({@Signature( + type = ResultSetHandler.class, + method = "handleResultSets", + args = {Statement.class}) +}) +@AllArgsConstructor +public class MybatisDecryptInterceptor implements Interceptor { + + private final EncryptorManager encryptorManager; + private final EncryptorProperties defaultProperties; + + @Override + public Object intercept(Invocation invocation) throws Throwable { + // 获取执行mysql执行结果 + Object result = invocation.proceed(); + if (result == null) { + return null; + } + decryptHandler(result); + return result; + } + + /** + * 解密对象 + * + * @param sourceObject 待加密对象 + */ + private void decryptHandler(Object sourceObject) { + if (ObjectUtil.isNull(sourceObject)) { + return; + } + if (sourceObject instanceof Map) { + new HashSet<>(((Map) sourceObject).values()).forEach(this::decryptHandler); + return; + } + if (sourceObject instanceof List) { + List sourceList = (List) sourceObject; + if(CollectionUtil.isEmpty(sourceList)) { + return; + } + // 判断第一个元素是否含有注解。如果没有直接返回,提高效率 + Object firstItem = sourceList.get(0); + if (CollectionUtil.isEmpty(encryptorManager.getFieldCache(firstItem.getClass()))) { + return; + } + ((List) sourceObject).forEach(this::decryptHandler); + return; + } + Set fields = encryptorManager.getFieldCache(sourceObject.getClass()); + try { + for (Field field : fields) { + field.set(sourceObject, this.decryptField(String.valueOf(field.get(sourceObject)), field)); + } + } catch (Exception e) { + log.error("处理解密字段时出错", e); + } + } + + /** + * 字段值进行加密。通过字段的批注注册新的加密算法 + * + * @param value 待加密的值 + * @param field 待加密字段 + * @return 加密后结果 + */ + private String decryptField(String value, Field field) { + EncryptField encryptField = field.getAnnotation(EncryptField.class); + EncryptContext encryptContext = new EncryptContext(); + encryptContext.setAlgorithm(encryptField.algorithm() == AlgorithmType.DEFAULT ? defaultProperties.getAlgorithm() : encryptField.algorithm()); + encryptContext.setEncode(encryptField.encode() == EncodeType.DEFAULT ? defaultProperties.getEncode() : encryptField.encode()); + encryptContext.setPassword(StringUtils.isBlank(encryptField.password()) ? defaultProperties.getPassword() : encryptField.password()); + encryptContext.setPrivateKey(StringUtils.isBlank(encryptField.privateKey()) ? defaultProperties.getPrivateKey() : encryptField.privateKey()); + encryptContext.setPublicKey(StringUtils.isBlank(encryptField.publicKey()) ? defaultProperties.getPublicKey() : encryptField.publicKey()); + return this.encryptorManager.decrypt(value, encryptContext); + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) { + + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/interceptor/MybatisEncryptInterceptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/interceptor/MybatisEncryptInterceptor.java new file mode 100644 index 000000000..3b3f14195 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/interceptor/MybatisEncryptInterceptor.java @@ -0,0 +1,118 @@ +package com.ruoyi.common.encrypt.interceptor; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.encrypt.annotation.EncryptField; +import com.ruoyi.common.encrypt.core.EncryptContext; +import com.ruoyi.common.encrypt.core.EncryptorManager; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; +import com.ruoyi.common.encrypt.properties.EncryptorProperties; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.executor.parameter.ParameterHandler; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.plugin.Intercepts; +import org.apache.ibatis.plugin.Invocation; +import org.apache.ibatis.plugin.Signature; + +import java.lang.reflect.Field; +import java.sql.PreparedStatement; +import java.util.*; + +/** + * 入参加密拦截器 + * + * @author 老马 + * @version 4.6.0 + */ +@Slf4j +@Intercepts({@Signature( + type = ParameterHandler.class, + method = "setParameters", + args = {PreparedStatement.class}) +}) +@AllArgsConstructor +public class MybatisEncryptInterceptor implements Interceptor { + + private final EncryptorManager encryptorManager; + private final EncryptorProperties defaultProperties; + + @Override + public Object intercept(Invocation invocation) throws Throwable { + return invocation; + } + + @Override + public Object plugin(Object target) { + if (target instanceof ParameterHandler) { + // 进行加密操作 + ParameterHandler parameterHandler = (ParameterHandler) target; + Object parameterObject = parameterHandler.getParameterObject(); + if (ObjectUtil.isNotNull(parameterObject) && !(parameterObject instanceof String)) { + this.encryptHandler(parameterObject); + } + } + return target; + } + + /** + * 加密对象 + * + * @param sourceObject 待加密对象 + */ + private void encryptHandler(Object sourceObject) { + if (ObjectUtil.isNull(sourceObject)) { + return; + } + if (sourceObject instanceof Map) { + new HashSet<>(((Map) sourceObject).values()).forEach(this::encryptHandler); + return; + } + if (sourceObject instanceof List) { + List sourceList = (List) sourceObject; + if(CollectionUtil.isEmpty(sourceList)) { + return; + } + // 判断第一个元素是否含有注解。如果没有直接返回,提高效率 + Object firstItem = sourceList.get(0); + if (CollectionUtil.isEmpty(encryptorManager.getFieldCache(firstItem.getClass()))) { + return; + } + ((List) sourceObject).forEach(this::encryptHandler); + return; + } + Set fields = encryptorManager.getFieldCache(sourceObject.getClass()); + try { + for (Field field : fields) { + field.set(sourceObject, this.encryptField(String.valueOf(field.get(sourceObject)), field)); + } + } catch (Exception e) { + log.error("处理加密字段时出错", e); + } + } + + /** + * 字段值进行加密。通过字段的批注注册新的加密算法 + * + * @param value 待加密的值 + * @param field 待加密字段 + * @return 加密后结果 + */ + private String encryptField(String value, Field field) { + EncryptField encryptField = field.getAnnotation(EncryptField.class); + EncryptContext encryptContext = new EncryptContext(); + encryptContext.setAlgorithm(encryptField.algorithm() == AlgorithmType.DEFAULT ? defaultProperties.getAlgorithm() : encryptField.algorithm()); + encryptContext.setEncode(encryptField.encode() == EncodeType.DEFAULT ? defaultProperties.getEncode() : encryptField.encode()); + encryptContext.setPassword(StringUtils.isBlank(encryptField.password()) ? defaultProperties.getPassword() : encryptField.password()); + encryptContext.setPrivateKey(StringUtils.isBlank(encryptField.privateKey()) ? defaultProperties.getPrivateKey() : encryptField.privateKey()); + encryptContext.setPublicKey(StringUtils.isBlank(encryptField.publicKey()) ? defaultProperties.getPublicKey() : encryptField.publicKey()); + return this.encryptorManager.encrypt(value, encryptContext); + } + + + @Override + public void setProperties(Properties properties) { + } +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/properties/EncryptorProperties.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/properties/EncryptorProperties.java new file mode 100644 index 000000000..003db6cb6 --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/com/ruoyi/common/encrypt/properties/EncryptorProperties.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.encrypt.properties; + +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import com.ruoyi.common.encrypt.enumd.EncodeType; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * 加解密属性配置类 + * + * @author 老马 + * @version 4.6.0 + */ +@Data +@ConfigurationProperties(prefix = "mybatis-encryptor") +public class EncryptorProperties { + + /** + * 过滤开关 + */ + private Boolean enable; + + /** + * 默认算法 + */ + private AlgorithmType algorithm; + + /** + * 安全秘钥 + */ + private String password; + + /** + * 公钥 + */ + private String publicKey; + + /** + * 私钥 + */ + private String privateKey; + + /** + * 编码方式,base64/hex + */ + private EncodeType encode; + +} diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-encrypt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..e1063e2bc --- /dev/null +++ b/ruoyi-common/ruoyi-common-encrypt/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +com.ruoyi.common.encrypt.config.EncryptorAutoConfiguration diff --git a/ruoyi-common/ruoyi-common-excel/pom.xml b/ruoyi-common/ruoyi-common-excel/pom.xml index 8c35de8ea..9d66e9647 100644 --- a/ruoyi-common/ruoyi-common-excel/pom.xml +++ b/ruoyi-common/ruoyi-common-excel/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/annotation/ExcelDictFormat.java b/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/annotation/ExcelDictFormat.java index a9671fb62..162dc7965 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/annotation/ExcelDictFormat.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/annotation/ExcelDictFormat.java @@ -1,5 +1,7 @@ package com.ruoyi.common.excel.annotation; +import com.ruoyi.common.core.utils.StringUtils; + import java.lang.annotation.*; /** @@ -25,6 +27,6 @@ public @interface ExcelDictFormat { /** * 分隔符,读取字符串组内容 */ - String separator() default ","; + String separator() default StringUtils.SEPARATOR; } diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/utils/ExcelUtil.java b/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/utils/ExcelUtil.java index 4fa8c0800..95563e1d5 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/utils/ExcelUtil.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/com/ruoyi/common/excel/utils/ExcelUtil.java @@ -270,7 +270,7 @@ public class ExcelUtil { */ public static String convertByExp(String propertyValue, String converterExp, String separator) { StringBuilder propertyString = new StringBuilder(); - String[] convertSource = converterExp.split(","); + String[] convertSource = converterExp.split(StringUtils.SEPARATOR); for (String item : convertSource) { String[] itemArray = item.split("="); if (StringUtils.containsAny(propertyValue, separator)) { @@ -299,7 +299,7 @@ public class ExcelUtil { */ public static String reverseByExp(String propertyValue, String converterExp, String separator) { StringBuilder propertyString = new StringBuilder(); - String[] convertSource = converterExp.split(","); + String[] convertSource = converterExp.split(StringUtils.SEPARATOR); for (String item : convertSource) { String[] itemArray = item.split("="); if (StringUtils.containsAny(propertyValue, separator)) { diff --git a/ruoyi-common/ruoyi-common-idempotent/pom.xml b/ruoyi-common/ruoyi-common-idempotent/pom.xml index b62084a7f..882bed8b5 100644 --- a/ruoyi-common/ruoyi-common-idempotent/pom.xml +++ b/ruoyi-common/ruoyi-common-idempotent/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-job/pom.xml b/ruoyi-common/ruoyi-common-job/pom.xml index aa4962a10..668d259ac 100644 --- a/ruoyi-common/ruoyi-common-job/pom.xml +++ b/ruoyi-common/ruoyi-common-job/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-loadbalancer/pom.xml b/ruoyi-common/ruoyi-common-loadbalancer/pom.xml index 8e8644ab8..c975e5c5f 100644 --- a/ruoyi-common/ruoyi-common-loadbalancer/pom.xml +++ b/ruoyi-common/ruoyi-common-loadbalancer/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-log/pom.xml b/ruoyi-common/ruoyi-common-log/pom.xml index 59c42739f..4749a1ea3 100644 --- a/ruoyi-common/ruoyi-common-log/pom.xml +++ b/ruoyi-common/ruoyi-common-log/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java index 847c4f30b..47cc96636 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java @@ -1,41 +1,47 @@ -package com.ruoyi.common.log.annotation; - -import com.ruoyi.common.log.enums.BusinessType; -import com.ruoyi.common.log.enums.OperatorType; - -import java.lang.annotation.*; - -/** - * 自定义操作日志记录注解 - * - * @author ruoyi - */ -@Target({ElementType.PARAMETER, ElementType.METHOD}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -public @interface Log { - /** - * 模块 - */ - String title() default ""; - - /** - * 功能 - */ - BusinessType businessType() default BusinessType.OTHER; - - /** - * 操作人类别 - */ - OperatorType operatorType() default OperatorType.MANAGE; - - /** - * 是否保存请求的参数 - */ - boolean isSaveRequestData() default true; - - /** - * 是否保存响应的参数 - */ - boolean isSaveResponseData() default true; -} +package com.ruoyi.common.log.annotation; + +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.log.enums.OperatorType; + +import java.lang.annotation.*; + +/** + * 自定义操作日志记录注解 + * + * @author ruoyi + */ +@Target({ElementType.PARAMETER, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log { + /** + * 模块 + */ + String title() default ""; + + /** + * 功能 + */ + BusinessType businessType() default BusinessType.OTHER; + + /** + * 操作人类别 + */ + OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 是否保存请求的参数 + */ + boolean isSaveRequestData() default true; + + /** + * 是否保存响应的参数 + */ + boolean isSaveResponseData() default true; + + /** + * 排除指定的请求参数 + */ + String[] excludeParamNames() default {}; + +} diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java index 8cf7a657c..fb77ca7f3 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java @@ -29,7 +29,7 @@ import java.util.Map; /** * 操作日志记录处理 * - * @author ruoyi + * @author Lion Li */ @Slf4j @Aspect @@ -68,12 +68,10 @@ public class LogAspect { OperLogEvent operLog = new OperLogEvent(); operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); // 请求的地址 - operLog.setOperIp(ServletUtils.getClientIP()); + String ip = ServletUtils.getClientIP(); + operLog.setOperIp(ip); operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); - String username = LoginHelper.getUsername(); - if (StringUtils.isNotBlank(username)) { - operLog.setOperName(username); - } + operLog.setOperName(LoginHelper.getUsername()); if (e != null) { operLog.setStatus(BusinessStatus.FAIL.ordinal()); @@ -113,7 +111,7 @@ public class LogAspect { // 是否需要保存request,参数和值 if (log.isSaveRequestData()) { // 获取参数的信息,传入到数据库中。 - setRequestValue(joinPoint, operLog); + setRequestValue(joinPoint, operLog, log.excludeParamNames()); } // 是否需要保存response,参数和值 if (log.isSaveResponseData() && ObjectUtil.isNotNull(jsonResult)) { @@ -127,14 +125,16 @@ public class LogAspect { * @param operLog 操作日志 * @throws Exception 异常 */ - private void setRequestValue(JoinPoint joinPoint, OperLogEvent operLog) throws Exception { + private void setRequestValue(JoinPoint joinPoint, OperLogEvent operLog, String[] excludeParamNames) throws Exception { + Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); String requestMethod = operLog.getRequestMethod(); - if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) { - String params = argsArrayToString(joinPoint.getArgs()); + if (MapUtil.isEmpty(paramsMap) + && HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) { + String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames); operLog.setOperParam(StringUtils.substring(params, 0, 2000)); } else { - Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); MapUtil.removeAny(paramsMap, EXCLUDE_PROPERTIES); + MapUtil.removeAny(paramsMap, excludeParamNames); operLog.setOperParam(StringUtils.substring(JsonUtils.toJsonString(paramsMap), 0, 2000)); } } @@ -142,7 +142,7 @@ public class LogAspect { /** * 参数拼装 */ - private String argsArrayToString(Object[] paramsArray) { + private String argsArrayToString(Object[] paramsArray, String[] excludeParamNames) { StringBuilder params = new StringBuilder(); if (paramsArray != null && paramsArray.length > 0) { for (Object o : paramsArray) { @@ -152,6 +152,7 @@ public class LogAspect { Dict dict = JsonUtils.parseMap(str); if (MapUtil.isNotEmpty(dict)) { MapUtil.removeAny(dict, EXCLUDE_PROPERTIES); + MapUtil.removeAny(dict, excludeParamNames); str = JsonUtils.toJsonString(dict); } params.append(str).append(" "); @@ -188,6 +189,6 @@ public class LogAspect { } } return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse - || o instanceof BindingResult; + || o instanceof BindingResult; } } diff --git a/ruoyi-common/ruoyi-common-logstash/pom.xml b/ruoyi-common/ruoyi-common-logstash/pom.xml index 3a3ea080f..1fb2903de 100644 --- a/ruoyi-common/ruoyi-common-logstash/pom.xml +++ b/ruoyi-common/ruoyi-common-logstash/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-mail/pom.xml b/ruoyi-common/ruoyi-common-mail/pom.xml index a50a9b504..7fb6cc904 100644 --- a/ruoyi-common/ruoyi-common-mail/pom.xml +++ b/ruoyi-common/ruoyi-common-mail/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-mybatis/pom.xml b/ruoyi-common/ruoyi-common-mybatis/pom.xml index ed0555bf3..743886f43 100644 --- a/ruoyi-common/ruoyi-common-mybatis/pom.xml +++ b/ruoyi-common/ruoyi-common-mybatis/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/core/page/PageQuery.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/core/page/PageQuery.java index 91396cb4e..3f5764f53 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/core/page/PageQuery.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/core/page/PageQuery.java @@ -87,8 +87,8 @@ public class PageQuery implements Serializable { // 兼容前端排序类型 isAsc = StringUtils.replaceEach(isAsc, new String[]{"ascending", "descending"}, new String[]{"asc", "desc"}); - String[] orderByArr = orderBy.split(","); - String[] isAscArr = isAsc.split(","); + String[] orderByArr = orderBy.split(StringUtils.SEPARATOR); + String[] isAscArr = isAsc.split(StringUtils.SEPARATOR); if (isAscArr.length != 1 && isAscArr.length != orderByArr.length) { throw new ServiceException("排序参数有误"); } diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/helper/DataPermissionHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/helper/DataPermissionHelper.java index 33cb1b0e0..d398179d8 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/helper/DataPermissionHelper.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/com/ruoyi/common/mybatis/helper/DataPermissionHelper.java @@ -3,6 +3,8 @@ package com.ruoyi.common.mybatis.helper; import cn.dev33.satoken.context.SaHolder; import cn.dev33.satoken.context.model.SaStorage; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy; +import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -44,4 +46,19 @@ public class DataPermissionHelper { } throw new NullPointerException("data permission context type exception"); } + + /** + * 开启忽略数据权限(开启后需手动调用 {@link #disableIgnore()} 关闭) + */ + public static void enableIgnore() { + InterceptorIgnoreHelper.handle(IgnoreStrategy.builder().dataPermission(true).build()); + } + + /** + * 关闭忽略数据权限 + */ + public static void disableIgnore() { + InterceptorIgnoreHelper.clearIgnoreStrategy(); + } + } diff --git a/ruoyi-common/ruoyi-common-oss/pom.xml b/ruoyi-common/ruoyi-common-oss/pom.xml index d964ebd3b..5c229ce98 100644 --- a/ruoyi-common/ruoyi-common-oss/pom.xml +++ b/ruoyi-common/ruoyi-common-oss/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java index 142719056..c290c2a61 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/core/OssClient.java @@ -183,6 +183,12 @@ public class OssClient { return configKey; } + /** + * 获取私有URL链接 + * + * @param objectKey 对象KEY + * @param second 授权时间 + */ public String getPrivateUrl(String objectKey, Integer second) { GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(properties.getBucketName(), objectKey) @@ -192,6 +198,13 @@ public class OssClient { return url.toString(); } + /** + * 检查配置是否相同 + */ + public boolean checkPropertiesSame(OssProperties properties) { + return this.properties.equals(properties); + } + /** * 获取当前桶权限类型 * diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java index a47e94959..232a6c9c1 100644 --- a/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java +++ b/ruoyi-common/ruoyi-common-oss/src/main/java/com/ruoyi/common/oss/factory/OssFactory.java @@ -24,21 +24,6 @@ public class OssFactory { private static final Map CLIENT_CACHE = new ConcurrentHashMap<>(); - /** - * 初始化工厂 - */ - public static void init() { - log.info("初始化OSS工厂"); - RedisUtils.subscribe(OssConstant.DEFAULT_CONFIG_KEY, String.class, configKey -> { - OssClient client = getClient(configKey); - // 未初始化不处理 - if (client != null) { - refresh(configKey); - log.info("订阅刷新OSS配置 => " + configKey); - } - }); - } - /** * 获取默认实例 */ @@ -55,25 +40,24 @@ public class OssFactory { * 根据类型获取实例 */ public static OssClient instance(String configKey) { - OssClient client = getClient(configKey); - if (client == null) { - refresh(configKey); - return getClient(configKey); - } - return client; - } - - private static void refresh(String configKey) { String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey); if (json == null) { throw new OssException("系统异常, '" + configKey + "'配置信息不存在!"); } OssProperties properties = JsonUtils.parseObject(json, OssProperties.class); - CLIENT_CACHE.put(configKey, new OssClient(configKey, properties)); - } - - private static OssClient getClient(String configKey) { - return CLIENT_CACHE.get(configKey); + OssClient client = CLIENT_CACHE.get(configKey); + if (client == null) { + CLIENT_CACHE.put(configKey, new OssClient(configKey, properties)); + log.info("创建OSS实例 key => {}", configKey); + return CLIENT_CACHE.get(configKey); + } + // 配置不相同则重新构建 + if (!client.checkPropertiesSame(properties)) { + CLIENT_CACHE.put(configKey, new OssClient(configKey, properties)); + log.info("重载OSS实例 key => {}", configKey); + return CLIENT_CACHE.get(configKey); + } + return client; } } diff --git a/ruoyi-common/ruoyi-common-prometheus/pom.xml b/ruoyi-common/ruoyi-common-prometheus/pom.xml index 0eba5b516..14f7cd333 100644 --- a/ruoyi-common/ruoyi-common-prometheus/pom.xml +++ b/ruoyi-common/ruoyi-common-prometheus/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml index 7bea6497d..fb4842cc2 100644 --- a/ruoyi-common/ruoyi-common-redis/pom.xml +++ b/ruoyi-common/ruoyi-common-redis/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-satoken/pom.xml b/ruoyi-common/ruoyi-common-satoken/pom.xml index b2429b84b..89808306e 100644 --- a/ruoyi-common/ruoyi-common-satoken/pom.xml +++ b/ruoyi-common/ruoyi-common-satoken/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/config/SaTokenConfiguration.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/config/SaTokenConfiguration.java index 2d1d74c97..2eda704fa 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/config/SaTokenConfiguration.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/config/SaTokenConfiguration.java @@ -1,7 +1,11 @@ package com.ruoyi.common.satoken.config; +import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.jwt.StpLogicJwtForSimple; +import cn.dev33.satoken.stp.StpInterface; import cn.dev33.satoken.stp.StpLogic; +import com.ruoyi.common.satoken.core.dao.PlusSaTokenDao; +import com.ruoyi.common.satoken.core.service.SaPermissionImpl; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.annotation.Bean; @@ -18,4 +22,20 @@ public class SaTokenConfiguration { return new StpLogicJwtForSimple(); } + /** + * 权限接口实现(使用bean注入方便用户替换) + */ + @Bean + public StpInterface stpInterface() { + return new SaPermissionImpl(); + } + + /** + * 自定义dao层存储 + */ + @Bean + public SaTokenDao saTokenDao() { + return new PlusSaTokenDao(); + } + } diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java b/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java index aaa398698..fcca599d3 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java +++ b/ruoyi-common/ruoyi-common-satoken/src/main/java/com/ruoyi/common/satoken/utils/LoginHelper.java @@ -1,25 +1,25 @@ package com.ruoyi.common.satoken.utils; import cn.dev33.satoken.context.SaHolder; +import cn.dev33.satoken.context.model.SaStorage; +import cn.dev33.satoken.stp.SaLoginModel; import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.enums.DeviceType; import com.ruoyi.common.core.enums.UserType; -import com.ruoyi.common.core.exception.UtilException; -import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.system.api.model.LoginUser; import lombok.AccessLevel; import lombok.NoArgsConstructor; /** * 登录鉴权助手 - * + *

* user_type 为 用户类型 同一个用户表 可以有多种用户类型 例如 pc,app * deivce 为 设备类型 同一个用户类型 可以有 多种设备类型 例如 web,ios * 可以组成 用户类型与设备类型多对多的 权限灵活控制 - * + *

* 多用户体系 针对 多种用户类型 但权限控制不一致 * 可以组成 多用户类型表与多设备类型 分别控制权限 * @@ -28,8 +28,8 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class LoginHelper { - public static final String JOIN_CODE = ":"; public static final String LOGIN_USER_KEY = "loginUser"; + public static final String USER_KEY = "userId"; /** * 登录系统 @@ -37,9 +37,7 @@ public class LoginHelper { * @param loginUser 登录用户信息 */ public static void login(LoginUser loginUser) { - SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser); - StpUtil.login(loginUser.getLoginId()); - setLoginUser(loginUser); + loginByDevice(loginUser, null); } /** @@ -49,15 +47,14 @@ public class LoginHelper { * @param loginUser 登录用户信息 */ public static void loginByDevice(LoginUser loginUser, DeviceType deviceType) { - SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser); - StpUtil.login(loginUser.getLoginId(), deviceType.getDevice()); - setLoginUser(loginUser); - } - - /** - * 设置用户数据(多级缓存) - */ - public static void setLoginUser(LoginUser loginUser) { + SaStorage storage = SaHolder.getStorage(); + storage.set(LOGIN_USER_KEY, loginUser); + storage.set(USER_KEY, loginUser.getUserId()); + SaLoginModel model = new SaLoginModel(); + if (ObjectUtil.isNotNull(deviceType)) { + model.setDevice(deviceType.getDevice()); + } + StpUtil.login(loginUser.getLoginId(), model.setExtra(USER_KEY, loginUser.getUserId())); StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser); } @@ -74,27 +71,28 @@ public class LoginHelper { return loginUser; } + /** + * 获取用户基于token + */ + public static LoginUser getLoginUser(String token) { + return (LoginUser) StpUtil.getTokenSessionByToken(token).get(LOGIN_USER_KEY); + } + /** * 获取用户id */ public static Long getUserId() { - LoginUser loginUser = getLoginUser(); - if (ObjectUtil.isNull(loginUser)) { - String loginId = StpUtil.getLoginIdAsString(); - String userId = null; - for (UserType value : UserType.values()) { - if (StringUtils.contains(loginId, value.getUserType())) { - String[] strs = StringUtils.split(loginId, JOIN_CODE); - // 用户id在总是在最后 - userId = strs[strs.length - 1]; - } + Long userId; + try { + userId = Convert.toLong(SaHolder.getStorage().get(USER_KEY)); + if (ObjectUtil.isNull(userId)) { + userId = Convert.toLong(StpUtil.getExtra(USER_KEY)); + SaHolder.getStorage().set(USER_KEY, userId); } - if (StringUtils.isBlank(userId)) { - throw new UtilException("登录用户: LoginId异常 => " + loginId); - } - return Long.parseLong(userId); + } catch (Exception e) { + return null; } - return loginUser.getUserId(); + return userId; } /** diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index ec1ea5499..09ce96b97 100644 --- a/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/ruoyi-common/ruoyi-common-satoken/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,3 +1 @@ -com.ruoyi.common.satoken.core.dao.PlusSaTokenDao -com.ruoyi.common.satoken.core.service.SaPermissionImpl com.ruoyi.common.satoken.config.SaTokenConfiguration diff --git a/ruoyi-common/ruoyi-common-seata/pom.xml b/ruoyi-common/ruoyi-common-seata/pom.xml index d89fab3e0..e0654f9f9 100644 --- a/ruoyi-common/ruoyi-common-seata/pom.xml +++ b/ruoyi-common/ruoyi-common-seata/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-security/pom.xml b/ruoyi-common/ruoyi-common-security/pom.xml index 6d6b75b48..bf99e7ad7 100644 --- a/ruoyi-common/ruoyi-common-security/pom.xml +++ b/ruoyi-common/ruoyi-common-security/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-sentinel/pom.xml b/ruoyi-common/ruoyi-common-sentinel/pom.xml index ef43262e8..5752377a4 100644 --- a/ruoyi-common/ruoyi-common-sentinel/pom.xml +++ b/ruoyi-common/ruoyi-common-sentinel/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-skylog/pom.xml b/ruoyi-common/ruoyi-common-skylog/pom.xml index ae5df3585..d907bd46c 100644 --- a/ruoyi-common/ruoyi-common-skylog/pom.xml +++ b/ruoyi-common/ruoyi-common-skylog/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-sms/pom.xml b/ruoyi-common/ruoyi-common-sms/pom.xml index 25696e994..7aff7d92f 100644 --- a/ruoyi-common/ruoyi-common-sms/pom.xml +++ b/ruoyi-common/ruoyi-common-sms/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-sms/src/main/java/com/ruoyi/common/sms/core/TencentSmsTemplate.java b/ruoyi-common/ruoyi-common-sms/src/main/java/com/ruoyi/common/sms/core/TencentSmsTemplate.java index f4a3e0698..9449a9614 100644 --- a/ruoyi-common/ruoyi-common-sms/src/main/java/com/ruoyi/common/sms/core/TencentSmsTemplate.java +++ b/ruoyi-common/ruoyi-common-sms/src/main/java/com/ruoyi/common/sms/core/TencentSmsTemplate.java @@ -52,7 +52,7 @@ public class TencentSmsTemplate implements SmsTemplate { throw new SmsException("模板ID不能为空"); } SendSmsRequest req = new SendSmsRequest(); - Set set = Arrays.stream(phones.split(",")).map(p -> "+86" + p).collect(Collectors.toSet()); + Set set = Arrays.stream(phones.split(StringUtils.SEPARATOR)).map(p -> "+86" + p).collect(Collectors.toSet()); req.setPhoneNumberSet(ArrayUtil.toArray(set, String.class)); if (CollUtil.isNotEmpty(param)) { req.setTemplateParamSet(ArrayUtil.toArray(param.values(), String.class)); diff --git a/ruoyi-common/ruoyi-common-translation/pom.xml b/ruoyi-common/ruoyi-common-translation/pom.xml new file mode 100644 index 000000000..e8de3c127 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/pom.xml @@ -0,0 +1,42 @@ + + + + com.ruoyi + ruoyi-common + 1.6.0 + + 4.0.0 + + ruoyi-common-translation + + + ruoyi-common-translation 通用翻译功能 + + + + + + com.ruoyi + ruoyi-common-core + + + + com.ruoyi + ruoyi-common-dict + + + + com.ruoyi + ruoyi-common-dubbo + + + + com.ruoyi + ruoyi-api-resource + + + + + diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java new file mode 100644 index 000000000..dbb469dce --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/Translation.java @@ -0,0 +1,39 @@ +package com.ruoyi.common.translation.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.ruoyi.common.translation.core.handler.TranslationHandler; + +import java.lang.annotation.*; + +/** + * 通用翻译注解 + * + * @author Lion Li + */ +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.FIELD, ElementType.METHOD}) +@Documented +@JacksonAnnotationsInside +@JsonSerialize(using = TranslationHandler.class) +public @interface Translation { + + /** + * 类型 (需与实现类上的 {@link com.ruoyi.common.translation.annotation.TranslationType} 注解type对应) + *

+ * 默认取当前字段的值 如果设置了 @{@link Translation#mapper()} 则取映射字段的值 + */ + String type(); + + /** + * 映射字段 (如果不为空则取此字段的值) + */ + String mapper() default ""; + + /** + * 其他条件 例如: 字典type(sys_user_sex) + */ + String other() default ""; + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java new file mode 100644 index 000000000..1b64e5370 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/annotation/TranslationType.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.translation.annotation; + +import java.lang.annotation.*; + +/** + * 翻译类型注解 (标注到{@link com.ruoyi.common.translation.core.TranslationInterface} 的实现类) + * + * @author Lion Li + */ +@Inherited +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +@Documented +public @interface TranslationType { + + /** + * 类型 + */ + String type(); + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java new file mode 100644 index 000000000..acc16d625 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/config/TranslationConfig.java @@ -0,0 +1,50 @@ +package com.ruoyi.common.translation.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.core.TranslationInterface; +import com.ruoyi.common.translation.core.handler.TranslationBeanSerializerModifier; +import com.ruoyi.common.translation.core.handler.TranslationHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfiguration; + +import javax.annotation.PostConstruct; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 翻译模块配置类 + * + * @author Lion Li + */ +@Slf4j +@AutoConfiguration +public class TranslationConfig { + + @Autowired + private List> list; + + @Autowired + private ObjectMapper objectMapper; + + @PostConstruct + public void init() { + Map> map = new HashMap<>(list.size()); + for (TranslationInterface trans : list) { + if (trans.getClass().isAnnotationPresent(TranslationType.class)) { + TranslationType annotation = trans.getClass().getAnnotation(TranslationType.class); + map.put(annotation.type(), trans); + } else { + log.warn(trans.getClass().getName() + " 翻译实现类未标注 TranslationType 注解!"); + } + } + TranslationHandler.TRANSLATION_MAPPER.putAll(map); + // 设置 Bean 序列化修改器 + objectMapper.setSerializerFactory( + objectMapper.getSerializerFactory() + .withSerializerModifier(new TranslationBeanSerializerModifier())); + } + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java new file mode 100644 index 000000000..1cfec58e5 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/constant/TransConstant.java @@ -0,0 +1,30 @@ +package com.ruoyi.common.translation.constant; + +/** + * 翻译常量 + * + * @author Lion Li + */ +public interface TransConstant { + + /** + * 用户id转账号 + */ + String USER_ID_TO_NAME = "user_id_to_name"; + + /** + * 部门id转名称 + */ + String DEPT_ID_TO_NAME = "dept_id_to_name"; + + /** + * 字典type转label + */ + String DICT_TYPE_TO_LABEL = "dict_type_to_label"; + + /** + * ossId转url + */ + String OSS_ID_TO_URL = "oss_id_to_url"; + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java new file mode 100644 index 000000000..fed0f746f --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/TranslationInterface.java @@ -0,0 +1,17 @@ +package com.ruoyi.common.translation.core; + +/** + * 翻译接口 (实现类需标注 {@link com.ruoyi.common.translation.annotation.TranslationType} 注解标明翻译类型) + * + * @author Lion Li + */ +public interface TranslationInterface { + + /** + * 翻译 + * + * @param key 需要被翻译的键(不为空) + * @return 返回键对应的值 + */ + T translation(Object key, String other); +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java new file mode 100644 index 000000000..45549ff75 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationBeanSerializerModifier.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.translation.core.handler; + +import com.fasterxml.jackson.databind.BeanDescription; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; +import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; + +import java.util.List; + +/** + * Bean 序列化修改器 解决 Null 被单独处理问题 + * + * @author Lion Li + */ +public class TranslationBeanSerializerModifier extends BeanSerializerModifier { + + @Override + public List changeProperties(SerializationConfig config, BeanDescription beanDesc, + List beanProperties) { + for (BeanPropertyWriter writer : beanProperties) { + // 如果序列化器为 TranslationHandler 的话 将 Null 值也交给他处理 + if (writer.getSerializer() instanceof TranslationHandler) { + writer.assignNullSerializer(writer.getSerializer()); + } + } + return beanProperties; + } + +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java new file mode 100644 index 000000000..fcd122c8e --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/handler/TranslationHandler.java @@ -0,0 +1,65 @@ +package com.ruoyi.common.translation.core.handler; + +import cn.hutool.core.util.ObjectUtil; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.reflect.ReflectUtils; +import com.ruoyi.common.translation.annotation.Translation; +import com.ruoyi.common.translation.core.TranslationInterface; +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 翻译处理器 + * + * @author Lion Li + */ +@Slf4j +public class TranslationHandler extends JsonSerializer implements ContextualSerializer { + + /** + * 全局翻译实现类映射器 + */ + public static final Map> TRANSLATION_MAPPER = new ConcurrentHashMap<>(); + + private Translation translation; + + @Override + public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + TranslationInterface trans = TRANSLATION_MAPPER.get(translation.type()); + if (ObjectUtil.isNotNull(trans)) { + // 如果映射字段不为空 则取映射字段的值 + if (StringUtils.isNotBlank(translation.mapper())) { + value = ReflectUtils.invokeGetter(gen.getCurrentValue(), translation.mapper()); + } + // 如果为 null 直接写出 + if (ObjectUtil.isNull(value)) { + gen.writeNull(); + return; + } + Object result = trans.translation(value, translation.other()); + gen.writeObject(result); + } else { + gen.writeObject(value); + } + } + + @Override + public JsonSerializer createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException { + Translation translation = property.getAnnotation(Translation.class); + if (Objects.nonNull(translation)) { + this.translation = translation; + return this; + } + return prov.findValueSerializer(property.getType(), property); + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DeptNameTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DeptNameTranslationImpl.java new file mode 100644 index 000000000..817d04ce8 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DeptNameTranslationImpl.java @@ -0,0 +1,25 @@ +package com.ruoyi.common.translation.core.impl; + +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.constant.TransConstant; +import com.ruoyi.common.translation.core.TranslationInterface; +import com.ruoyi.system.api.RemoteDeptService; +import lombok.AllArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; + +/** + * 部门翻译实现 + * + * @author Lion Li + */ +@AllArgsConstructor +@TranslationType(type = TransConstant.DEPT_ID_TO_NAME) +public class DeptNameTranslationImpl implements TranslationInterface { + + @DubboReference + private RemoteDeptService remoteDeptService; + + public String translation(Object key, String other) { + return remoteDeptService.selectDeptNameByIds(key.toString()); + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTypeTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTypeTranslationImpl.java new file mode 100644 index 000000000..fe20bc51d --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/DictTypeTranslationImpl.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.translation.core.impl; + +import com.ruoyi.common.core.service.DictService; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.constant.TransConstant; +import com.ruoyi.common.translation.core.TranslationInterface; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * 字典翻译实现 + * + * @author Lion Li + */ +@AllArgsConstructor +@TranslationType(type = TransConstant.DICT_TYPE_TO_LABEL) +public class DictTypeTranslationImpl implements TranslationInterface { + + private final DictService dictService; + + public String translation(Object key, String other) { + if (key instanceof String && StringUtils.isNotBlank(other)) { + return dictService.getDictLabel(other, key.toString()); + } + return null; + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/OssUrlTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/OssUrlTranslationImpl.java new file mode 100644 index 000000000..f870e9bf7 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/OssUrlTranslationImpl.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.translation.core.impl; + +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.constant.TransConstant; +import com.ruoyi.common.translation.core.TranslationInterface; +import com.ruoyi.resource.api.RemoteFileService; +import lombok.AllArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +/** + * OSS翻译实现 + * + * @author Lion Li + */ +@AllArgsConstructor +@TranslationType(type = TransConstant.OSS_ID_TO_URL) +public class OssUrlTranslationImpl implements TranslationInterface { + + @DubboReference + private RemoteFileService ossService; + + public String translation(Object key, String other) { + return ossService.selectUrlByIds(key.toString()); + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java new file mode 100644 index 000000000..14169541d --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/java/com/ruoyi/common/translation/core/impl/UserNameTranslationImpl.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.translation.core.impl; + +import com.ruoyi.common.translation.annotation.TranslationType; +import com.ruoyi.common.translation.constant.TransConstant; +import com.ruoyi.common.translation.core.TranslationInterface; +import com.ruoyi.system.api.RemoteUserService; +import lombok.AllArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Component; + +/** + * 用户名翻译实现 + * + * @author Lion Li + */ +@AllArgsConstructor +@TranslationType(type = TransConstant.USER_ID_TO_NAME) +public class UserNameTranslationImpl implements TranslationInterface { + + @DubboReference + private RemoteUserService remoteUserService; + + public String translation(Object key, String other) { + return remoteUserService.selectUserNameById((Long) key); + } +} diff --git a/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 000000000..fe396d496 --- /dev/null +++ b/ruoyi-common/ruoyi-common-translation/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1,5 @@ +com.ruoyi.common.translation.config.TranslationConfig +com.ruoyi.common.translation.core.impl.DeptNameTranslationImpl +com.ruoyi.common.translation.core.impl.DictTypeTranslationImpl +com.ruoyi.common.translation.core.impl.OssUrlTranslationImpl +com.ruoyi.common.translation.core.impl.UserNameTranslationImpl diff --git a/ruoyi-common/ruoyi-common-web/pom.xml b/ruoyi-common/ruoyi-common-web/pom.xml index 7102c48f1..23eb8c920 100644 --- a/ruoyi-common/ruoyi-common-web/pom.xml +++ b/ruoyi-common/ruoyi-common-web/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-common - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-common/ruoyi-common-core/src/main/resources/logback-common.xml b/ruoyi-common/ruoyi-common-web/src/main/resources/logback-common.xml similarity index 100% rename from ruoyi-common/ruoyi-common-core/src/main/resources/logback-common.xml rename to ruoyi-common/ruoyi-common-web/src/main/resources/logback-common.xml diff --git a/ruoyi-example/pom.xml b/ruoyi-example/pom.xml index 07b366f8b..45badc357 100644 --- a/ruoyi-example/pom.xml +++ b/ruoyi-example/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-example/ruoyi-demo/pom.xml b/ruoyi-example/ruoyi-demo/pom.xml index 41b5b63d0..605bc663d 100644 --- a/ruoyi-example/ruoyi-demo/pom.xml +++ b/ruoyi-example/ruoyi-demo/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-example - 1.5.0 + 1.6.0 4.0.0 @@ -74,6 +74,11 @@ ruoyi-common-sms + + com.ruoyi + ruoyi-common-encrypt + + diff --git a/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptController.java b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptController.java new file mode 100644 index 000000000..6abe4e184 --- /dev/null +++ b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestEncryptController.java @@ -0,0 +1,55 @@ +package com.ruoyi.demo.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.demo.domain.TestDemoEncrypt; +import com.ruoyi.demo.mapper.TestDemoEncryptMapper; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; +import java.util.Map; + + +/** + * 测试数据库加解密功能 + * + * @author Lion Li + */ +@Validated +@RestController +@RequestMapping("/demo/encrypt") +public class TestEncryptController { + + @Autowired + private TestDemoEncryptMapper mapper; + @Value("${mybatis-encryptor.enable}") + private Boolean encryptEnable; + + /** + * 测试数据库加解密 + * + * @param key 测试key + * @param value 测试value + */ + @GetMapping() + public R> test(String key, String value) { + if (!encryptEnable) { + throw new RuntimeException("加密功能未开启!"); + } + Map map = new HashMap<>(2); + TestDemoEncrypt demo = new TestDemoEncrypt(); + demo.setTestKey(key); + demo.setValue(value); + mapper.insert(demo); + map.put("加密", demo); + TestDemoEncrypt testDemo = mapper.selectById(demo.getId()); + map.put("解密", testDemo); + return R.ok(map); + } + + +} diff --git a/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemoEncrypt.java b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemoEncrypt.java new file mode 100644 index 000000000..0214e8d58 --- /dev/null +++ b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemoEncrypt.java @@ -0,0 +1,29 @@ +package com.ruoyi.demo.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.encrypt.annotation.EncryptField; +import com.ruoyi.common.encrypt.enumd.AlgorithmType; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("test_demo") +public class TestDemoEncrypt extends TestDemo { + + /** + * key键 + */ + // @EncryptField(algorithm=AlgorithmType.SM2, privateKey = "MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQgZSlOvw8FBiH+aFJWLYZP/VRjg9wjfRarTkGBZd/T3N+gCgYIKoEcz1UBgi2hRANCAAR5DGuQwJqkxnbCsP+iPSDoHWIF4RwcR5EsSvT8QPxO1wRkR2IhCkzvRb32x2CUgJFdvoqVqfApFDPZzShqzBwX", publicKey = "MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEeQxrkMCapMZ2wrD/oj0g6B1iBeEcHEeRLEr0/ED8TtcEZEdiIQpM70W99sdglICRXb6KlanwKRQz2c0oaswcFw==") + @EncryptField(algorithm = AlgorithmType.RSA, privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBANBBEeueWlXlkkj2+WY5l+IWe42d8b5K28g+G/CFKC/yYAEHtqGlCsBOrb+YBkG9mPzmuYA/n9k0NFIc8E8yY5vZQaroyFBrTTWEzG9RY2f7Y3svVyybs6jpXSUs4xff8abo7wL1Y/wUaeatTViamxYnyTvdTmLm3d+JjRij68rxAgMBAAECgYAB0TnhXraSopwIVRfmboea1b0upl+BUdTJcmci412UjrKr5aE695ZLPkXbFXijVu7HJlyyv94NVUdaMACV7Ku/S2RuNB70M7YJm8rAjHFC3/i2ZeIM60h1Ziy4QKv0XM3pRATlDCDNhC1WUrtQCQSgU8kcp6eUUppruOqDzcY04QJBAPm9+sBP9CwDRgy3e5+V8aZtJkwDstb0lVVV/KY890cydVxiCwvX3fqVnxKMlb+x0YtH0sb9v+71xvK2lGobaRECQQDVePU6r/cCEfpc+nkWF6osAH1f8Mux3rYv2DoBGvaPzV2BGfsLed4neRfCwWNCKvGPCdW+L0xMJg8+RwaoBUPhAkAT5kViqXxFPYWJYd1h2+rDXhMdH3ZSlm6HvDBDdrwlWinr0Iwcx3iSjPV93uHXwm118aUj4fg3LDJMCKxOwBxhAkByrQXfvwOMYygBprRBf/j0plazoWFrbd6lGR0f1uI5IfNnFRPdeFw1DEINZ2Hw+6zEUF44SqRMC+4IYJNc02dBAkBCgy7RvfyV/A7N6kKXxTHauY0v6XwSSvpeKtRJkbIcRWOdIYvaHO9L7cklj3vIEdwjSUp9K4VTBYYlmAz1xh03", publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQQRHrnlpV5ZJI9vlmOZfiFnuNnfG+StvIPhvwhSgv8mABB7ahpQrATq2/mAZBvZj85rmAP5/ZNDRSHPBPMmOb2UGq6MhQa001hMxvUWNn+2N7L1csm7Oo6V0lLOMX3/Gm6O8C9WP8FGnmrU1YmpsWJ8k73U5i5t3fiY0Yo+vK8QIDAQAB") + private String testKey; + + /** + * 值 + */ + // @EncryptField // 什么也不写走默认yml配置 + // @EncryptField(algorithm = AlgorithmType.SM4, password = "10rfylhtccpuyke5") + @EncryptField(algorithm = AlgorithmType.AES, password = "10rfylhtccpuyke5") + private String value; + +} diff --git a/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoEncryptMapper.java b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoEncryptMapper.java new file mode 100644 index 000000000..cef30afb1 --- /dev/null +++ b/ruoyi-example/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoEncryptMapper.java @@ -0,0 +1,13 @@ +package com.ruoyi.demo.mapper; + +import com.ruoyi.common.mybatis.core.mapper.BaseMapperPlus; +import com.ruoyi.demo.domain.TestDemoEncrypt; + +/** + * 测试加密功能 + * + * @author Lion Li + */ +public interface TestDemoEncryptMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-example/ruoyi-stream-mq/pom.xml b/ruoyi-example/ruoyi-stream-mq/pom.xml index 2524f0e17..6a840c75b 100644 --- a/ruoyi-example/ruoyi-stream-mq/pom.xml +++ b/ruoyi-example/ruoyi-stream-mq/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-example - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml index 3a36799bb..848b1917d 100644 --- a/ruoyi-gateway/pom.xml +++ b/ruoyi-gateway/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java index 459ff2749..a2605d9ae 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java @@ -13,6 +13,8 @@ import org.springframework.boot.context.metrics.buffering.BufferingApplicationSt @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class RuoYiGatewayApplication { public static void main(String[] args) { + // 标记 sentinel 类型为 网关 + System.setProperty("csp.sentinel.app.type", "1"); SpringApplication application = new SpringApplication(RuoYiGatewayApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); application.run(args); diff --git a/ruoyi-gateway/src/main/resources/logback.xml b/ruoyi-gateway/src/main/resources/logback.xml index a2e187f8d..4d66014c6 100644 --- a/ruoyi-gateway/src/main/resources/logback.xml +++ b/ruoyi-gateway/src/main/resources/logback.xml @@ -5,6 +5,7 @@ + @@ -14,7 +15,89 @@ - + + + ${log.path}/console.log + + + ${log.path}/console.%d{yyyy-MM-dd}.log + + 1 + + + ${log.pattern} + utf-8 + + + + INFO + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + 0 + + 512 + + + + + + + + 0 + + 512 + + + @@ -24,5 +107,8 @@ + + + diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml index 524336cd7..96a4d0e34 100644 --- a/ruoyi-modules/pom.xml +++ b/ruoyi-modules/pom.xml @@ -4,7 +4,7 @@ com.ruoyi ruoyi-cloud-plus - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-gen/pom.xml b/ruoyi-modules/ruoyi-gen/pom.xml index e6c10ca67..ed93aba9d 100644 --- a/ruoyi-modules/ruoyi-gen/pom.xml +++ b/ruoyi-modules/ruoyi-gen/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java index 06226dbcb..a91370020 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java @@ -212,7 +212,7 @@ public class GenTableColumn extends BaseEntity { if (StringUtils.isNotEmpty(value)) { Object startStr = value.subSequence(0, 1); String endStr = value.substring(1); - sb.append("").append(startStr).append("=").append(endStr).append(","); + sb.append(StringUtils.EMPTY).append(startStr).append("=").append(endStr).append(StringUtils.SEPARATOR); } } return sb.deleteCharAt(sb.length() - 1).toString(); diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java index b31204730..42cb278e4 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java @@ -57,7 +57,7 @@ public class GenUtils { column.setHtmlType(GenConstants.HTML_INPUT); // 如果是浮点型 统一用BigDecimal - String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); + String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), StringUtils.SEPARATOR); if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) { column.setJavaType(GenConstants.TYPE_BIGDECIMAL); } @@ -166,7 +166,7 @@ public class GenUtils { boolean autoRemovePre = GenConfig.getAutoRemovePre(); String tablePrefix = GenConfig.getTablePrefix(); if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) { - String[] searchList = StringUtils.split(tablePrefix, ","); + String[] searchList = StringUtils.split(tablePrefix, StringUtils.SEPARATOR); tableName = replaceFirst(tableName, searchList); } return StringUtils.convertToCamelCase(tableName); @@ -183,7 +183,7 @@ public class GenUtils { String text = replacementm; for (String searchString : searchList) { if (replacementm.startsWith(searchString)) { - text = replacementm.replaceFirst(searchString, ""); + text = replacementm.replaceFirst(searchString, StringUtils.EMPTY); break; } } diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java index 8a23cf15b..bfc46e753 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java +++ b/ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java @@ -230,7 +230,7 @@ public class VelocityUtils { public static HashSet getImportList(GenTable genTable) { List columns = genTable.getColumns(); GenTable subGenTable = genTable.getSubTable(); - HashSet importList = new HashSet(); + HashSet importList = new HashSet<>(); if (ObjectUtil.isNotNull(subGenTable)) { importList.add("java.util.List"); } @@ -252,7 +252,7 @@ public class VelocityUtils { */ public static String getDicts(GenTable genTable) { List columns = genTable.getColumns(); - Set dicts = new HashSet(); + Set dicts = new HashSet<>(); addDicts(dicts, columns); if (ObjectUtil.isNotNull(genTable.getSubTable())) { List subColumns = genTable.getSubTable().getColumns(); diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml index 9a9129cd1..fae6a86dd 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -93,6 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ORDER BY c.relname, a.attnum ) temp WHERE table_name = (#{tableName}) + AND column_type ]]> '-' diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm index 2bc699a20..fd07e4d72 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm @@ -51,11 +51,12 @@ #end diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm index e645b6bb8..7e41538e7 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm @@ -51,11 +51,12 @@ #end diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm index 663893a2c..4f109531b 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm @@ -50,11 +50,12 @@ #end diff --git a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm index a93922ef5..a6bdc5b82 100644 --- a/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm +++ b/ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm @@ -50,11 +50,12 @@ #end @@ -540,7 +541,7 @@ function submitForm() { /** 删除按钮操作 */ function handleDelete(row) { const _${pkColumn.javaField}s = row.${pkColumn.javaField} || ids.value; - proxy.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + ${pkColumn.javaField}s + '"的数据项?').then(function() { + proxy.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + _${pkColumn.javaField}s + '"的数据项?').then(function() { loading.value = true; return del${BusinessName}(_${pkColumn.javaField}s); }).then(() => { diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml index 81ba222b4..a02ff3e39 100644 --- a/ruoyi-modules/ruoyi-job/pom.xml +++ b/ruoyi-modules/ruoyi-job/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-resource/pom.xml b/ruoyi-modules/ruoyi-resource/pom.xml index d29d7b75f..6a8584635 100644 --- a/ruoyi-modules/ruoyi-resource/pom.xml +++ b/ruoyi-modules/ruoyi-resource/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/SysOssConfig.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/SysOssConfig.java index 28a4ca234..b030d7a1a 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/SysOssConfig.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/SysOssConfig.java @@ -69,7 +69,7 @@ public class SysOssConfig extends BaseEntity { private String region; /** - * 状态(0正常 1停用) + * 是否默认(0=是,1=否) */ private String status; diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssBo.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssBo.java index d4cca31ea..d8d81f75d 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssBo.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssBo.java @@ -13,22 +13,31 @@ import lombok.EqualsAndHashCode; @EqualsAndHashCode(callSuper = true) public class SysOssBo extends BaseEntity { + /** + * ossId + */ + private Long ossId; + /** * 文件名 */ private String fileName; + /** * 原名 */ private String originalName; + /** * 文件后缀名 */ private String fileSuffix; + /** * URL地址 */ private String url; + /** * 服务商 */ diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssConfigBo.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssConfigBo.java index 744b55bb2..2c05bca52 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssConfigBo.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/bo/SysOssConfigBo.java @@ -79,7 +79,7 @@ public class SysOssConfigBo extends BaseEntity { private String isHttps; /** - * 状态(0=正常,1=停用) + * 是否默认(0=是,1=否) */ private String status; diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/vo/SysOssConfigVo.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/vo/SysOssConfigVo.java index 16501c155..e9cf9be14 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/vo/SysOssConfigVo.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/domain/vo/SysOssConfigVo.java @@ -66,7 +66,7 @@ public class SysOssConfigVo { private String region; /** - * 状态(0=正常,1=停用) + * 是否默认(0=是,1=否) */ private String status; diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/dubbo/RemoteFileServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/dubbo/RemoteFileServiceImpl.java index aa09dcc8e..1f9480749 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/dubbo/RemoteFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/dubbo/RemoteFileServiceImpl.java @@ -7,11 +7,11 @@ import com.ruoyi.common.oss.entity.UploadResult; import com.ruoyi.common.oss.factory.OssFactory; import com.ruoyi.resource.api.RemoteFileService; import com.ruoyi.resource.api.domain.SysFile; -import com.ruoyi.resource.domain.SysOss; -import com.ruoyi.resource.mapper.SysOssMapper; +import com.ruoyi.resource.domain.bo.SysOssBo; +import com.ruoyi.resource.service.ISysOssService; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,11 +22,11 @@ import org.springframework.transaction.annotation.Transactional; */ @Slf4j @Service +@RequiredArgsConstructor @DubboService public class RemoteFileServiceImpl implements RemoteFileService { - @Autowired - private SysOssMapper sysOssMapper; + private final ISysOssService sysOssService; /** * 文件上传请求 @@ -39,13 +39,13 @@ public class RemoteFileServiceImpl implements RemoteFileService { OssClient storage = OssFactory.instance(); UploadResult uploadResult = storage.uploadSuffix(file, suffix, contentType); // 保存文件信息 - SysOss oss = new SysOss(); + SysOssBo oss = new SysOssBo(); oss.setUrl(uploadResult.getUrl()); oss.setFileSuffix(suffix); oss.setFileName(uploadResult.getFilename()); oss.setOriginalName(originalFilename); oss.setService(storage.getConfigKey()); - sysOssMapper.insert(oss); + sysOssService.insertByBo(oss); SysFile sysFile = new SysFile(); sysFile.setOssId(oss.getOssId()); sysFile.setName(uploadResult.getFilename()); @@ -57,4 +57,15 @@ public class RemoteFileServiceImpl implements RemoteFileService { } } + /** + * 通过ossId查询对应的url + * + * @param ossIds ossId串逗号分隔 + * @return url串逗号分隔 + */ + @Override + public String selectUrlByIds(String ossIds) { + return sysOssService.selectUrlByIds(ossIds); + } + } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java index 4e613379a..516d25eaa 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/ISysOssService.java @@ -22,12 +22,15 @@ public interface ISysOssService { List listByIds(Collection ossIds); + String selectUrlByIds(String ossIds); + SysOssVo getById(Long ossId); SysOssVo upload(MultipartFile file); + Boolean insertByBo(SysOssBo bo); + void download(Long ossId, HttpServletResponse response) throws IOException; Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java index d64635c4a..c39d9119b 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssConfigServiceImpl.java @@ -8,15 +8,12 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.constant.CacheNames; -import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.JsonUtils; -import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; import com.ruoyi.common.oss.constant.OssConstant; -import com.ruoyi.common.oss.factory.OssFactory; import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.common.redis.utils.RedisUtils; import com.ruoyi.resource.domain.SysOssConfig; @@ -26,7 +23,6 @@ import com.ruoyi.resource.mapper.SysOssConfigMapper; import com.ruoyi.resource.service.ISysOssConfigService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -59,10 +55,8 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { if ("0".equals(config.getStatus())) { RedisUtils.setCacheObject(OssConstant.DEFAULT_CONFIG_KEY, configKey); } - SpringUtils.context().publishEvent(config); + CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); } - // 初始化OSS工厂 - OssFactory.init(); } @Override @@ -92,7 +86,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { validEntityBeforeSave(config); boolean flag = baseMapper.insert(config) > 0; if (flag) { - SpringUtils.context().publishEvent(config); + CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); } return flag; } @@ -109,7 +103,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { luw.eq(SysOssConfig::getOssConfigId, config.getOssConfigId()); boolean flag = baseMapper.update(config, luw) > 0; if (flag) { - SpringUtils.context().publishEvent(config); + CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); } return flag; } @@ -118,8 +112,7 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { * 保存前的数据校验 */ private void validEntityBeforeSave(SysOssConfig entity) { - if (StringUtils.isNotEmpty(entity.getConfigKey()) - && UserConstants.NOT_UNIQUE.equals(checkConfigKeyUnique(entity))) { + if (StringUtils.isNotEmpty(entity.getConfigKey()) && !checkConfigKeyUnique(entity)) { throw new ServiceException("操作配置'" + entity.getConfigKey() + "'失败, 配置key已存在!"); } } @@ -147,15 +140,15 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { /** * 判断configKey是否唯一 */ - private String checkConfigKeyUnique(SysOssConfig sysOssConfig) { + private boolean checkConfigKeyUnique(SysOssConfig sysOssConfig) { long ossConfigId = ObjectUtil.isNull(sysOssConfig.getOssConfigId()) ? -1L : sysOssConfig.getOssConfigId(); SysOssConfig info = baseMapper.selectOne(new LambdaQueryWrapper() .select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey) .eq(SysOssConfig::getConfigKey, sysOssConfig.getConfigKey())); if (ObjectUtil.isNotNull(info) && info.getOssConfigId() != ossConfigId) { - return UserConstants.NOT_UNIQUE; + return false; } - return UserConstants.UNIQUE; + return true; } /** @@ -174,16 +167,4 @@ public class SysOssConfigServiceImpl implements ISysOssConfigService { return row; } - /** - * 更新配置缓存 - * - * @param config 配置 - */ - @EventListener - public void updateConfigCache(SysOssConfig config) { - CacheUtils.put(CacheNames.SYS_OSS_CONFIG, config.getConfigKey(), JsonUtils.toJsonString(config)); - RedisUtils.publish(OssConstant.DEFAULT_CONFIG_KEY, config.getConfigKey(), msg -> { - log.info("发布刷新OSS配置 => " + msg); - }); - } } diff --git a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java index 0c5161fef..b649598d7 100644 --- a/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java +++ b/ruoyi-modules/ruoyi-resource/src/main/java/com/ruoyi/resource/service/impl/SysOssServiceImpl.java @@ -1,5 +1,7 @@ package com.ruoyi.resource.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -31,10 +33,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -69,6 +68,18 @@ public class SysOssServiceImpl implements ISysOssService { return list; } + @Override + public String selectUrlByIds(String ossIds) { + List list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) { + SysOssVo vo = SpringUtils.getAopProxy(this).getById(id); + if (ObjectUtil.isNotNull(vo)) { + list.add(this.matchingUrl(vo).getUrl()); + } + } + return String.join(StringUtils.SEPARATOR, list); + } + private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); @@ -131,6 +142,16 @@ public class SysOssServiceImpl implements ISysOssService { return this.matchingUrl(sysOssVo); } + @Override + public Boolean insertByBo(SysOssBo bo) { + SysOss oss = BeanUtil.toBean(bo, SysOss.class); + boolean flag = baseMapper.insert(oss) > 0; + if (flag) { + bo.setOssId(oss.getOssId()); + } + return flag; + } + @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml index f530dc585..ed5eda692 100644 --- a/ruoyi-modules/ruoyi-system/pom.xml +++ b/ruoyi-modules/ruoyi-system/pom.xml @@ -5,7 +5,7 @@ com.ruoyi ruoyi-modules - 1.5.0 + 1.6.0 4.0.0 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java index a848b4ae4..1ef8d3e85 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java @@ -1,7 +1,6 @@ package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.excel.utils.ExcelUtil; @@ -78,7 +77,7 @@ public class SysConfigController extends BaseController { @Log(title = "参数管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysConfig config) { - if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { + if (!configService.checkConfigKeyUnique(config)) { return R.fail("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); } configService.insertConfig(config); @@ -92,7 +91,7 @@ public class SysConfigController extends BaseController { @Log(title = "参数管理", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysConfig config) { - if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { + if (!configService.checkConfigKeyUnique(config)) { return R.fail("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); } configService.updateConfig(config); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java index b2bda6b21..574accba5 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java @@ -1,7 +1,7 @@ package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.convert.Convert; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; @@ -48,7 +48,8 @@ public class SysDeptController extends BaseController { @GetMapping("/list/exclude/{deptId}") public R> excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) { List depts = deptService.selectDeptList(new SysDept()); - depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); + depts.removeIf(d -> d.getDeptId().intValue() == deptId + || StringUtils.splitList(d.getAncestors()).contains(Convert.toStr(deptId))); return R.ok(depts); } @@ -71,7 +72,7 @@ public class SysDeptController extends BaseController { @Log(title = "部门管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysDept dept) { - if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { + if (!deptService.checkDeptNameUnique(dept)) { return R.fail("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } return toAjax(deptService.insertDept(dept)); @@ -86,7 +87,7 @@ public class SysDeptController extends BaseController { public R edit(@Validated @RequestBody SysDept dept) { Long deptId = dept.getDeptId(); deptService.checkDeptDataScope(deptId); - if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { + if (!deptService.checkDeptNameUnique(dept)) { return R.fail("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } else if (dept.getParentId().equals(deptId)) { return R.fail("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java index 0eed5a891..0795ce2ef 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java @@ -69,7 +69,7 @@ public class SysDictTypeController extends BaseController { @Log(title = "字典类型", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysDictType dict) { - if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { + if (!dictTypeService.checkDictTypeUnique(dict)) { return R.fail("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); } dictTypeService.insertDictType(dict); @@ -83,7 +83,7 @@ public class SysDictTypeController extends BaseController { @Log(title = "字典类型", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysDictType dict) { - if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { + if (!dictTypeService.checkDictTypeUnique(dict)) { return R.fail("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); } dictTypeService.updateDictType(dict); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java index efff7554b..0fbda0b4e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java @@ -87,7 +87,7 @@ public class SysMenuController extends BaseController { @Log(title = "菜单管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysMenu menu) { - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { + if (!menuService.checkMenuNameUnique(menu)) { return R.fail("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return R.fail("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); @@ -102,7 +102,7 @@ public class SysMenuController extends BaseController { @Log(title = "菜单管理", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysMenu menu) { - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { + if (!menuService.checkMenuNameUnique(menu)) { return R.fail("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return R.fail("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java index c33cb5dff..9436256b5 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java @@ -1,7 +1,6 @@ package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.excel.utils.ExcelUtil; @@ -66,9 +65,9 @@ public class SysPostController extends BaseController { @Log(title = "岗位管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysPost post) { - if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) { + if (!postService.checkPostNameUnique(post)) { return R.fail("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); - } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) { + } else if (!postService.checkPostCodeUnique(post)) { return R.fail("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); } return toAjax(postService.insertPost(post)); @@ -81,9 +80,9 @@ public class SysPostController extends BaseController { @Log(title = "岗位管理", businessType = BusinessType.UPDATE) @PutMapping public R edit(@Validated @RequestBody SysPost post) { - if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) { + if (!postService.checkPostNameUnique(post)) { return R.fail("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); - } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) { + } else if (!postService.checkPostCodeUnique(post)) { return R.fail("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); } return toAjax(postService.updatePost(post)); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java index af7bcc1b1..982f19cab 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java @@ -64,11 +64,9 @@ public class SysProfileController extends BaseController { @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping public R updateProfile(@RequestBody SysUser user) { - if (StringUtils.isNotEmpty(user.getPhonenumber()) - && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { + if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); - } else if (StringUtils.isNotEmpty(user.getEmail()) - && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { + } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } user.setUserId(LoginHelper.getUserId()); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java index 2a3219aae..88d3a1e68 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java @@ -1,7 +1,10 @@ package com.ruoyi.system.controller; import cn.dev33.satoken.annotation.SaCheckPermission; -import com.ruoyi.common.core.constant.UserConstants; +import cn.dev33.satoken.exception.NotLoginException; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.controller.BaseController; import com.ruoyi.common.excel.utils.ExcelUtil; @@ -83,9 +86,9 @@ public class SysRoleController extends BaseController { @Log(title = "角色管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysRole role) { - if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { + if (!roleService.checkRoleNameUnique(role)) { return R.fail("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); - } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) { + } else if (!roleService.checkRoleKeyUnique(role)) { return R.fail("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); } return toAjax(roleService.insertRole(role)); @@ -101,21 +104,31 @@ public class SysRoleController extends BaseController { public R edit(@Validated @RequestBody SysRole role) { roleService.checkRoleAllowed(role); roleService.checkRoleDataScope(role.getRoleId()); - if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { + if (!roleService.checkRoleNameUnique(role)) { return R.fail("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); - } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) { + } else if (!roleService.checkRoleKeyUnique(role)) { return R.fail("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); } if (roleService.updateRole(role) > 0) { - // 更新缓存用户权限 - LoginUser loginUser = LoginHelper.getLoginUser(); - Long userId = loginUser.getUserId(); - if (!LoginHelper.isAdmin(userId)) { - SysUser sysUser = new SysUser(); - sysUser.setUserId(userId); - loginUser.setMenuPermission(permissionService.getMenuPermission(sysUser)); - LoginHelper.setLoginUser(loginUser); + List keys = StpUtil.searchTokenValue("", 0, -1, false); + if (CollUtil.isEmpty(keys)) { + return R.ok(); } + // 角色关联的在线用户量过大会导致redis阻塞卡顿 谨慎操作 + keys.parallelStream().forEach(key -> { + String token = key.replace(CacheConstants.LOGIN_TOKEN_KEY, ""); + // 如果已经过期则跳过 + if (StpUtil.stpLogic.getTokenActivityTimeoutByToken(token) < -1) { + return; + } + LoginUser loginUser = LoginHelper.getLoginUser(token); + if (loginUser.getRoles().stream().anyMatch(r -> r.getRoleId().equals(role.getRoleId()))) { + try { + StpUtil.logoutByTokenValue(token); + } catch (NotLoginException ignored) { + } + } + }); return R.ok(); } return R.fail("修改角色'" + role.getRoleName() + "'失败,请联系管理员"); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java index a01fd8651..ed1327e45 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java @@ -5,7 +5,6 @@ import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ObjectUtil; -import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StreamUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -34,7 +33,10 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 用户信息 @@ -149,13 +151,13 @@ public class SysUserController extends BaseController { @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping public R add(@Validated @RequestBody SysUser user) { - if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) { + if (!userService.checkUserNameUnique(user)) { return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) - && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { + && !userService.checkPhoneUnique(user)) { return R.fail("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); } else if (StringUtils.isNotEmpty(user.getEmail()) - && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { + && !userService.checkEmailUnique(user)) { return R.fail("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } user.setPassword(BCrypt.hashpw(user.getPassword())); @@ -171,13 +173,13 @@ public class SysUserController extends BaseController { public R edit(@Validated @RequestBody SysUser user) { userService.checkUserAllowed(user); userService.checkUserDataScope(user.getUserId()); - if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) { + if (!userService.checkUserNameUnique(user)) { return R.fail("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); } else if (StringUtils.isNotEmpty(user.getPhonenumber()) - && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { + && !userService.checkPhoneUnique(user)) { return R.fail("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); } else if (StringUtils.isNotEmpty(user.getEmail()) - && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { + && !userService.checkEmailUnique(user)) { return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } return toAjax(userService.updateUser(user)); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDeptServiceImpl.java new file mode 100644 index 000000000..74b6f7625 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDeptServiceImpl.java @@ -0,0 +1,25 @@ +package com.ruoyi.system.dubbo; + +import com.ruoyi.system.api.RemoteDeptService; +import com.ruoyi.system.service.ISysDeptService; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.stereotype.Service; + +/** + * 部门服务 + * + * @author Lion Li + */ +@RequiredArgsConstructor +@Service +@DubboService +public class RemoteDeptServiceImpl implements RemoteDeptService { + + private final ISysDeptService sysDeptService; + + @Override + public String selectDeptNameByIds(String deptIds) { + return sysDeptService.selectDeptNameByIds(deptIds); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDictServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDictServiceImpl.java index 64e38399f..5ae4671c4 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDictServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteDictServiceImpl.java @@ -10,7 +10,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 操作日志记录 + * 字典服务 * * @author Lion Li */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java index c6ef2a10d..357a2559e 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java @@ -3,7 +3,6 @@ package com.ruoyi.system.dubbo; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.enums.UserStatus; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.exception.user.UserException; @@ -23,7 +22,7 @@ import org.springframework.stereotype.Service; import java.util.List; /** - * 操作日志记录 + * 用户服务 * * @author Lion Li */ @@ -92,12 +91,17 @@ public class RemoteUserServiceImpl implements RemoteUserService { if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { throw new ServiceException("当前系统没有开启注册功能"); } - if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(sysUser))) { + if (!userService.checkUserNameUnique(sysUser)) { throw new UserException("user.register.save.error", username); } return userService.registerUser(sysUser); } + @Override + public String selectUserNameById(Long userId) { + return userService.selectUserNameById(userId); + } + /** * 构建登录用户 */ diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java index e50812fba..5a1dd5bd0 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -83,5 +83,5 @@ public interface ISysConfigService { * @param config 参数信息 * @return 结果 */ - String checkConfigKeyUnique(SysConfig config); + boolean checkConfigKeyUnique(SysConfig config); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java index 9822a5ae3..b317869fa 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -51,6 +51,14 @@ public interface ISysDeptService { */ SysDept selectDeptById(Long deptId); + /** + * 通过部门ID查询部门名称 + * + * @param deptIds 部门ID串逗号分隔 + * @return 部门名称串逗号分隔 + */ + String selectDeptNameByIds(String deptIds); + /** * 根据ID查询所有子部门(正常状态) * @@ -81,7 +89,7 @@ public interface ISysDeptService { * @param dept 部门信息 * @return 结果 */ - String checkDeptNameUnique(SysDept dept); + boolean checkDeptNameUnique(SysDept dept); /** * 校验部门是否有数据权限 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java index 7c3047423..098ed01df 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -99,5 +99,5 @@ public interface ISysDictTypeService { * @param dictType 字典类型 * @return 结果 */ - String checkDictTypeUnique(SysDictType dictType); + boolean checkDictTypeUnique(SysDictType dictType); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index 2ec3e107c..d6b9ee01d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -132,5 +132,5 @@ public interface ISysMenuService { * @param menu 菜单信息 * @return 结果 */ - String checkMenuNameUnique(SysMenu menu); + boolean checkMenuNameUnique(SysMenu menu); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java index 83595aea7..32dac31d7 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java @@ -52,7 +52,7 @@ public interface ISysPostService { * @param post 岗位信息 * @return 结果 */ - String checkPostNameUnique(SysPost post); + boolean checkPostNameUnique(SysPost post); /** * 校验岗位编码 @@ -60,7 +60,7 @@ public interface ISysPostService { * @param post 岗位信息 * @return 结果 */ - String checkPostCodeUnique(SysPost post); + boolean checkPostCodeUnique(SysPost post); /** * 通过岗位ID查询岗位使用数量 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java index 96518a34e..1c68a9187 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -69,7 +69,7 @@ public interface ISysRoleService { * @param role 角色信息 * @return 结果 */ - String checkRoleNameUnique(SysRole role); + boolean checkRoleNameUnique(SysRole role); /** * 校验角色权限是否唯一 @@ -77,7 +77,7 @@ public interface ISysRoleService { * @param role 角色信息 * @return 结果 */ - String checkRoleKeyUnique(SysRole role); + boolean checkRoleKeyUnique(SysRole role); /** * 校验角色是否允许操作 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 1283af082..adc17a84c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -84,7 +84,7 @@ public interface ISysUserService { * @param user 用户信息 * @return 结果 */ - String checkUserNameUnique(SysUser user); + boolean checkUserNameUnique(SysUser user); /** * 校验手机号码是否唯一 @@ -92,7 +92,7 @@ public interface ISysUserService { * @param user 用户信息 * @return 结果 */ - String checkPhoneUnique(SysUser user); + boolean checkPhoneUnique(SysUser user); /** * 校验email是否唯一 @@ -100,7 +100,7 @@ public interface ISysUserService { * @param user 用户信息 * @return 结果 */ - String checkEmailUnique(SysUser user); + boolean checkEmailUnique(SysUser user); /** * 校验用户是否允许操作 @@ -206,4 +206,12 @@ public interface ISysUserService { */ int deleteUserByIds(Long[] userIds); + /** + * 通过用户ID查询用户账户 + * + * @param userId 用户ID + * @return 用户账户 + */ + String selectUserNameById(Long userId); + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index 338d8a973..b8cf08c89 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -185,13 +185,13 @@ public class SysConfigServiceImpl implements ISysConfigService { * @return 结果 */ @Override - public String checkConfigKeyUnique(SysConfig config) { + public boolean checkConfigKeyUnique(SysConfig config) { Long configId = ObjectUtil.isNull(config.getConfigId()) ? -1L : config.getConfigId(); SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysConfig::getConfigKey, config.getConfigKey())); if (ObjectUtil.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) { - return UserConstants.NOT_UNIQUE; + return false; } - return UserConstants.UNIQUE; + return true; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index bc3a933a3..349693301 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -6,11 +6,14 @@ import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.SpringUtils; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.TreeBuildUtils; import com.ruoyi.common.mybatis.helper.DataBaseHelper; +import com.ruoyi.common.redis.utils.CacheUtils; import com.ruoyi.common.satoken.utils.LoginHelper; import com.ruoyi.system.api.domain.SysDept; import com.ruoyi.system.api.domain.SysRole; @@ -20,6 +23,8 @@ import com.ruoyi.system.mapper.SysRoleMapper; import com.ruoyi.system.mapper.SysUserMapper; import com.ruoyi.system.service.ISysDeptService; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -106,15 +111,37 @@ public class SysDeptServiceImpl implements ISysDeptService { * @param deptId 部门ID * @return 部门信息 */ + @Cacheable(cacheNames = CacheNames.SYS_DEPT, key = "#deptId") @Override public SysDept selectDeptById(Long deptId) { SysDept dept = baseMapper.selectById(deptId); + if (ObjectUtil.isNull(dept)) { + return null; + } SysDept parentDept = baseMapper.selectOne(new LambdaQueryWrapper() .select(SysDept::getDeptName).eq(SysDept::getDeptId, dept.getParentId())); dept.setParentName(ObjectUtil.isNotNull(parentDept) ? parentDept.getDeptName() : null); return dept; } + /** + * 通过部门ID查询部门名称 + * + * @param deptIds 部门ID串逗号分隔 + * @return 部门名称串逗号分隔 + */ + @Override + public String selectDeptNameByIds(String deptIds) { + List list = new ArrayList<>(); + for (Long id : StringUtils.splitTo(deptIds, Convert::toLong)) { + SysDept dept = SpringUtils.getAopProxy(this).selectDeptById(id); + if (ObjectUtil.isNotNull(dept)) { + list.add(dept.getDeptName()); + } + } + return String.join(StringUtils.SEPARATOR, list); + } + /** * 根据ID查询所有子部门(正常状态) * @@ -159,15 +186,12 @@ public class SysDeptServiceImpl implements ISysDeptService { * @return 结果 */ @Override - public String checkDeptNameUnique(SysDept dept) { + public boolean checkDeptNameUnique(SysDept dept) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysDept::getDeptName, dept.getDeptName()) .eq(SysDept::getParentId, dept.getParentId()) .ne(ObjectUtil.isNotNull(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -200,7 +224,7 @@ public class SysDeptServiceImpl implements ISysDeptService { if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { throw new ServiceException("部门停用,不允许新增"); } - dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + dept.setAncestors(info.getAncestors() + StringUtils.SEPARATOR + dept.getParentId()); return baseMapper.insert(dept); } @@ -210,12 +234,13 @@ public class SysDeptServiceImpl implements ISysDeptService { * @param dept 部门信息 * @return 结果 */ + @CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#dept.deptId") @Override public int updateDept(SysDept dept) { SysDept newParentDept = baseMapper.selectById(dept.getParentId()); SysDept oldDept = baseMapper.selectById(dept.getDeptId()); if (ObjectUtil.isNotNull(newParentDept) && ObjectUtil.isNotNull(oldDept)) { - String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String newAncestors = newParentDept.getAncestors() + StringUtils.SEPARATOR + newParentDept.getDeptId(); String oldAncestors = oldDept.getAncestors(); dept.setAncestors(newAncestors); updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); @@ -260,7 +285,9 @@ public class SysDeptServiceImpl implements ISysDeptService { list.add(dept); } if (list.size() > 0) { - baseMapper.updateBatchById(list); + if (baseMapper.updateBatchById(list)) { + list.forEach(dept -> CacheUtils.evict(CacheNames.SYS_DEPT, dept.getDeptId())); + } } } @@ -270,6 +297,7 @@ public class SysDeptServiceImpl implements ISysDeptService { * @param deptId 部门ID * @return 结果 */ + @CacheEvict(cacheNames = CacheNames.SYS_DEPT, key = "#deptId") @Override public int deleteDeptById(Long deptId) { return baseMapper.deleteById(deptId); diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index 03c90810b..f5518719a 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -211,13 +211,10 @@ public class SysDictTypeServiceImpl implements ISysDictTypeService { * @return 结果 */ @Override - public String checkDictTypeUnique(SysDictType dict) { + public boolean checkDictTypeUnique(SysDictType dict) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysDictType::getDictType, dict.getDictType()) .ne(ObjectUtil.isNotNull(dict.getDictId()), SysDictType::getDictId, dict.getDictId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index e5c829f34..5e00ac3dd 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -92,7 +92,7 @@ public class SysMenuServiceImpl implements ISysMenuService { Set permsSet = new HashSet<>(); for (String perm : perms) { if (StringUtils.isNotEmpty(perm)) { - permsSet.addAll(Arrays.asList(perm.trim().split(","))); + permsSet.addAll(StringUtils.splitList(perm.trim())); } } return permsSet; @@ -110,7 +110,7 @@ public class SysMenuServiceImpl implements ISysMenuService { Set permsSet = new HashSet<>(); for (String perm : perms) { if (StringUtils.isNotEmpty(perm)) { - permsSet.addAll(Arrays.asList(perm.trim().split(","))); + permsSet.addAll(StringUtils.splitList(perm.trim())); } } return permsSet; @@ -288,15 +288,12 @@ public class SysMenuServiceImpl implements ISysMenuService { * @return 结果 */ @Override - public String checkMenuNameUnique(SysMenu menu) { + public boolean checkMenuNameUnique(SysMenu menu) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysMenu::getMenuName, menu.getMenuName()) .eq(SysMenu::getParentId, menu.getParentId()) .ne(ObjectUtil.isNotNull(menu.getMenuId()), SysMenu::getMenuId, menu.getMenuId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java index d500c1984..3b650ecfb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java @@ -1,7 +1,6 @@ package com.ruoyi.system.service.impl; import com.ruoyi.common.satoken.utils.LoginHelper; -import com.ruoyi.system.api.domain.SysRole; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.ISysPermissionService; @@ -10,7 +9,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.HashSet; -import java.util.List; import java.util.Set; /** @@ -56,17 +54,7 @@ public class SysPermissionServiceImpl implements ISysPermissionService { if (LoginHelper.isAdmin(user.getUserId())) { perms.add("*:*:*"); } else { - List roles = user.getRoles(); - if (!roles.isEmpty() && roles.size() > 1) { - // 多角色设置permissions属性,以便数据权限匹配权限 - for (SysRole role : roles) { - Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); - role.setPermissions(rolePerms); - perms.addAll(rolePerms); - } - } else { - perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); - } + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); } return perms; } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java index 860fdec3d..8aadbaad7 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -3,7 +3,6 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; @@ -94,14 +93,11 @@ public class SysPostServiceImpl implements ISysPostService { * @return 结果 */ @Override - public String checkPostNameUnique(SysPost post) { + public boolean checkPostNameUnique(SysPost post) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysPost::getPostName, post.getPostName()) .ne(ObjectUtil.isNotNull(post.getPostId()), SysPost::getPostId, post.getPostId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -111,14 +107,11 @@ public class SysPostServiceImpl implements ISysPostService { * @return 结果 */ @Override - public String checkPostCodeUnique(SysPost post) { + public boolean checkPostCodeUnique(SysPost post) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysPost::getPostCode, post.getPostCode()) .ne(ObjectUtil.isNotNull(post.getPostId()), SysPost::getPostId, post.getPostId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index ceab41370..adb1ccf2d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -5,11 +5,11 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.mybatis.core.page.PageQuery; import com.ruoyi.common.mybatis.core.page.TableDataInfo; import com.ruoyi.common.satoken.utils.LoginHelper; @@ -106,7 +106,7 @@ public class SysRoleServiceImpl implements ISysRoleService { Set permsSet = new HashSet<>(); for (SysRole perm : perms) { if (ObjectUtil.isNotNull(perm)) { - permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + permsSet.addAll(StringUtils.splitList(perm.getRoleKey().trim())); } } return permsSet; @@ -151,14 +151,11 @@ public class SysRoleServiceImpl implements ISysRoleService { * @return 结果 */ @Override - public String checkRoleNameUnique(SysRole role) { + public boolean checkRoleNameUnique(SysRole role) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysRole::getRoleName, role.getRoleName()) .ne(ObjectUtil.isNotNull(role.getRoleId()), SysRole::getRoleId, role.getRoleId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -168,14 +165,11 @@ public class SysRoleServiceImpl implements ISysRoleService { * @return 结果 */ @Override - public String checkRoleKeyUnique(SysRole role) { + public boolean checkRoleKeyUnique(SysRole role) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysRole::getRoleKey, role.getRoleKey()) .ne(ObjectUtil.isNotNull(role.getRoleId()), SysRole::getRoleId, role.getRoleId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 6858e349c..76c45f895 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.core.constant.CacheNames; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StreamUtils; @@ -27,6 +28,7 @@ import com.ruoyi.system.mapper.*; import com.ruoyi.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -198,14 +200,11 @@ public class SysUserServiceImpl implements ISysUserService { * @return 结果 */ @Override - public String checkUserNameUnique(SysUser user) { + public boolean checkUserNameUnique(SysUser user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysUser::getUserName, user.getUserName()) .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -215,14 +214,11 @@ public class SysUserServiceImpl implements ISysUserService { * @return */ @Override - public String checkPhoneUnique(SysUser user) { + public boolean checkPhoneUnique(SysUser user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysUser::getPhonenumber, user.getPhonenumber()) .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -232,14 +228,11 @@ public class SysUserServiceImpl implements ISysUserService { * @return */ @Override - public String checkEmailUnique(SysUser user) { + public boolean checkEmailUnique(SysUser user) { boolean exist = baseMapper.exists(new LambdaQueryWrapper() .eq(SysUser::getEmail, user.getEmail()) .ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId())); - if (exist) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; + return !exist; } /** @@ -486,4 +479,12 @@ public class SysUserServiceImpl implements ISysUserService { return baseMapper.deleteBatchIds(ids); } + @Cacheable(cacheNames = CacheNames.SYS_USER_NAME, key = "#userId") + @Override + public String selectUserNameById(Long userId) { + SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper() + .select(SysUser::getUserName).eq(SysUser::getUserId, userId)); + return ObjectUtil.isNull(sysUser) ? null : sysUser.getUserName(); + } + } diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index eb580f5ec..704042f63 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -1,6 +1,6 @@ { "name": "ruoyi-cloud-plus", - "version": "1.5.0", + "version": "1.6.0", "description": "RuoYi-Cloud-Plus后台管理系统", "author": "Lion Li", "license": "MIT", @@ -40,7 +40,7 @@ "clipboard": "2.0.8", "core-js": "3.25.3", "echarts": "5.4.0", - "element-ui": "2.15.10", + "element-ui": "2.15.12", "file-saver": "2.0.5", "fuse.js": "6.4.3", "highlight.js": "9.18.5", diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue index cbd9a2533..3c0644e1c 100644 --- a/ruoyi-ui/src/layout/components/TagsView/index.vue +++ b/ruoyi-ui/src/layout/components/TagsView/index.vue @@ -1,332 +1,332 @@ - - - - - - - + + + + + + + diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js index a25437cc8..609d21590 100644 --- a/ruoyi-ui/src/permission.js +++ b/ruoyi-ui/src/permission.js @@ -1,56 +1,56 @@ -import router from './router' -import store from './store' -import { Message } from 'element-ui' -import NProgress from 'nprogress' -import 'nprogress/nprogress.css' -import { getToken } from '@/utils/auth' -import { isRelogin } from '@/utils/request' - -NProgress.configure({ showSpinner: false }) - -const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] - -router.beforeEach((to, from, next) => { - NProgress.start() - if (getToken()) { - to.meta.title && store.dispatch('settings/setTitle', to.meta.title) - /* has token*/ - if (to.path === '/login') { - next({ path: '/' }) - NProgress.done() - } else { - if (store.getters.roles.length === 0) { - isRelogin.show = true - // 判断当前用户是否已拉取完user_info信息 - store.dispatch('GetInfo').then(() => { - isRelogin.show = false - store.dispatch('GenerateRoutes').then(accessRoutes => { - // 根据roles权限生成可访问的路由表 - router.addRoutes(accessRoutes) // 动态添加可访问路由表 - next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 - }) - }).catch(err => { - store.dispatch('LogOut').then(() => { - Message.error(err) - next({ path: '/' }) - }) - }) - } else { - next() - } - } - } else { - // 没有token - if (whiteList.indexOf(to.path) !== -1) { - // 在免登录白名单,直接进入 - next() - } else { - next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 - NProgress.done() - } - } -}) - -router.afterEach(() => { - NProgress.done() -}) +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' +import { isRelogin } from '@/utils/request' + +NProgress.configure({ showSpinner: false }) + +const whiteList = ['/login', '/register'] + +router.beforeEach((to, from, next) => { + NProgress.start() + if (getToken()) { + to.meta.title && store.dispatch('settings/setTitle', to.meta.title) + /* has token*/ + if (to.path === '/login') { + next({ path: '/' }) + NProgress.done() + } else { + if (store.getters.roles.length === 0) { + isRelogin.show = true + // 判断当前用户是否已拉取完user_info信息 + store.dispatch('GetInfo').then(() => { + isRelogin.show = false + store.dispatch('GenerateRoutes').then(accessRoutes => { + // 根据roles权限生成可访问的路由表 + router.addRoutes(accessRoutes) // 动态添加可访问路由表 + next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + }) + }).catch(err => { + store.dispatch('LogOut').then(() => { + Message.error(err) + next({ path: '/' }) + }) + }) + } else { + next() + } + } + } else { + // 没有token + if (whiteList.indexOf(to.path) !== -1) { + // 在免登录白名单,直接进入 + next() + } else { + next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 + NProgress.done() + } + } +}) + +router.afterEach(() => { + NProgress.done() +}) diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js index 6d5cb623b..7e19cf0a8 100644 --- a/ruoyi-ui/src/plugins/download.js +++ b/ruoyi-ui/src/plugins/download.js @@ -17,9 +17,9 @@ export default { url: url, responseType: 'blob', headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(async (res) => { - const isLogin = await blobValidate(res.data); - if (isLogin) { + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { const blob = new Blob([res.data], { type: 'application/octet-stream' }) this.saveAs(blob, decodeURI(res.headers['download-filename'])) } else { @@ -42,9 +42,9 @@ export default { 'Authorization': 'Bearer ' + getToken(), 'datasource': localStorage.getItem("dataName") } - }).then(async (res) => { - const isLogin = await blobValidate(res.data); - if (isLogin) { + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { const blob = new Blob([res.data], { type: 'application/zip' }) this.saveAs(blob, name) } else { diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index f94fa0e5e..850685cd6 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -74,7 +74,7 @@ service.interceptors.response.use(res => { // 获取错误信息 const msg = errorCode[code] || res.data.msg || errorCode['default'] // 二进制数据则直接返回 - if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){ + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { return res.data } if (code === 401) { @@ -127,8 +127,8 @@ export function download(url, params, filename, config) { responseType: 'blob', ...config }).then(async (data) => { - const isLogin = await blobValidate(data); - if (isLogin) { + const isBlob = blobValidate(data); + if (isBlob) { const blob = new Blob([data]) saveAs(blob, filename) } else { diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js index a2c8e4c4a..e42151ea0 100644 --- a/ruoyi-ui/src/utils/ruoyi.js +++ b/ruoyi-ui/src/utils/ruoyi.js @@ -228,12 +228,6 @@ export function tansParams(params) { } // 验证是否为blob格式 -export async function blobValidate(data) { - try { - const text = await data.text(); - JSON.parse(text); - return false; - } catch (error) { - return true; - } +export function blobValidate(data) { + return data.type !== 'application/json' } diff --git a/ruoyi-ui/src/views/demo/demo/index.vue b/ruoyi-ui/src/views/demo/demo/index.vue index 0ea2e4acd..abc2963f8 100644 --- a/ruoyi-ui/src/views/demo/demo/index.vue +++ b/ruoyi-ui/src/views/demo/demo/index.vue @@ -24,11 +24,12 @@ v-model="daterangeCreateTime" size="small" style="width: 240px" - value-format="yyyy-MM-dd" + value-format="yyyy-MM-dd HH:mm:ss" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" + :default-time="['00:00:00', '23:59:59']" > diff --git a/ruoyi-ui/src/views/demo/tree/index.vue b/ruoyi-ui/src/views/demo/tree/index.vue index 6cfa7f243..d66c6f96e 100644 --- a/ruoyi-ui/src/views/demo/tree/index.vue +++ b/ruoyi-ui/src/views/demo/tree/index.vue @@ -15,11 +15,12 @@ v-model="daterangeCreateTime" size="small" style="width: 240px" - value-format="yyyy-MM-dd" + value-format="yyyy-MM-dd HH:mm:ss" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" + :default-time="['00:00:00', '23:59:59']" > diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 19399c58a..dbbc61f56 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -145,7 +145,7 @@ export default { data() { return { // 版本号 - version: "1.5.0", + version: "1.6.0", }; }, methods: { diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue index c9ec7bf8b..d98457a90 100644 --- a/ruoyi-ui/src/views/login.vue +++ b/ruoyi-ui/src/views/login.vue @@ -56,7 +56,7 @@ diff --git a/ruoyi-ui/src/views/register.vue b/ruoyi-ui/src/views/register.vue index 41773a090..3d46b8af7 100644 --- a/ruoyi-ui/src/views/register.vue +++ b/ruoyi-ui/src/views/register.vue @@ -61,7 +61,7 @@ diff --git a/ruoyi-ui/src/views/system/config/index.vue b/ruoyi-ui/src/views/system/config/index.vue index c48b97a2b..984b7e29b 100644 --- a/ruoyi-ui/src/views/system/config/index.vue +++ b/ruoyi-ui/src/views/system/config/index.vue @@ -1,343 +1,344 @@ - - - \ No newline at end of file + + + diff --git a/ruoyi-ui/src/views/system/dict/index.vue b/ruoyi-ui/src/views/system/dict/index.vue index 13a5f3d4f..2102df0b6 100644 --- a/ruoyi-ui/src/views/system/dict/index.vue +++ b/ruoyi-ui/src/views/system/dict/index.vue @@ -1,347 +1,348 @@ - - - \ No newline at end of file + + + diff --git a/ruoyi-ui/src/views/system/logininfor/index.vue b/ruoyi-ui/src/views/system/logininfor/index.vue index 3cde9e8d0..7364491ac 100644 --- a/ruoyi-ui/src/views/system/logininfor/index.vue +++ b/ruoyi-ui/src/views/system/logininfor/index.vue @@ -1,242 +1,243 @@ - - - - + + + + diff --git a/ruoyi-ui/src/views/system/operlog/index.vue b/ruoyi-ui/src/views/system/operlog/index.vue index a1ffc1553..5f3981fde 100644 --- a/ruoyi-ui/src/views/system/operlog/index.vue +++ b/ruoyi-ui/src/views/system/operlog/index.vue @@ -1,304 +1,305 @@ - - - - + + + + diff --git a/ruoyi-ui/src/views/system/oss/config.vue b/ruoyi-ui/src/views/system/oss/config.vue index 0120641d8..d04571517 100644 --- a/ruoyi-ui/src/views/system/oss/config.vue +++ b/ruoyi-ui/src/views/system/oss/config.vue @@ -19,14 +19,10 @@ @keyup.enter.native="handleQuery" /> - + - + + @@ -87,7 +83,7 @@ custom - +