Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(二)
RuoYi项目开发过程
- 一、登录功能(鉴权模块)
- 1.1 后端部分
- 1.1.1 什么是JWT?
- 1.1.2 什么是Base64?为什么需要它?
- 1.1.3 SpringBoot注解解析
- 1.1.4 依赖注入和控制反转
- 1.1.5 什么是Restful?
- 1.1.6 Log4j 2、Logpack、SLF4j日志框架
- 1.1.7 如何将项目打包成指定bytecode字节码版本?
- 1.1.7.1 方式一(原生)
- 1.1.7.1 方式二(Maven)
- 1.1.8 依赖包字节码版本不同,如何编译至相同版本?
- 1.1.7.1 依赖低版本jar包,想将项目整体编译至高版本
- 1.1.7.2 依赖高版本jar包,想将项目整体编译至低版本
- 1.2 前端部分
| 参考视频或文章链接 |
|---|
| RuoYi-Cloud官方文档 |
| 《若依框架讲解-微服务版》- bilibili |
| 《若依框架讲解-微服务版》课件 — 提取码 8888 |
| 《JWT及鉴权》— 骄傲的演员 — CSDN |
一、登录功能(鉴权模块)
假如我是RuoYi项目的开发者,我应该怎么样从无到有的把这个项目搭建起来?或者说我要先开发什么功能,因为一开始我对这个项目要划分成哪些模块是模糊的,所以先从具体的功能入手,等有了大量的项目阅历,就知道这个项目要如何划分模块,如何进行架构了,先开发最常用的用户登录功能。我不打算完全照抄RuoYi的代码,而是在其基础上做些改动开发自己的功能,但模块甚至命名都会参考RuoYi。
验证码部分是在网关内部直接处理的。
1.1 后端部分
1.1.1 什么是JWT?
(1) Single Sign On is a feature that widely uses JWT nowadays, because of its small overhead and its ability to be easily used across different domains.
(2) In authentication, when the user successfully logs in using their credentials, a JSON Web Token will be returned. Since tokens are credentials, great care must be taken to prevent security issues. In general, you should not keep tokens longer than required.
(3) Whenever the user wants to access a protected route or resource, the user agent should send the JWT, typically in the Authorization header using the Bearer schema.

