Java技术栈 —— 微服务框架Spring Cloud —— Ruoyi-Cloud 学习(二)

RuoYi项目开发过程

  • 一、登录功能(鉴权模块)
    • [1.1 后端部分](#1.1 后端部分)
      • [1.1.1 什么是JWT?](#1.1.1 什么是JWT?)
      • [1.1.2 什么是Base64?为什么需要它?](#1.1.2 什么是Base64?为什么需要它?)
      • [1.1.3 SpringBoot注解解析](#1.1.3 SpringBoot注解解析)
      • [1.1.4 依赖注入和控制反转](#1.1.4 依赖注入和控制反转)
      • [1.1.5 什么是Restful?](#1.1.5 什么是Restful?)
      • [1.1.6 Log4j 2、Logpack、SLF4j日志框架](#1.1.6 Log4j 2、Logpack、SLF4j日志框架)
      • [1.1.7 如何将项目打包成指定bytecode字节码版本?](#1.1.7 如何将项目打包成指定bytecode字节码版本?)
        • [1.1.7.1 方式一(原生)](#1.1.7.1 方式一(原生))
        • [1.1.7.1 方式二(Maven)](#1.1.7.1 方式二(Maven))
      • [1.1.8 依赖包字节码版本不同,如何编译至相同版本?](#1.1.8 依赖包字节码版本不同,如何编译至相同版本?)
        • [1.1.7.1 依赖低版本jar包,想将项目整体编译至高版本](#1.1.7.1 依赖低版本jar包,想将项目整体编译至高版本)
        • [1.1.7.2 依赖高版本jar包,想将项目整体编译至低版本](#1.1.7.2 依赖高版本jar包,想将项目整体编译至低版本)
    • [1.2 前端部分](#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字节码文件是以何种字节码版本生成的,这个很好理解。

xml 复制代码
    <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

相关推荐
m0_571957581 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟5 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity6 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天6 小时前
java的threadlocal为何内存泄漏
java
caridle6 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^6 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋36 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx