当前位置: 首页 > news >正文

概念、框架简介--ruoyi学习(一)

开始进行ruoyi框架的学习,比起其他的前后端不分离的,这个起码看的清晰一些吧。

这一节主要是看了ruoyi的官方文档后,记录了以下不懂的概念,并且整理了ruoyi框架中的相关内容。

一些概念

前端

  1. store

store是状态管理库,用于管理前端应用程序(在浏览器中运行的Web应用程序)的状态。前端应用程序通常由多个组件组成,这些组件之间可能共享数据和状态,因此为了统一管理和共享状态,使用状态管理库来创建一个全局的store,存储应用程序的状态数据。

"store"存储了应用程序的各种状态,例如用户登录状态、页面内容、选项状态等。组件可以从"store"中获取状态数据,并且可以通过派发(dispatch)操作来触发状态的变化。变化后的状态将被存储在"store"中,并且会自动更新相关的组件。

通过使用"store",前端开发人员可以更好地组织和管理应用程序的状态,避免了状态分散和数据流混乱的问题。它提供了一种可预测和可维护的方式来处理状态变化,并使得状态在应用程序中的传递和共享更加简单和高效。

后端

  1. Servlet

servlet用于在Web服务器上处理客户端请求和生成响应。servlet是一种服务器端的Java程序,主要用于开发动态的Java程序。Servlet主要用于处理Web请求和生成动态Web内容。它可以接收来自Web浏览器的请求,执行相应的任务,并将生成的结果发送回浏览器。Spring框架的核心是基于Servlet的,Spring框架提供了一个称为DispatcherServlet的前端控制器,它是一个特殊的Servlet,用于处理所有的Web请求。DispatcherServlet负责将传入的请求路由到相应的处理程序(也称为控制器),并处理视图渲染、数据绑定等任务。因此,Spring框架在Servlet的基础上提供了更高级的抽象和功能,使得开发Web应用程序更加方便和灵活。

  1. Spring Security

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。

可以实现的功能:

  1. Authentication 认证,就是用户登录
  2. Authorization 授权,判断用户拥有什么权限,可以访问什么资源
  3. 安全防护,可以抵御    跨站脚本攻击,session攻击等

spring securityshiro的关系:

  1. 都可以完成认证功能、授权功能、加密功能、会话管理、缓存支持以及remember me功能(当用户短暂地关闭浏览器后,仍然可以通过存储在本地的token不重复登录地情况下发送请求)。
  2. spring security需要依托spring容器进行开发,shiro的配置和使用比较简单,无需依赖任何容器和框架。
  1. Jetty

jetty和tomcat一样,都是为基于java的web容器,比如JSP和Servlet提供运行环境。但是相比于tomcat,jetty要更轻量级一些,而且jetty更加灵活,体现在jetty的可插拔性和可扩展性,jetty提供了很多接口,可以通过这些接口进行进一步开发。但是在大规模的企业级应用时,jetty需要实现大量的扩展,在这种情况tomcat是更优的选择。

  1. Spring EL

EL:Expression Language表达式语言。其作用是用于在JSP页面中获取数据,从而让我们的JSP脱离java代码块和JSP表达式。例如:在浏览器中输出请求域中名称为message的内容。(感觉这个就很像之前前后端不分离的时候,在前端渲染数据)

 

Spring3 中引入了 Spring 表达式语言 Spring ELSpEL 是一种强大,简洁的装配 Bean 的方式,它可以通过运行期间执行的表达式将值装配到我们的属性或构造函数当中,更可以调用 JDK 中提供的静态常量,获取外部 Properties 文件中的的配置。Spring EL中用的是#{},举个例子:

 

框架

权限注解

Spring Security允许开发者在定义接口访问的方法上面添加注解,控制访问权限。

权限方法

@PreAuthorize注解用于配置接口要求用户拥有某些权限才可访问,它拥有如下方法:

方法

参数

描述

hasPermi

String

验证用户是否具备某权限

lacksPermi

String

