欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

权限管理系统项目文档——SpringBoot后端

时间:2023-06-11
文章目录

关键技术第一篇 后端实现篇

1、搭建开发环境2、集成Swagger文档3、集成MyBatis框架4、集成Druid数据源5、跨域解决方案6、业务功能实现

6.1 工程结构规划

6.1.1 mango-admin6.1.2 mango-common6.1.3 mango-core6.1.4 mango-pom6.1.5 打包测试 6.2 业务代码封装

6.2.1 通用CURD接口6.2.2 分页请求封装6.2.3 分页结果封装6.2.4 分页助手封装6.2.5 HTTP结果封装 6.3 MyBatis分页查询

6.3.1 添加依赖6.3.2 添加配置6.3.3 分页代码6.3.4 接口测试 6.4 业务功能开发

6.4.1 编写DAO接口6.4.2 编写映射文件6.4.3 编写服务接口6.4.4 编写服务实现6.4.5 编写控制器 6.5 业务接口汇总6.6 导出Excel报表

6.6.1 添加依赖6.6.2 编写服务接口6.6.3 编写服务实现6.6.4 编写控制器6.6.5 工具类代码6.6.6 接口测试 7、登录流程实现

7.1 登录验证码7.2 Spring Security

7.2.1 添加依赖7.2.2 添加配置7.2.3 登录认证过滤器7.2.4 身份验证组件7.2.5 认证信息查询7.2.6 添加权限注解7.2.7 Swagger添加令牌函数 7.3 登录接口实现7.4 Spring Security执行流程剖析 8、数据备份还原

8.1 新建工程8.2 添加依赖8.3 添加配置8.4 自定义Banner8.5 启动类8.6 跨域配置8.7 Swagger配置8.8 数据源属性8.9 备份还原接口8.10 备份还原实现8.11 备份还原逻辑8.12 备份还原控制器

8.12.1 数据备份接口8.12.2 数据还原接口8.12.3 查找备份接口8.12.4 删除备份接口 9、系统服务监控

9.1 新建工程9.2 添加依赖9.3 添加配置9.4 自定义Banner9.5 启动类9.6 监控客户端9.7 启动服务端 10、注册中心(Consul)

10.1 什么是Consul10.2 Consul安装10.3 monitor改造

10.3.1 添加依赖10.3.2 配置文件10.3.3 启动类10.3.4 测试效果 10.4 backup改造

10.4.1 添加依赖10.4.2 配置文件10.4.3 启动类10.4.4 测试效果 10.5 admin改造

10.5.1 添加依赖10.5.2 配置文件10.5.3 启动类10.5.4 测试效果 11、服务消费(Ribbon、Feign)

11.1 技术背景11.2 服务提供者

11.2.1 新建项目11.2.2 配置文件11.2.3 启动类11.2.4 自定义Banner11.2.5 添加控制器 11.3 服务消费者

11.3.1 新建项目11.3.2 添加配置11.3.3 启动类、11.3.4 自定义Banner11.3.5 服务消费11.3.6 负载均衡器(Ribbon)11.3.7 修改启动类11.3.8 添加服务11.3.9 页面测试11.3.10 负载策略 11.4 服务消费(Feign)

11.4.1 添加依赖11.4.2 启动类11.4.3 添加Feign接口11.4.4 添加控制器11.4.5 页面测试 12、服务熔断(Hystrix、Turbine)

12.1 雪崩效应12.2 熔断器(CircuitBreaker)12.3 Hystrix特性

12.3.1 断路器机制%12.3.2 fallback12.3.3 资源隔离 12.4 Feign Hystrix

12.4.1 修改配置12.4.2 创建回调类12.4.3 页面测试 12.5 Hystrix Dashboard

12.5.1 添加依赖12.5.2 启动类12.5.3 自定义Banner12.5.4 配置文件12.5.5 配置监控路径12.5.6 页面测试 12.6 Spring Cloud Turbine

12.6.1 添加依赖12.6.2 启动类12.6.3 配置文件12.6.4 测试效果 13、服务网关(Zuul)

13.1 技术背景13.2 Spring Cloud Zuul13.3 Zuul工作机制

13.3.1 过滤器机制13.3.2 过滤器的生命周期13.3.3 禁用指定的Filter 13.4 实现案例

13.4.1 新建工程13.4.2 添加依赖13.4.3 启动类13.4.4 配置文件13.4.5 页面测试13.4.6 配置接口前缀13.4.7 默认路由规则13.4.8 路由熔断13.4.9 自定义Filter 14、链路追踪(Sleuth、Zipkin)

14.1 技术背景14.2 ZipKin14.3 Spring Cloud Sleuth14.4 实现案例

14.4.1 下载镜像14.4.2 编写启动文件 14参考15、配置中心(Config、Bus)

15.1 技术背景15.2 Spring Cloud Config15.3 实现案例

15.3.1 准备配置文件15.3.2 服务端实现15.3.3 客户端实现15.3.4 Refresh机制15.3.5 Spring Cloud Bus


前后端源码以及markdown笔记及转化的pdf文件均已上传网盘:
链接:https://pan.baidu.com/s/1BVXTBAJfAYGS01n8fP2GvA 提取码:ziyi

关键技术

Spring Boot

官方教程:https://spring.io/projects/spring-boot/

Spring Cloud

官方教程:https://spring.io/projects/spring-cloud

博客教程:https://www.cnblogs.com/xifengxiaoma/

Spring Security

官方教程:https://spring.io/projects/spring-security

博客教程:https://www.cnblogs.com/xifengxiaoma/

MaBatis

官方教程:http://www.mybatis.org/mybatis-3/zh/

博客教程:https://www.w3cschool.cn/mybatis/