1.The application or client requests authorization to the authorization server. This is performed through one of the different authorization flows. For example, a typical OpenID Connect compliant web application will go through the /oauth/authorize endpoint using the authorization code flow.
2.When the authorization is granted, the authorization server returns an access token to the application.
3.The application uses the access token to access a protected resource (like an API).
| 参考视频或文章链接 |
|---|
| JWT - offical website |
| 《JWT及鉴权》— 骄傲的演员 — CSDN |
1.1.2 什么是Base64?为什么需要它?
(1) Base64 allows you to transport binary over protocols or mediums that cannot handle binary data formats and require simple text.
| 参考视频或文章链接 |
|---|
| Base64 encoding: What sysadmins need to know — RedHat |
| Base64 — Wiki |
1.1.3 SpringBoot注解解析
我以为,注解@Annoation最重要的作用是提醒编译器,或者说提醒JVM虚拟机,带上注解@Annoation的这些类、方法、变量有哪些地方是要重点检查与注意的。
| 注解名称 | 作用 | 参考文章 |
|---|---|---|
@RestController | 结合了@Controller and @ResponseBody两个注解,简化了配置,Every request handling method of the controller class automatically serializes return objects into HttpResponse. | The Spring @Controller and @RestController Annotations |
@Autowired | 若不指定注入类名,根据变量名自动注入 | Guide to Spring @Autowired |
@PostMapping | ||
@RequestBody | ||
@SpringBootApplication | =@Configuration + @EnableAutoConfiguration + @ComponentScan | 18. Using the @SpringBootApplication Annotation |
1.1.4 依赖注入和控制反转
两个词是一体两面的说法,控制反转,即将对象的控制权交给Spring容器,而以前的传统方式是程序员手工控制。
| 参考视频或文章链接 |
|---|
| 《控制反转及注入依赖详情「通俗易懂」》 |
1.1.5 什么是Restful?
一种设计风格,使用HTTP 协议传输数据,并通过URL来标识资源的位置和状态。
(1) Resource identification through URI. In the REST architectural style, data and functionality are considered resources and are accessed using Uniform Resource Identifiers (URIs), typically links on the Web.
(2) Uniform interface. Resources are manipulated using a fixed set of four create, read, update, delete operations: PUT, GET, POST, and DELETE.
| 参考视频或文章链接 |
|---|
| What Are RESTful Web Services? —— The Java EE 6 Tutorial |
| RESTful Web Services —— GeeksForGeeks |
| 《图文详解 RESTful》—— CSDN |
1.1.6 Log4j 2、Logpack、SLF4j日志框架
//@TODO待文章引用
1.1.7 如何将项目打包成指定bytecode字节码版本?
首先,要知道在Maven发明以前,也是可以打jar包的,所以肯定有两种方式,方式一是原生的方式,这里可以直接利用IDEA,更加便利,方式二是使用Maven,开始。
1.1.7.1 方式一(原生)
原生方式是采用Build Artifacts方式建立jar包(Artifacts = Art艺术 + ifacts事实 = 手工物品),如果不会用Build Artifacts构建jar包,请搜索其它文章,这里要说的是,原生方式下,怎么指定字节码版本。
Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler -> Per-module bytecode version -> 指定module的版本
1.1.7.1 方式二(Maven)
source指.java源码文件是按何种Java版本编写的
target指.class字节码文件是以何种字节码版本生成的,这个很好理解。
<properties><maven.compiler.source>6</maven.compiler.source> <!--这里修改后再mvn reload,即影响Project Structure/Modules/Sources--><maven.compiler.target>6</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>
1.1.8 依赖包字节码版本不同,如何编译至相同版本?
A包是55.0字节码版本,B包是52.0字节码版本,你想将项目最终编译成52.0,在中国这片土地上,52.0是最常用的了,我想变革的阻力会随着信创产业的推进而降低,老守旧有什么意思?还是说能够带来稳定收益,守旧就可以了,不想着怎么去让架构更优,运行更稳定,更快?听说连JDK都要国产化?
| 参考视频或文章链接 |
|---|
| 《JDK 版本和字节码版本对应表》 |
| IDEA —— Project language level |
有了问题1.1.7的基础,如果你有完整项目源码,可以重新编译到指定字节码版本,这很简单。
1.1.7.1 依赖低版本jar包,想将项目整体编译至高版本
假设你现在有一个依赖的jar包是字节码50.0的,并且只有jar包,你想将项目整体重新编译至52.0,如何操作?抱歉,依赖包完整打好包那刻起就决定了,无法重新再编译至其它字节码版本。
1.1.7.2 依赖高版本jar包,想将项目整体编译至低版本
假设你现在有一个依赖的jar包是字节码52.0的,并且只有jar包,你想将项目整体重新编译至50.0,如何操作?抱歉,依赖包完整打好包那刻起就决定了,无法重新再编译至其它字节码版本。
1.2 前端部分
//@TODO
相关文章:
Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(二)
RuoYi项目开发过程 一、登录功能(鉴权模块)1.1 后端部分1.1.1 什么是JWT?1.1.2 什么是Base64?为什么需要它?1.1.3 SpringBoot注解解析1.1.4 依赖注入和控制反转1.1.5 什么是Restful?1.1.6 Log4j 2、Logpack、SLF4j日志框架1.1.7 如何将项目打包成指定bytecode字节…...
如何进行软件测试和测试驱动开发(TDD)?
1. 软件测试概述 1.1 什么是软件测试? 软件测试是一种评估系统的过程,目的是发现潜在的错误或缺陷。通过对软件进行测试,开发者和测试人员可以确定软件是否符合预期的需求、功能是否正常运行,以及系统是否足够稳定和可靠。 1.2…...
linux 开机启动流程
1.打开电源 2.BIOS 有时间和启动方式 3.启动Systemd 其pid为1 4.挂载引导分区 /boot 5.启动各种服务 如rc.local...
Mybatis 动态SQL的插入操作
需求 : 根据用户的输入情况进行插入 动态SQL:根据需求动态拼接SQL 用户往表中插入数据,有的数据可能不想插入,比如不想让别人知道自己的性别,性别就为空 insert into userinfo(username,password,age,gender,phone) values(?,?,?,?,?); insert into userinfo(username,…...
共建开源新里程:北京航空航天大学OpenHarmony技术俱乐部正式揭牌成立
12月11日,由OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会(以下简称“TSC”)和北京航空航天大学共同举办的“OpenHarmony软件工程研讨会暨北京航空航天大学OpenHarmony技术俱乐部成立仪式”在京圆满落幕。 现场大合影 活动当天,多位重量级嘉宾出席了此次…...
企业微信机器人发送文本、图片、文件、markdown、图文信息
import requests import base64 import hashlib import json # 机器人地址的key值 key"811a1652-60e8-4f51-a1d9-231783399ad2" def path2base64(path):"""文件转换为base64:param path: 文件路径:return:"""with open(path, "rb…...
智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于天牛须算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.天牛须算法4.实验参数设定5.算法结果6.参考文…...
【Hive】【Hadoop】工作中常操作的笔记-随时添加
文章目录 1、Hive 复制一个表:2、字段级操作3、hdfs 文件统计 1、Hive 复制一个表: 直接Copy文件 create table new_table like table_name;hdfs dfs -get /apps/hive/warehouse/ods.db/table_nameload data local inpath /路径 into table new_table;修复表: m…...
DIY电脑装机机箱风扇安装方法
作为第一次自己diy一台电脑主机的我,在经历了众多的坑中今天来说一下如何安装机箱风扇的问题 一、风扇的数量 1、i3 xx50显卡 就用一个cpu散热风扇即可 2、i5 xx60 一个cpu散热风扇 一个风扇即可 3、i7 xx70 一个cpu散热 4个风扇即可 4、i9 xx80 就需要7个以…...
基础算法(4):排序(4)冒泡排序
1.冒泡排序(BubbleSort)实现 算法步骤:比较相邻的元素。如果第一个比第二个大,就交换。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤&#…...
鸿蒙开发之网络请求
//需要导入http头文件 import http from ohos.net.http//请求地址url: string http://apis.juhe.cn/simpleWeather/queryText(this.message).maxFontSize(50).minFontSize(10).fontWeight(FontWeight.Bold).onClick(() > {console.log(请求开始)let req http.createHttp()…...
PrimDiffusion:3D 人类生成的体积基元扩散模型NeurIPS 2023
NeurIPS2023 ,这是一种用于 3D 人体生成的体积基元扩散模型,可通过离体拓扑实现明确的姿势、视图和形状控制。 PrimDiffusion 对一组紧凑地代表 3D 人体的基元执行扩散和去噪过程。这种生成建模可以实现明确的姿势、视图和形状控制,并能够在…...
时序预测 | Python实现LSTM-Attention-XGBoost组合模型电力需求预测
时序预测 | Python实现LSTM-Attention-XGBoost组合模型电力需求预测 目录 时序预测 | Python实现LSTM-Attention-XGBoost组合模型电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从…...
【网络安全技术】电子邮件安全PGP,SMIME
一、PGP(Pretty Good Privacy) PGP是一种邮件加密手段,他在发邮件一方加密,然后发给发送方邮件服务器,发送方邮件服务器再发送给接收方邮件服务器,然后接收方再从接收方邮件服务器pop出来,这整…...
CSS学习笔记整理
CSS 即 层叠样式表/CSS样式表/级联样式表,也是标记语言, 用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距)以及版面的布局和外观显示样式 目录 准备工作 Chrome调…...
SpringData自定义操作
一、JPQL和SQL 查询 package com.kuang.repositories;import com.kuang.pojo.Customer; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingR…...
【Java JVM】运行时数据区
JVM 在执行 Java 程序的过程中会把它管理的内存分为若干个不同的数据区域, 这些区域有着各自的用途。 根据《Java虚拟机规范》中规定, JVM 所管理的内存大致包括以下几个运行时数据区域, 如图所示: 这个运行时数据区被分为了 5 大块 方法区 (Method Area)堆 (Heap)虚拟机栈 (V…...
k8s中pod监控数据在grafana中展示
实现目标:将kubesphere[K8S]中运行的pod监控数据在grafana平台进行展示。 前提说明:需要在k8s每个集群中内置的prometheus配置中将pod指标数据远程写入到victoriametrics持久化数据库中。 实现效果如下: CPU使用量: round(sum by (namespace, pod) (irate(container_cpu…...
人机协同之间也有混馈机制
不懂数学的狮子,能精准的在最佳时刻、最佳路径捕捉到羚羊,这种天赋的“算计”能力,可谓叹为观止!里面既有反馈也有前馈,应该是混馈机制。混馈机制是指信息在系统中同时进行正向和反向的传递与调节。在狮子捕捉羚羊的过…...
微服务网关Gateway
springcloud官方提供的网关组件spring-cloud-starter-gateway,看pom.xml文件,引入了webflux做响应式编程,请求转发用到了netty的reactor模型,支持的请求数在1W~1.5W左右。hystrix停止维护后,官方推荐resilience4j做服务熔断,网关这里也能看到依赖。 对于网关提供的功能…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...
