跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • Spring Data JPA
  • MyBatis

  • Spring

  • SpringBoot

  • Jdk

  • Tomcat

  • Netty

  • 若依

    • 源码分析

      • 项目概述
      • 项目运行
      • 构建发布到Linux
      • 系统菜单介绍
      • 开发环境运行
      • 表结构介绍
      • 目录文件介绍
      • 主配置文件介绍
      • SpringBoot简介
      • SpringSecurity简介
      • SpringSecurity配置介绍
      • SpringSecurity密码加密
      • SpringSecurity退出配置
      • SpringSecurity登录配置
      • SpringSecurity权限讲解
      • SpringSecurity权限注解
      • JWT介绍
      • JWT实现
      • JWT过滤器
      • Mybatis配置详解
      • Mybatis使用方式
      • 分页配置详解
      • 分页插件使用
      • 分页代码详解
      • 数据源配置详解
      • 数据源代码详解
      • 多数据源使用
      • 28 新增多数据源(相同数据库)
      • 新增多数据源(不同数据库)
      • 多数据源代码详解
      • 事务简介
      • 事务使用
      • 登录日志
      • 操作日志详解
      • 操作日志实现
      • 数据权限使用详解
      • 数据权限代码详解
      • 数据权限业务实现
      • 代码生成使用(单表)
      • 40 代码生成使用(树表)
      • 代码生成实现详解
      • 定时任务使用详解
      • 定时任务代码详解
      • 服务监控讲解
      • Swagger系统接口使用详解
      • 系统接口实现详解
      • XSS脚本过滤详解
      • 防止重复提交过滤详解
      • 全局异常处理器
      • 框架验证详解
      • 日志配置详解
      • 上传详解
      • 下载详解
      • 前端-前端框架介绍
      • 前端-package.json详解
      • 前端-vue.config.js详解
      • main.js详解
      • 前端-布局设置
      • 导航栏
      • 前端-侧边栏
      • 前端-顶部栏
      • scoped作用域
      • 前端-scoped样式穿透
      • 前端-路由跳转的两种方式
      • 前端-动态路由的跳转方式
      • 前端-开发规范&流程
      • 前端-请求流程
      • 前端-组件使用-引入外部依赖
      • 前端-组件使用-注册组件
      • 前端-组件使用-组件通信
      • 前端-页面权限
      • 前端-多级目录
      • 前端-页签缓存
      • 前端-使用图标
      • 前端-使用字典(dicts方式)
      • 前端-使用参数
      • Postman测试接口
      • 代码单元测试
      • 开发文档介绍和部署
      • 集成Oauth2.0
      • 构建发布到Tomcat
      • 新建业务模块(多模块)
      • 开发自己的业务(多模块)
      • 前端-文件上传
      • 前端-文件下载
      • 前端-配置后端接口地址或域名
      • 前端-部署应用到子路径
      • 禁止多终端同时登录实现
      • 静态资源整合到后端访问
      • 使用加密方式传输登录密码
      • 多数据源事务的一致性
      • 主子表代码生成详解
      • 3.4.0版本更新介绍
      • 使用undertow容器
      • 集成actuator实现优雅关闭应用
      • 集成knife4j实现swagger文档增强
      • 集成easyexcel实现excel表格增强
      • 集成mybatis-plus实现mybatis增强
      • 集成ip2region实现离线IP地址定位
      • 集成druid实现数据库密码加密
      • 集成aj-captcha实现滑块验证码
      • 集成sharding-jdbc实现分库分表
      • v3.5.0版本更新介绍
      • 使用docker实现一键部署
      • v3.6.0版本更新介绍
      • 限流控制详解
      • v3.7.0版本更新介绍
      • v3.8.0版本更新介绍
      • v3.8.1版本更新介绍
        • SSO
        • 绑定使用二级域名
        • 验证码源码解析
        • 资料
      • 源码分析
      • Ruoyi-Flowable
    • Traefik

    • Openresty

    • 开源框架
    • 若依
    • 源码分析
    Revin
    2023-10-29
    目录

    v3.8.1版本更新介绍

    # 新增Vue3前端代码生成模板

    ruoyi-generator/src/main/resources/vm/vue/v3

    vue2的方式是data()方式,vue3使用的是setup的方式。

    如果想使用vue3查看当前目录的redme:

    如果使用的是RuoYi-Vue3前端,那么需要覆盖一下此目录的模板index.vue.vm、index-tree.vue.vm文件到上级vue目录。

    # 新增图片预览组件

    ruoyi-ui/src/components/ImagePreview/index.vue

    不同的环境配置文件:.env.developmen、t .env.production、 .env.staging

    # 自定义xss校验注解实现

    ruoyi-admin/src/main/resources/application.yml

    # 防止XSS攻击
    xss: 
      # 过滤开关
      enabled: true
      # 排除链接(多个用逗号分隔)
      excludes: /system/notice
      # 匹配链接
      urlPatterns: /system/*,/monitor/*,/tool/*
    
    1
    2
    3
    4
    5
    6
    7
    8

    ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java

    使用@Xss

    @Xss(message = "公告标题不能包含脚本字符")
    @NotBlank(message = "公告标题不能为空")
    @Size(min = 0, max = 50, message = "公告标题不能超过50个字符")
    public String getNoticeTitle()
    {
        return noticeTitle;
    }
    
    1
    2
    3
    4
    5
    6
    7

    比如所虽然对/system/notice进行了排除(实体:ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java),是因为有内容是个富文本,但是可以对其他字段进行单独设置校验xss。比如公告的标题。(路径:系统管理》通知公告)

    校验生效

    • 1、如果直接入口就是入库实体,直接加在入口处即可
    • 2、如果是方法中的,可以使用手动校验

    1、如果直接入口就是入库实体,直接加在入口处即可

    比如:

    ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

    @Validated

    /**
     * 新增用户
     */
    @PreAuthorize("@ss.hasPermi('system:user:add')")
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysUser user)
    {
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    2、如果是方法中的,可以使用手动校验

    无法在入口校验,因为上传是一个excel

    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
    @PreAuthorize("@ss.hasPermi('system:user:import')")
    @PostMapping("/importData")
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception{
    
    }
    
    1
    2
    3
    4
    5
    6

    可以在方法中入库的时候进行校验

    userService.importUser
    
    1

    ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java

    user 时一个SysUser实体对象,ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java,里面定义的那些注解规则就会进行校验

    BeanValidators.validateWithException(validator, user);
    
    1

    xxl注解的实现

    自定义校验器实现

    ruoyi-common/src/main/java/com/ruoyi/common/xss

    # 自定义文字复制剪贴指令

    # 代码生成预览支持复制内容

    v-clipboard 文字复制剪贴

    ruoyi-ui/src/directive/module/clipboard.js

    如何使用? 官方文档内容复制 (opens new window)

    示例:代码生成预览支持复制内容

    ruoyi-ui/src/directive/module/clipboard.js

    <el-link :underline="false" icon="el-icon-document-copy" v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" style="float:right">复制</el-link>
    
    
    /** 复制代码成功 */
    clipboardSuccess() {
      this.$modal.msgSuccess("复制成功");
    },
    
    1
    2
    3
    4
    5
    6
    7

    # 路由支持单独配置菜单或角色权限

    ruoyi-ui/src/router/index.js

    主要是路由上配置以下两个

     * roles: ['admin', 'common']       // 访问路由的角色权限
     * permissions: ['a:a:a', 'b:b:b']  // 访问路由的菜单权限
     
     // 动态路由,基于用户权限动态去加载
    
    1
    2
    3
    4

    可以单独对某个路由进行角色和菜单权限

    具体的权限校验源码:ruoyi-ui/src/store/modules/permission.js

    // 动态路由遍历,验证是否具备权限
    export function filterDynamicRoutes(routes) {
      const res = []
      routes.forEach(route => {
        if (route.permissions) {
          if (auth.hasPermiOr(route.permissions)) {
            res.push(route)
          }
        } else if (route.roles) {
          if (auth.hasRoleOr(route.roles)) {
            res.push(route)
          }
        }
      })
      return res
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16

    # 用户管理部门查询选择节点后分页参数初始

    ruoyi-ui/src/views/system/user/index.vue

     // 节点单击事件
        handleNodeClick(data) {
          this.queryParams.deptId = data.id;
          this.handleQuery(); // 这一行
        },
    
    1
    2
    3
    4
    5

    以前点击左侧部门切换,用户可能分页已经在第二页,那么点击部门切换分页没有初始化(以前的this.getList())

    # 修复打包后字体图标偶现的乱码问题

    生产环境图标加载时乱码 (opens new window)

    可以采用如下方案,在vue.config.js加入sassOptions选项(建议)。

    ruoyi-ui/vue.config.js 已加入。

    css: {
      loaderOptions: {
        sass: {
          sassOptions: { outputStyle: "expanded" }
        }
      }
    },
    
    1
    2
    3
    4
    5
    6
    7

    详细的说明可以参考官方文档 https://webpack.js.org/loaders/sass-loader/#sassoptions

    # 优化分页方法设置成通用方便灵活调用

    ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java

     /**
     * 设置请求分页数据
     */
    protected void startPage()
    {
        PageUtils.startPage();
    }
    
    1
    2
    3
    4
    5
    6
    7

    以前是写在controller里的startPage,单独拿出来了,因为不可能只在controller里调用分页

    ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java

    上次更新: 2025/04/03, 11:07:08
    v3.8.0版本更新介绍
    SSO

    ← v3.8.0版本更新介绍 SSO→

    最近更新
    01
    tailwindcss
    03-26
    02
    PaddleSpeech
    02-18
    03
    whisper
    02-18
    更多文章>
    Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式