验证用户是否不具备某权限,与 hasPermi逻辑相反

hasAnyPermi

String

验证用户是否具有以下任意一个权限

hasRole

String

判断用户是否拥有某个角色

lacksRole

String

验证用户是否不具备某角色,与 isRole逻辑相反

hasAnyRoles

String

验证用户是否具有以下任意一个角色,多个逗号分隔

使用示例

其中@ss代表的是PermissionService(ruoyi自定的权限服务)服务,对每个接口拦截并调用PermissionService的对应方法判断接口调用者的权限。

数据权限示例:

 


角色权限示例:

 

公开接口

如果某个接口不需要验证权限就可以访问,那么直接对这个接口的请求放行就可以。

  1. 把@PreAuthorize注释掉或者直接删掉。
  2. 使用@Anonymous注解。

但是我没有使用@Anonymous注解,只是把pre注解注释掉了也可以访问呢。因为如果这两个注解都不加的话,就相当于默认放行了。

坏了,如果用@Anonymous注解,那么一定得把@PreAuthorize注释掉啊,不然还是会进行权限控制的。因为@pre的优先级要比@ano的高一些。

 

事务管理

@Transactional注解只能应用到public可见度的方法上,可以被应用于接口定义和接口方法,方法会覆盖类上面声明的事务。

实现事务管理比较简单,在类或者方法上添加@Transactional注解就行。

1.Spring中进行事务管理的时候,默认的事务规则是遇到运行时异常(RuntimeException)或者程序错误(Error)才会回滚。所以如果想对其他的异常进行检查并事务回滚,可以使用rollbackFor属性明确指定异常。

2.在业务层捕捉完异常之后,不能直接处理异常,要把它抛出去,然后在控制层统一管理。如果在业务层直接处理了异常,那么Spring不知道你的事务到底有没有成功执行,怎么会对异常进行处理并回滚呢。

正确做法示例:

 

异常处理

在实际开发中,如果我们在业务模块中使用try...catch...对异常进行捕获和处理,很容易造成代码的重复和繁杂。所以我们在业务中只保留业务相关的代码,在可能发生异常的方法里把异常throw给控制器,然后由全局异常处理器对异常统一管理。

步骤:

  1. 定义一个异常类。
  2. 定义一个全局异常controller。在这个controller上要添加@RestControllerAdvice注解。添加了这个注解后,就可以捕获全局异常后使用这个controller来处理。
  3. 在2中的全局异常类中,进行相关异常的处理。首先在不同的处理方法上面添加@ExceptionHandler(value = BusinessException.class),表示这个方法用于处理抛出的BusinessException异常。

全局异常controller类的代码如下:

 

参数验证

使用@Validate来校验数据,如果数据异常则统一抛出异常,方便全局异常处理器统一处理。

数据校验

  1. 在字段的GET方法或者直接在字段上声明数据的校验逻辑:​​​​​​​​​​​​​​
  2. 在对应方法的参数列表中加入注解@Validated,表示对这个参数按照提前设计好的校验逻辑进行校验。


 

自定义分组校验

如果对于同一个字段在不同的方法中有不同的校验逻辑,可以通过groups属性设置,根据操作类型不同进行不同情况的校验。

  1. 新增接口,标识不同的操作类型。
  2. 添加字段的校验逻辑,并且设置它所涉及的操作类型。
  3. 在接收方法的参数列表中声明当前方法调用该字段的哪一类操作校验。

 

防重复提交

在接口方法上添加@RepeatSubmit注解即可,注解参数说明:

参数

类型

默认值

描述

interval

int

5000

间隔时间(ms),小于此时间视为重复提交

message

String

不允许重复提交,请稍后再试

提示消息

实体类

AjaxResult

ruoyi里面封装了AjaxResult这个实体类,还以为这个类是和前端有什么特别的关系。原来就是一个继承了HashMap的子类,里面封装了error和success两个方法,负责在后端返回数据失败/成功时返回对应的处理结果。

注解

异常相关注解