Vue.js

官方教程:https://cn.vuejs.org/v2/guide/

博客教程:https://www.runoob.com/vue2/vue-tutorial.html

Element

官网教程:http://element.eleme.io/#/zh-CN

第一篇 后端实现篇 1、搭建开发环境

登录spring initializer生成spring boot项目模板,保存到本地,网站地址为https://start.spring.io/。

将maven项目导入到eclipse,修改application配置文件为yml后缀,清理掉不需要的mvnw、mvnw.cmd和test目录下的测试文件。

编译打包运行,右击pom.xml,选择run as→maven install。

启动应用,右击DemoApplication,选择run as→Java application。

修改启动端口。(默认为8080),在application.yml可修改启动端口:(下例修改为8001,注意port前不能使用tab,否则会报错)

server: port: 8001

自定义Banner

spring boot启动后会在控制台输出banner信息,默认是显示spring字样,如下:

如果要定制自己的Banner只需要在resources下放置一个banner.txt文件,输入自己的banner字符即可。

Banner字符可通过类似以下网站生成:

http://patorjk.com/software/taaghttp://www.network-science.de/ascii/

复制字符到banner.txt并附上应用和版本信息,重启应用,如下:

接口测试

新建一个controller包,并在其下创建一个hellocontroller类,添加一个hello接口:

在浏览器中访问,如下:

2、集成Swagger文档

使用Swagger集成文档有以下几个优势:

功能丰富:支持多种注解,自动生成接口文档界面,支持在界面中测试API接口功能。及时更新:开发过程中花一点写注释的时间,就可以及时更新API文档、整合简单:通过添加pom依赖和简单配置,内嵌于应用中就可以同时发布API接口文档界面,不需要部署独立服务。

官网:https://swagger.io/

官方文档:https://swagger.io/docs/

添加依赖

io.springfoxspringfox-swagger22.9.2io.springfoxspringfox-swagger-ui2.9.2

配置类

添加config包,并在其下添加Swagger配置类SwaggerConfig.java:

@Configuration@EnableSwagger2public class SwaggerConfig {@Beanpublic Docket createRestApi(){ return new Docket(documentationType.SWAGGER_2).apiInfo(apiInfo()).select() .apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build(); }private ApiInfo apiInfo(){ return new ApiInfoBuilder().build(); }}

页面测试

启动应用,在浏览器中访问http://localhost:8001/swagger-ui.html#/,就可以看到Swagger的接口文档页面了:

还可以选择接口进行测试,单击右侧的try it out→execute,发现接口成功返回“hello mango!”:

3、集成MyBatis框架

MyBatis是一款优秀的持久层框架,支持定制化SQL、存储过程以及高级映射。MyBatis可以使用简单的XML或注解来配置和映射原生信息,并将接口和Java的POJOs映射成数据库中的记录。

中文官网:http://www.mybatis.cn/

参考教程:https://www.w3cschool.cn/mybatis/

添加依赖

org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java

添加配置

添加MyBatis配置

添加MyBatis配置类,配置相关扫描路径,包括DAO、Model、XML映射文件的扫描,在config包下新建一个MyBatis配置类MybatisConfig.java:

@Configuration@MapperScan("com.louis.mango.**.dao") // 扫描DAOpublic class MybatisConfig { @Autowired private DataSource dataSource; @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setTypeAliasesPackage("com.louis.mango.**.model"); // 扫描Model PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); sessionFactory.setMapperLocations(resolver.getResources("classpath*:**/sqlmap List findAll();}

在映射文件中添加一个查询方法,编写findAll的查询语句:

SysUserMapper.xml:

select u.*, (select d.name from sys_dept d where d.id = u.dept_id) deptName from sys_user u

服务层调用DAO层完成分页查询,让SysUserService继承CurdService接口。

SysUserService.java:

ListfindAll();

在实现类中编写分页查询业务类实现,我们可以看到,经过对分页查询业务的封装,普通分页查询非常简单,只需调用MyBatisPageHelper.findPage(pageRequest,sysUserMapper)一行代码即可完成分页查询功能.

SysUserServiceImpl.java:

@Servicepublic class SysUserServiceImpl implements SysUserService {@Autowiredprivate SysUserMapper sysUserMapper; @Overridepublic PageResult findPage(PageRequest pageRequest) { return MyBatisPageHelper.findPage(pageRequest,sysUserMapper) }}

编写分页查询接口,简单调用Service的查询接口。

SysUserController.java:

@RestController@RequestMapping("user")public class SysUserController { @Autowiredprivate SysUserService sysUserService; @PostMapping(value="/findPage")public HttpResult findPage(@RequestBody PageRequest pageRequest) {return HttpResult.ok(sysUserService.findPage(pageRequest));}}

6.3.4 接口测试

通过swagger接口测试,结果如下:


6.4 业务功能开发

业务功能的开发基本都是各种增删改查业务的编写,大多数是重复性工作,业务编写也没有多少技术要点,这里就拿机构管理的开发作为基础CURD的开发范例。

首先需要事先规划一下,根据需求设计好需要的接口,比如字典管理除了通用的保存、删除、分页查询接口外,还需要一个根据标签名称查询记录的查询方法。

6.4.1 编写DAO接口

打开DAO接口,添加findPage、findPageByLabel和findByLable三个接口:

SysDictMapper.java:

public interface SysDictMapper { List findPage(); List findPageByLabel(@Param(value="label") String label); List findByLable(@Param(value="label") String label);}

6.4.2 编写映射文件

打开映射文件,编写三个查询方法:findPage、findPageByLabel和findByLable。

SysDictMapper.xml:

select from sys_dict where label like #{pattern}