Rywen's Blog

生活不止眼前的苟且,还有诗和远方.

0%

首先我们要创建一个执行转义的封装类,这个类继承 HttpservletRequestwrapper 父类。在Web项目中,我们无法修改 HttpservletRequest 实现类的内容,因为请求的实现类是由各个Web容器厂商自己扩展的。但是有时候我们还想修改请求类中的内容,这该怎么办呢?Java语言给我们留出了缺口,我们只要继承Java Web内置的HttpservletRequestwrapper 父类,就能修改请求类的内容。如果我们能修改请求类的内容,我要修改获取请求数据的函数,返回的并不是客户端Form表单或者Ajax提交的数据,而是经过转义之后数据。

阅读全文 »

Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。SaToken官方文档非常详尽,我们按照手册的指引可以很轻松的把SaToken整合到SpringBoot项目中。

阅读全文 »

由于所有的管理系统都少不了权限管理,所以我们先学习RBAC权限模型的相关知识,然后给后端项目配置SaToken认证与授权框架。

RBAC权限模型

RBAC(Role-Based Access Control,基于角色的访问控制)是一种常见的权限管理模型,它通过将权限与角色关联,来实现对用户访问资源的控制。

RBAC模型将权限分为以下几种:

  • 角色(Role):一组权限的集合。
  • 权限(Permission):对资源的操作。
  • 用户(User):拥有角色和权限的人。
阅读全文 »

配置MongoDB

application.yml 文件中,配置MongoDB连接。因为MongoDB自带数据库连接池,所以我们不需要在Java项目中重复配置连接池。

1
2
3
4
5
6
7
8
9
10
spring:
......
data:
mongodb:
host: localhost
port: 27017
database: his
authentication-database: admin
username: admin
password: abc123456

配置Redis

application.yml 文件中,配置Redis连接。

1
2
3
4
5
6
spring:
......
redis:
host: localhost
port: 6379
password: abc123456

避免RedisTemplate保存乱码数据

因为SpringBoot Data中默认的RedisTemplate存在序列化机制的问题,向Redis里面保存Hash类型数据通常是乱码的,为了解决这个问题,我们需要自己定义配置类,修改RedisTemplate使用的序列化机制。

com.example.his.api.config包中,创建 RedisTemplateconfig

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.jiang.his.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisTemplateConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}

配置RabbitMQ消息队列

在 application.yml 文件中,我们填上消息队列的配置信息。Java项目启动后,SpringBoot会自动接收RabbitMQ中的消息。

1
2
3
4
5
6
7
spring:
......
rabbitmq:
host: localhost
port: 5672
username: admin
password: abc123456

思维导图

利用Maven创建SpringBoot项目

在IDEA工具上面新建SpringBoot项目,项目的名称为 his-api 需要注意Java语法版本没有15,所以我们选择低版本的JDK语法,后续在 pom.xml文件中改成JDK15语法即可。

阅读全文 »

攻克了数据库集群这一关,接下来轮到Redis、MongoDB、RabbitMQ这几个中间件了。我们依旧还是用Docker环境来创建这些中间件的容器。不得不说有了Docker环境,我们搭建后端这些中间件真的是非常方便。

阅读全文 »

MySQL集群

1. 数据库的安装

安装MySQL集群,需要先安装MySQL的5.7.41版本,不能使用8.0版本。

1.1 安装MySQL

由于Docker容器的IP地址是动态分配的,每次启动相同容器,它的IP地址都会有变化。这就非常影响数据库集群的搭建,比如说MySQL 2要同步MySQL 1的数据,MySQL1容器的IP地址经常变来变去肯定是不行的,所以我们要给每个Docker容器都分配固定的IP地址。

阅读全文 »

概念

本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时,它会在内部构建一个**依赖图(dependency graph)**,此依赖图会映射项目所需的每个模块,并生成一个或多个 bundle。

上面一段话摘自官方文档,由此引申出下面几个问题

  1. 什么是依赖图?依赖图是怎么映射项目所需的模块?
  2. bundle 是什么?
阅读全文 »

之前在做公司小程序开发的时候,没有发现本地调试的方法,所以每次写完接口必须要把代码上传远程服务器进行测试,这种处理不仅不优雅,更要命的是极度拖延了开发进度,不过因为第一次接触小程序,完全不熟悉其开发原理,所以一直没有机会去改善开发逻辑。直至公司小程序开发完成后,才在网上去搜寻解决文案,终于找到本地开发调试的方法,并记录下来。

阅读全文 »