在controller类上添加@ControllerAdvice或者@RestControllerAdvice,这两个注解的作用是差不多的,都是为了实现自定义的全局异常管理,加了这个注解的类就是一个全局异常控制类。

当自定义类加@ControllerAdvice注解时,方法需要返回json数据时,每个方法还需要添加@ResponseBody注解。

当自定义类加@RestControllerAdvice注解时,方法自动返回json数据,每个方法无需再添加@ResponseBody注解。

如果添加了相关注解之后,仍然不能捕捉到业务层抛出的全局异常并进行相应处理,可能是因为SpringBoot启动类没有扫描到这个异常处理类。如:启动类在“com.galen.cloud.portal”包下,那么只有com.galen.cloud.portal包下的类会被扫描加载)。所以添加上对应的scanBasePackages 即可(我这边改为扫描所有匹配com.galen.*的包)。

相关文章:

概念、框架简介--ruoyi学习(一)

开始进行ruoyi框架的学习,比起其他的前后端不分离的,这个起码看的清晰一些吧。 这一节主要是看了ruoyi的官方文档后,记录了以下不懂的概念,并且整理了ruoyi框架中的相关内容。 一些概念 前端 store store是状态管理库&#x…...

IDEA的基础使用——【初识IDEA】

IDEA的基础使用——【初识IDEA】 文章目录 IDEA简介前言官网 IDEA的下载与安装选择下载路径勾选自己需要的其余按默认选项进行即可 目录简介安装目录简介 运行Hello WorldIDEA快捷键常用模板模板一:psvm(main)模板二:模板三&#…...

LeetCode刷题总结-动态规划篇

LeetCode刷题总结-动态规划篇 本文总结LeetCode上有动态规划的算法题,推荐刷题总数为54道。具体考点分析如下图: 1.中心扩展法 题号:132. 分割回文串 II,难度困难 2.背包问题 题号:140. 单词拆分 II,难…...

el-table使用xlsx实现导入文件编辑功能

需求:列表根据xlsx文件导入后,和列表进行对比,之后实现编辑功能 1.下载xlsx 我下的是之前的版本,新版不知道兼不兼容,这个包900多k npm install xlsx0.14.5 2.在需要使用表格导入的页面引入 import XLSX from &quo…...

Android9、11 有线网络开关设置

Android9、11 有线网络开关设置 Android9、11 有线网络开关设置_android 以太网开关_峥嵘life的博客-CSDN博客...

【MySQL】mysql问题 | [ERROR] unknown variable ‘column-statistics=0‘

一、说明 1、用到一个开源项目,dbBkTool[asurplus] 2、这个项目用于MySQL定时备份的 3、然后有个执行的时候,发下报错 [ERROR] unknown variable column-statistics0 二、解决 1、把MySQL客户端升级到8.0.19之后,就不报错了 2、column-stat…...

ElasticSearch 7.x

前言 elastic表示可伸缩,search表示查询。所以es的核心即为查询。通常情况下,我们的数据可以分为三类:结构化数据、非结构化数据、半结构化数据。 结构化数据:一般会用特定的结构来组织和管理数据,表现为二维表结构。…...

MVC乱码问题

RequestMapping(value "insert",produces {"text/html;charsetutf-8"}) //前端响应回去加响应头,解决乱码问题,这个还跟JSP响应头还不一样,这是响应的字符串,纯文本,那个前端的是out.Writer()对象&#xff…...

1004. 最大连续1的个数 III

题目描述&#xff1a; 主要思路&#xff1a; 刚看到这个问题首先想到的是二分答案&#xff0c;二分长度&#xff0c;然后利用滑动窗口判断是否可以达成。 class Solution { public:bool find(int x,vector<int> nums, int k){int now0;for(int i0,j0;i<nums.size();…...

【机器学习】西瓜书学习心得及课后习题参考答案—第3章线性模型

过了一遍第三章&#xff0c;大致理解了内容&#xff0c;认识了线性回归模型&#xff0c;对数几率回归模型&#xff0c;线性判别分析方法&#xff0c;以及多分类学习&#xff0c;其中有很多数学推理过程以参考他人现有思想为主&#xff0c;没有亲手去推。 术语学习 线性模型 l…...

面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么&#xff0c;大多数回答都是说请求响应之后 DOM 怎么被构建&#xff0c;被绘制出来。但是你有没有想过&#xff0c;收到的 HTML 如果包含几十个图片标签&#xff0c;这些图片是以什么方式、什么顺序、建…...

树莓派Pico|RP2040|官方文档|在MS Windows上构建“Hello World”及环境配置

9.2. 在MS Windows上构建 在Microsoft Windows 10或Windows 11上安装工具链与其他平台有些不同。然而安装后&#xff0c;RP2040的构建代码基本类似。  警告 官方不支持在Windows 7或8上使用Raspberry Pi Pico&#xff0c;但在Windows 7或8上可以使其工作。 9.2.1. 安装工具…...

全球公链进展| 2023/7/31

一周速览 过去一周&#xff0c;明星项目动态如下&#xff1a; 第114次以太坊核心开发者共识会议&#xff1a;Devnet #8 最早下周推出 Layer2网络Shibarium跨链桥已上线公开测试 Optimism 推出「Law of Chains」v0.1 版本 Sui 通过 SIP#6 &#xff0c;允许开发人员构建流动…...

Spring源码(三)Spring Bean生命周期

Bean的生命周期就是指&#xff1a;在Spring中&#xff0c;一个Bean是如何生成的&#xff0c;如何销毁的 Bean生命周期流程图 1、生成BeanDefinition Spring启动的时候会进行扫描&#xff0c;会先调用org.springframework.context.annotation.ClassPathScanningCandidateCompo…...

【iOS】Cydia Impactor 错误:file http.hpp; line:37; what: _assert(code == 200)

Cydia Impactor 报错&#xff0c;信息如下 file http.hpp; line:37; what: _assert(code 200)解决方案&#xff1a;Cydia Impactor 已被弃用&#xff0c;切换到sideloadly 即可&#xff0c;亲测成功&#xff0c;并且支持双重验证登录 csdn备份地址 HERE...

3ds MAX绘制茶壶

综合一下之前的内容画个茶壶 长方形&#xff0c;然后转化为可编辑多边形&#xff0c;添加节点并设置圆角&#xff0c;如下图 车削生成一个圆环&#xff0c;其实这一步也可以用一个圆柱体和两个圆角圆柱体解决 效果如下&#xff1a; 茶壶的底座绘制好了 接下来是茶壶的上半边 …...

【element-plus】 table表格每行圆角解决方案 element也通用

系列文章目录 【Vue3ViteTselement-plus】使用tsx实现左侧栏菜单无限层级封装 前言 我们在使用element-plus或element 的table时是否有时UI给到的UI效果是如下面这样的&#xff0c;但是我们翻遍了组件库的文档 调整了很多次样式 发现在 左右侧栏固定的时候 普通的方法是完全…...

【状态估计】基于UKF、AUKF的电力系统负荷存在突变时的三相状态估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

webstorm格式化代码后单引号转成了双引号

webStorm格式化js代码时单引号变成了双引号&#xff0c;问题如下&#xff1a; 格式化前&#xff1a; 格式化后&#xff1a; 解决办法&#xff1a; window: File -> Settings -> Editor -> Code Style -> Javascript&#xff1b; mac: webStorm -> Preference …...

在langchain中使用带简短知识内容的prompt template

简介 langchain中有个比较有意思的prompt template叫做FewShotPromptTemplate。 他是这句话的简写&#xff1a;“Prompt template that contains few shot examples.” 什么意思呢&#xff1f;就是说在Prompt template带了几个比较简单的例子。然后把这些例子发送给LLM&…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)

引言 在嵌入式系统中&#xff0c;用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例&#xff0c;介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单&#xff0c;执行相应操作&#xff0c;并提供平滑的滚动动画效果。 本文设计了一个…...

高保真组件库:开关

一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...