文件结构

  1. com.ruoyi
  2. ├── common // 工具类
  3. └── annotation // 自定义注解
  4. └── config // 全局配置
  5. └── constant // 通用常量
  6. └── core // 核心控制
  7. └── enums // 通用枚举
  8. └── exception // 通用异常
  9. └── json // JSON数据处理
  10. └── utils // 通用类处理
  11. └── xss // XSS过滤处理
  12. ├── framework // 框架核心
  13. └── aspectj // 注解实现
  14. └── config // 系统配置
  15. └── datasource // 数据权限
  16. └── manager // 异步处理
  17. └── shiro // 权限控制
  18. └── util // 通用工具
  19. └── web // 前端控制
  20. ├── ruoyi-generator // 代码生成(可移除)
  21. ├── ruoyi-quartz // 定时任务(可移除)
  22. ├── ruoyi-system // 系统代码
  23. ├── ruoyi-admin // 后台服务
  24. ├── ruoyi-xxxxxx // 其他模块

配置文件

通用配置 application.yml

  1. # 项目相关配置
  2. ruoyi:
  3. # 名称
  4. name: RuoYi
  5. # 版本
  6. version: 3.2.0
  7. # 版权年份
  8. copyrightYear: 2019
  9. # 文件上传
  10. profile: D:/profile/
  11. # 获取ip地址开关
  12. addressEnabled: true
  13. # 开发环境配置
  14. server:
  15. # 服务端口
  16. port: 80
  17. servlet:
  18. # 项目contextPath
  19. context-path: /
  20. tomcat:
  21. # tomcat的URI编码
  22. uri-encoding: UTF-8
  23. # tomcat最大线程数,默认为200
  24. max-threads: 800
  25. # Tomcat启动初始化的线程数,默认值25
  26. min-spare-threads: 30
  27. # 日志配置
  28. logging:
  29. level:
  30. com.ruoyi: debug
  31. org.springframework: WARN
  32. org.spring.springboot.dao: debug
  33. # 用户配置
  34. user:
  35. password:
  36. # 密码错误{maxRetryCount}次锁定10分钟
  37. maxRetryCount: 5
  38. # Spring配置
  39. spring:
  40. # 模板引擎
  41. thymeleaf:
  42. mode: HTML
  43. encoding: utf-8
  44. # 禁用缓存
  45. cache: false
  46. # 资源信息
  47. messages:
  48. # 国际化资源文件路径
  49. basename: i18n/messages
  50. jackson:
  51. time-zone: GMT+8
  52. date-format: yyyy-MM-dd HH:mm:ss
  53. profiles:
  54. active: druid
  55. # 文件上传
  56. servlet:
  57. multipart:
  58. max-file-size: 30MB
  59. max-request-size: 30MB
  60. # 服务模块
  61. devtools:
  62. restart:
  63. # 热部署开关
  64. enabled: true
  65. # MyBatis
  66. mybatis:
  67. # 搜索指定包别名
  68. typeAliasesPackage: com.ruoyi
  69. # 配置mapper的扫描,找到所有的mapper.xml映射文件
  70. mapperLocations: classpath*:mapper/**/*Mapper.xml
  71. # 加载全局的配置文件
  72. configLocation: classpath:mapper/mybatis-config.xml
  73. # PageHelper分页插件
  74. pagehelper:
  75. helperDialect: mysql
  76. reasonable: true
  77. supportMethodsArguments: true
  78. params: count=countSql
  79. # Shiro
  80. shiro:
  81. user:
  82. # 登录地址
  83. loginUrl: /login
  84. # 权限认证失败地址
  85. unauthorizedUrl: /unauth
  86. # 首页地址
  87. indexUrl: /index
  88. # 验证码开关
  89. captchaEnabled: true
  90. # 验证码类型 math 数组计算 char 字符
  91. captchaType: math
  92. cookie:
  93. # 设置Cookie的域名 默认空,即当前访问的域名
  94. domain:
  95. # 设置cookie的有效访问路径
  96. path: /
  97. # 设置HttpOnly属性
  98. httpOnly: true
  99. # 设置Cookie的过期时间,天为单位
  100. maxAge: 30
  101. session:
  102. # Session超时时间(默认30分钟)
  103. expireTime: 30
  104. # 同步session到数据库的周期(默认1分钟)
  105. dbSyncPeriod: 1
  106. # 相隔多久检查一次session的有效性,默认就是10分钟
  107. validationInterval: 10
  108. # 防止XSS攻击
  109. xss:
  110. # 过滤开关
  111. enabled: true
  112. # 排除链接(多个用逗号分隔)
  113. excludes: /system/notice/*
  114. # 匹配链接
  115. urlPatterns: /system/*,/monitor/*,/tool/*

数据源配置 application-druid.yml

  1. # 数据源配置
  2. spring:
  3. datasource:
  4. type: com.alibaba.druid.pool.DruidDataSource
  5. driverClassName: com.mysql.cj.jdbc.Driver
  6. druid:
  7. # 主库数据源
  8. master:
  9. url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
  10. username: root
  11. password: password
  12. # 从库数据源
  13. slave:
  14. # 从数据源开关/默认关闭
  15. enabled: false
  16. url:
  17. username:
  18. password:
  19. # 初始连接数
  20. initialSize: 5
  21. # 最小连接池数量
  22. minIdle: 10
  23. # 最大连接池数量
  24. maxActive: 20
  25. # 配置获取连接等待超时的时间
  26. maxWait: 60000
  27. # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
  28. timeBetweenEvictionRunsMillis: 60000
  29. # 配置一个连接在池中最小生存的时间,单位是毫秒
  30. minEvictableIdleTimeMillis: 300000
  31. # 配置一个连接在池中最大生存的时间,单位是毫秒
  32. maxEvictableIdleTimeMillis: 900000
  33. # 配置检测连接是否有效
  34. validationQuery: SELECT 1 FROM DUAL
  35. testWhileIdle: true
  36. testOnBorrow: false
  37. testOnReturn: false
  38. webStatFilter:
  39. enabled: true
  40. statViewServlet:
  41. enabled: true
  42. # 设置白名单,不填则允许所有访问
  43. allow:
  44. url-pattern: /monitor/druid/*
  45. filter:
  46. stat:
  47. enabled: true
  48. # 慢SQL记录
  49. log-slow-sql: true
  50. slow-sql-millis: 1000
  51. merge-sql: true
  52. wall:
  53. config:
  54. multi-statement-allow: true

代码生成配置 generator.yml

  1. # 代码生成
  2. gen:
  3. # 作者
  4. author: ruoyi
  5. # 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
  6. packageName: com.ruoyi.system
  7. # 自动去除表前缀,默认是true
  8. autoRemovePre: true
  9. # 表前缀(类名不会包含表前缀)
  10. tablePrefix: sys_

核心技术

SpringBoot框架

1、介绍Spring Boot是一款开箱即用框架,提供各种默认配置来简化项目配置。让我们的Spring应用变的更轻量化、更快的入门。在主程序执行main函数就可以运行。你也可以打包你的应用为jar并通过使用java -jar来运行你的Web应用。它遵循"约定优先于配置"的原则,使用SpringBoot只需很少的配置,大部分的时候直接使用默认的配置即可。可以与Spring Cloud的微服务无缝结合。Spring Boot2.0 环境要求必须是jdk8或以上版本,Tomcat8或以上版本

2、优点

  • 使编码变得简单: 推荐使用注解。
  • 使配置变得简单: 自动配置、快速构建项目、快速集成新技术能力 没有冗余代码生成和XML配置的要求
  • 使部署变得简单: 内嵌Tomcat、Jetty、Undertow等web容器,无需以war包形式部署
  • 使监控变得简单: 自带项目监控

Shiro安全控制

1、介绍Apache Shiro是Java的一个安全框架。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。其不仅可以用在JavaSE环境,也可以用在 JavaEE 环境。

2、优点

  • 易于理解的 Java Security API
  • 简单的身份认证,支持多种数据源
  • 对角色的简单的授权,支持细粒度的授权
  • 不跟任何的框架或者容器捆绑,可以独立运行3、特性Authentication身份认证/登录,验证用户是不是拥有相应的身份Authorization授权,即验证权限,验证某个已认证的用户是否拥有某个权限,即判断用户是否能做事情SessionManagement会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中Cryptography加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储Caching缓存,比如用户登录后,其用户信息,拥有的角色/权限不必每次去查,提高效率ConcurrencyShiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去Testing提供测试支持RunAs允许一个用户假装为另一个用户(如果他们允许)的身份进行访问RememberMe记住我,这是非常常见的功能,即一次登录后,下次再来的话不用登录了

4、架构Subject主体,代表了当前的“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SercurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者SecurityManage安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互Realm域,Shiro从Realm获取安全数据(如用户,角色,权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以有1个或多个Realm,我们一般在应用中都需要实现自己的RealmSessionManager如果写过Servlet就应该知道Session的概念,Session需要有人去管理它的生命周期,这个组件就是SessionManagerSessionDAODAO大家都用过,数据库访问对象,用于会话的CRUD,比如我们想把Session保存到数据库,那么可以实现自己的SessionDAO,也可以写入缓存,以提高性能CacheManager缓存控制器,来管理如用户,角色,权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能

应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager;我们需要给Shrio的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断,Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。

Shiro不会去维护用户,维护权限;这些需要自己去设计/提供;然后通过响应的接口注入给Shiro即可

Thymeleaf模板

1、介绍Thymeleaf是一个用于Web和独立Java环境的模板引擎,能够处理HTML、XML、JavaScript、CSS甚至纯文本。能轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。与其它模板引擎(比如FreeMaker)相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用(更加方便前后端分离,比如方便类似VUE前端设计页面),抛弃JSP吧。Thymeleaf 3.0是一个完全彻底重构的模板引擎,极大的减少内存占用和提升性能和并发性,避免v2.1版因大量的输出标记的集合产生的资源占用。Thymeleaf 3.0放弃了大多数面向DOM的处理机制,变成了一个基于事件的模板处理器,它通过处理模板标记或文本并立即生成其输出,甚至在新事件之前响应模板解析器/缓存事件。Thymeleaf是Spring Boot官方的推荐使用模板。

2、优点

  • 国际化支持非常简单
  • 语法简单,功能强大。内置大量常用功能,使用非常方便
  • 可以很好的和Spring集成
  • 静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调
  • Spring Boot 官方推荐,用户群广