- pingsSys是一款基于spring-boot和dubbo的java微服务框架脚手架。采用前后端分离设计,连接无状态,前端页面采用ant design pro脚手架进行开发。本人会利用业务时间,持续更新。
- 源码
- 主页,用户名:test,密码:123456
- 专栏
- 说明:
- 使用ide打开maven项目,自动导入依赖
- pings-shiro-jwt包需要手动导入(pings-shiro-jwt地址)
- 先启动Provider,然后启动Consumer
- 开发模式依赖的运行环境(mysql,redis,zookeeper)
- sql脚本,在pings-service-api项目每个模块对应的script目录
- 项目依赖pings-shiro-jwt,请自己下载后打包
- 运行环境搭建过程
- 步骤:
- 开发模式启动springboot项目pings-service-sys
- 开发模式启动springboot项目pings-service-bill
- 开发模式启动springboot项目pings-web-admin
- 开发模式启动springboot项目pings-web-bill
- 开发模式启动的方法,添加vm启动参数:-Dspring.profiles.active=dev
- 说明:前端为项目pings-ui-admin,基于ant design pro脚手架
- 步骤:
- 安装nodejs
- 进入pings-ui-admin目录
- 安装依赖:npm install(需要比较长的时间)
- 启动:npm run start:no-mock
- 访问:http://localhost:8000
- 账号:pings/123456
- 公共的工具类
- dubbo接口和实体类,独立出来,方便Provider和Consumer共用
- 权限管理服务(Provider)
- 账单管理服务(Provider)
- 后台管理系统(Consumer)
- 账单管理系统(Consumer)
- 基于ant design pro脚手架的后台管理系统ui(前端界面)
- 基础框架:spring-boot-2.1.1 + dubbo-2.6.5
- 数据库:mysql + redis
- 数据库连接/持久层:druid + mybatis + mybatis-plus
- 权限认证:基于jwt和shiro的无状态认证
- 前端页面:基于ant design pro脚手架
- 超级管理员权限
- 角色"admin"拥有所有权限,不用进行权限验证;
- 通过给用户分配"admin"角色,获取所有权限;
- 权限验证
- 使用jwt token进行无状态权限认证
- 用户登录成功生成token(生成访问令牌和刷新令牌,刷新令牌保存到redis)
- 用户提交请求,验证访问令牌是否过期
- 如果没有过期,已登录,流程完
- 如果过期,判断刷新令牌是否过期
- 如果过期,没有登录,流程完
- 如果没有过期,重新生成访问token
- 配置token过期时间
# sys config sys: jwt: secret: ==SFddfenfV2FuZzkyNjQ1NGRTQkFQSUpXVA== # 访问令牌过期时长(分钟),<= 0时,使用默认配置5分钟 access-token: expire-time: 1 # 刷新令牌过期时长(分钟),<= 0时,使用默认配置60分钟 refresh-token: expire-time: 5
- 使用jwt token进行无状态权限认证
- dubbo provider提供了查询全部,分页,保存,根据编号删除的默认实现
//**接口继承BaseService
public interface DeptService extends BaseService<Dept> {}
//**实现类继承AbstractBaseService,不直接继承MyBaits-plus的ServiceImpl,是防止默认提供的服务太多
public class DeptServiceImpl extends AbstractBaseService<DeptMapper, Dept> implements DeptService {}
- Ant table分页
//**使用ReactPage接收分页参数
public ApiResponse list(ReactPage<User> page, User entity){
ReactPage<User> list = (ReactPage<User>)this.iUserService.findPage(page, entity);
//**ReactPage的toReactPageFormat方法转换为Ant table分页数据
return ApiResponse.success("保存成功", list.toReactPageFormat());
}
- Ant tree树形结构
//**实体类继承AbstractReactTreeEntity
public class Dept extends AbstractReactTreeEntity{}
//**查询到所有数据后,使用AbstractTreeEntity.toTreeList静态方法转换为树形结构
List<Dept> list = this.baseMapper.selectList(new QueryWrapper<>());
AbstractTreeEntity.toTreeList(list)
- Ant TreeSelect树形结构
//**实体类继承AbstractReactTreeEntity
public class Dept extends AbstractReactTreeEntity
//**获取树实际的值
@Override
public String getValue() {
return this.getId() + "";
}
//**获取树显示的值
@Override
public String getTitle() {
return this.getName();
}
- 2019-02-10 搭建
- 2019-02-15 用户管理
- 2019-02-22 部门管理
- 2019-02-22 完善前端pings-ui-admin的权限
- 2019-03-11 角色管理、权限管理
- 2019-03-13 完善用户管理、角色管理
- 2019-03-20 添加账单管理提供者
- 2019-03-22 更新token规则,增加安全性
- 2019-03-26 添加账单管理消费者;开发基础数据管理菜单;退出登录时,使token无效
- 2019-03-28 欠款单管理、还款单管理和消费明细管理
- 2019-04-04 开发UserServiceStub,调用redis缓存,避免每个项目定义访问redis缓存逻辑
- 2019-04-10 在UserServiceStub中使用Guava Cache堆缓存缓存用户信息
- 2019-04-11 dubbo从2.6.5升级为2.7.1
- 2019-04-20 把公共类提取到pings-sys-commons
- 2019-05-15 把shiro+jwt认证类提取到pings-sys-commons
- 2019-05-18 重构shiro+jwt认证类,可实现通过配置在access token和结合refresh token/access token的方式之间进行切换
- 2019-05-22 把shiro+jwt认证类提取到pings-shiro-jwt,并打成jar包(pings-shiro-jwt地址)
- 2019-05-28 把dubbo配置修改为2.7.x动态配置和元数据中心
- 2019-07-25 pings-service-sys和pings-web-admin项目添加测试
- 2019-11-14 修复了登录的部分bug
- 2019-11-14 springboot升级到2.2.1,dubbo升级到2.7.4.1
- 2019-11-22 pings-shiro-jwt包修复同一个用户的并发请求的问题
- 2020-07-05 修改日志文件配置
- 2020-09-05 pings-shiro-jwt包修复同一个用户的并发请求的问题
- 2020-09-07 部分优化