工程规划 为了统一配置和代码解耦,我们对代码重新进行了整理和规划. 重新规划后,代码结构如下: kitty-pom: 统一管理 Maven 版本,打包配置 kitty-common: 公共代码模块,主要放置工具类 kitty-core: 核心代码模块,主要封装公共业务模块 kitty-admin: 后台管理模块,包含用户.角色.菜单管理等 kitty-boot: Spring Boot 启动模块,包含一些全局配置信息 优化详情 kitty-core 1. 新建 kitty-core 工程,把 k…
技术背景 上一篇教程中,我们利用Consul注册中心,实现了服务的注册和发现功能,这一篇我们来聊聊服务的调用.单体应用中,代码可以直接依赖,在代码中直接调用即可,但在微服务架构是分布式架构,服务都运行在各自的进程之中,甚至部署在不同的主机和不同的地区.这个时候就需要相关的远程调用技术了. Spring Cloud体系里应用比较广泛的服务调用方式有两种: 1. 使用 RestTemplate 进行服务调用,可以通过 Ribbon 注解 RestTemplate 模板,使其拥有负载均衡的功能. 2.…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 到目前为止,我们使用的权限认证框架是 Shiro,虽然 Shiro 也足够好用并且简单,但对于 Spring 官方主推的安全框架 Spring Security,用户群也是甚大的,所以我们这里把当前的代码切分出一个 shiro-cloud 分支,作为 Shiro + Spring Cloud 技术的分支代码,dev 和 master 分支将替换为 Spring Se…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 前面我们通过Ribbon或Feign实现了微服务之间的调用和负载均衡,那我们的各种微服务又要如何提供给外部应用调用呢. 当然,因为是REST API接口,外部客户端直接调用各个微服务是没有问题的,但出于种种原因,这并不是一个好的选择. 让客户端直接与各个微服务通讯,会有以下几个问题: 客户端会多次请求不同的微服务,增加了客户端的复杂性. 存在跨域请求,在一定场景下处…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 温馨提示: 有在演示环境删除数据的童鞋们,如果可以的话,麻烦动动小指,右键头像菜单, 选择 -> 备份还原 帮忙恢复到系统默认备份数据,方便后来的童鞋查看,谢谢啦. 技术交流 为了方便大家提问和技术交流,整了个QQ群,欢迎童鞋们加入. QQ技术交流群: 项目介绍 Kitty是基于Spring Boot.Spring Cloud.Vue.Element实现的Java快速开发平台…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启,运维也是苦不堪言,而且还很容易出错.于是,配置中心便由此应运而生了. 目前市面上开源的配置中心有很多,像Spring家族的Spring Cloud Config, Apache的…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了. ZipKin Zipkin 是一个由Twitter公司提供并开放源代码分布式的跟踪…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 雪崩效应 在微服务架构中,由于服务众多,通常会涉及多个服务层级的调用,而一旦基础服务发生故障,很可能会导致级联故障,进而造成整个系统不可用,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将这种不可用逐渐放大的过程. 比如在一个系统中, A作为服务提供者,B是A的服务消费者,C和D又是B的服务消费者.如果此时A发生故障,则会…
什么是 Consul Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框架.分布一致性协议实现.健康检查.Key/Value 存储.多数据中心方案,不再需要依赖其它工具(比如 ZooKeeper 等).使用起来也较为简单.Consul 使用 Go 语言编写,因此具有天然可移植性(支持Linux.windows和Mac OS X):安装包仅包含一个可执行文件,方便部…
容器部署项目 这一章我们引入docker,采用docker容器的方式部署我们的项目. 首先需要有一个linux环境,并且安装 java 和 maven 以及 docker 环境,这个教程多如牛毛,不再赘述. 这里以 kitty-monitor 为例. 添加配置 在 pom.xml 的 properties 中添加 Docker 镜像名称. <properties> <docker.image.prefix>kitty</docker.image.prefix> <…
系统服务监控 新建监控工程 新建Spring Boot项目,取名 kitty-monitor,结构如下. 添加项目依赖 添加 spring boot admin 的相关依赖. pom.xml <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server</artifactId> <version></version>…
项目打包部署 安装MySQL镜像 注意:如果使用docker镜像安装MySQL,也需要在前端部署主机安装MySQL,因为备份还原功能是使用MySQL的本地命令进行操作的. 下载镜像 执行以下命令,拉取MySQL镜像. docker pull mysql:latest 镜像下载完成之后,通过以下命令查看下载的镜像. docker images |grep mysql 启动容器 执行以下命令,启动一个容器. docker run -p 3306:3306 --name mysql -e MYSQL_…
系统备份还原 在很多时候,我们需要系统数据进行备份还原.我们这里就使用MySql的备份还原命令实现系统备份还原的功能. 新建工程 新建一个maven项目,并添加相关依赖,可以用Spring boot脚手架生成. 新建 kitty-bakcup 工程,这是一个独立运行于后台系统的应用程序,可以分开部署. pom.xml 文件添加相关依赖. <!-- spring boot --> <dependency> <groupId>org.springframework.boot…
数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.通过数据库连接池能明显提高对数据库操作的性能.在Java应用程序开发中,常用的连接池有DBCP.C3P0.Proxool等. Spring Boot默认提供了若干种可用的连接池,默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource.而Druid是阿里系提供的…
引入依赖 Spring Boot对于MyBatis的支持需要引入mybatis-spring-boot-starter的pom文件. <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </depende…
生成项目模板 登录Spring Initializr生成Spring Boot项目模板,保存到本地. 地址:https://start.spring.io/ 导入Maven项目 使用IDE导入生成的Maven项目,我这里用的是Eclipse. 项目结构很简单,把不需要的文件清理之后,项目就只有三个文件: 1.pom.xml, Maven的配置文件. "?> " xmlns:xsi/XMLSchema-instance" xsi:schemaLocation http:.…
Apache Shiro 优势特点 它是一个功能强大.灵活的,优秀开源的安全框架. 它可以处理身份验证.授权.企业会话管理和加密. 它易于使用和理解,相比Spring Security入门门槛低. 主要功能 验证用户身份 用户访问权限控制 支持单点登录(SSO)功能 可以响应认证.访问控制,或Session事件 支持提供“Remember Me”服务 ... 框架体系 Shiro 的整体框架如下图所示: Authentication(认证), Authorization(授权), Session…
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和操作可用性的权限验证,或者叫访问控制.但这仅限于页面的显示和操作,我们的后台接口还是没有进行权限的验证,只要知道了后台的接口信息,就可以直接通过swagger或自行发送ajax请求成功调用后台接口,这是非常危险的.接下来,我们就基于Shiro的注解式权限控制方案,来给我们的后台接口提供权限保护. 权…
spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于移动端.在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新API开发接口文档的问题. 假如你已经对传统的wiki文档共享方式所带来的弊端深恶痛绝,那么尝试一下Swagger2 方式,一定会让你有不一样的开发体验. 使用 Swagger 集成文档具有以下几…
切分工程 考虑到后续我们的模块会越来越多,依赖的公共代码和配置需要集中管理,我们在这里先把公共模块和配置从后台管理业务中剥离出来. 新增两个工程,切分后结构如下: kitty-boot:启动器及全局配置模块 kitty-common:公共代码模块,主要提供一些工具类 kitty-admin:后台管理系统相关业务模块 1. kitty-common 新建一个 Maven 工程 kitty-common 用来存放后续的公共代码,暂时空空如也. 2. kitty-boot 将原有的 kitty-adm…
什么是跨域? 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 如果一个请求地址里面的协议.域名和端口号都相同,就属于同源. 举个栗子 判断下面URL是否和 http://www.a.com/a/a.html 同源 http://www.a.com/b/b.html 同源 http://www.b.com/a/a.html 不同源,域名不相同 https://www.a.com/b/b.html 不同源,协议不相同 htt…
数据库设计 系统主要包含用户(sys_user).组织(sys_dept).角色(sys_role).菜单(sys_menu).角色组织(sys_role_dept).角色菜单(sys_role_menu).用户Token(sys_user_token).系统日志(sys_log)等表. 1.用户属于组织,通过 sys_user 表中的 dept_id 关联到组织. 2.组织拥有角色,通过角色组织表关联. 3.用户拥有角色,通过用户角色表关联,用户可以继承组织的角色. 4.角色关联菜单,菜单关联…
登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验证码.如下图为实现的效果. 实现案例 验证码的实现需要前后端协同,脱离彼此则不可用,故将前后端的实现放在一起,不再另写前端教程. 后端实现 1.添加依赖 打开 kitty-admin 工程,添加maven依赖. pom.xml <!-- kaptcha --> <dependency>…
通用操作 通用操作是指一般的增删改查操作,逻辑大体都是一致的,所以统一抽象到CURD接口,需要用到CURD的表直接实现接口就可以了. 通用操作主要有以下几个: 保存操作 /** * 保存操作 * @param record * @return */ int save(T record); 更新操作 /** * 更新操作 * @param record * @return */ int update(T record); 删除操作 /** * 删除操作 * @param record * @ret…
使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写 count 和 select,幸好我们有 pagehelper 分页插件,pagehelper 是一个强大实用的 MyBatis 分页插件,可以帮助我们快速的实现分页功能.那么,接下来我们就来一起体验下吧. 添加依赖 在 kitty-admin pom.xml 文件内添加分页插件依赖包. pom.xml <!-- pagehelp…
接口请求格式定义 前台显示需要后台数据,我们这里先把前后端交互接口定义好,没有后台的时候,也方便用mock模拟. 接口定义遵循几个规范: 1. 接口按功能模块划分. 系统登录:登录相关接口 用户管理:用户管理相关接口 机构管理:机构管理相关接口 角色管理 : 角色管理相关接口 菜单管理 : 菜单管理相关接口 字典管理 : 字典管理相关接口 日志管理 : 日志管理相关接口 2. 通用增删改查接口采用统一命名规范. save : 保存操作 update: 更新操作 delete: 删除操作 find…
新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚垫菜盘之良器,欢迎大家无情购买使用,欢迎大家共同学习交流,欢迎大家提出改进意见. 内容简介: 本书从项目实践出发,手把手.心贴心地带领读者从零开始,一步一步地开发出功能相对完整的权限管理系统,从而深入掌握当前主流的Spring Boot + Spring Cloud + Vue前后端集成开发技术. 全书分为三…
[权限管理系统]spring boot +spring security短信认证+redis整合   现在主流的登录方式主要有 3 种:账号密码登录.短信验证码登录和第三方授权登录,前面一节Spring security(三)---认证过程已分析了spring security账号密码方式登陆,现在我们来分析一下spring security短信方式认证登陆.   Spring security 短信方式.IP验证等类似模式登录方式验证,可以根据账号密码方式登录步骤仿写出来,其主要以以下步骤进行…
FEBS是一个简单高效的后台权限管理系统.项目基础框架采用全新的Java Web开发框架 —— Spring Boot 2.0.3,消除了繁杂的XML配置,使得二次开发更为简单:数据访问层采用Mybatis,同时引入了通用Mapper和PageHelper插件,可快速高效的对单表进行增删改查操作,消除了大量传统XML配置SQL的代码:安全框架采用时下流行的Apache Shiro,可实现对按钮级别的权限控制:前端页面使用Bootstrap构建,主题风格为时下Google最新设计语言Materia…
一.前言 最近整合Spring Boot+Spring Security+JWT+Vue 完成了一套前后端分离的基础项目,这里把它开源出来分享给有需要的小伙伴们 功能很简单,单点登录,前后端动态权限配置,前端权限精确到 按钮 级别,后端权限精确到 url 上,剩下的就是一些关联表的增删改查,例如:用户管理,角色管理,菜单管理,系统日志等... Spring Security入门系列教程: SpringBoot集成Spring Security入门体验(一) Spring Security 自定义…