百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

不用权限框架,基于 Spring Boot 2.x 构建一个最基础的权限系统

ccwgpt 2024-10-27 08:53 29 浏览 0 评论

本项目是使用SpringBoot2构建的一套基于RBAC权限模型的后台管理系统,前端是微信小程序。

项目地址:

https://github.com/fuyunwang/DrivingAgency

项目的缘由

最近接了个外包,主要是针对于驾校开发一个代理小程序。目的是为了方便驾校的管理来招揽学员,同时方便维护学员和代理信息。

项目介绍

项目业务功能介绍

本项目的业务需求比较少,是一个传统项目,核心的业务点是权限管理,这里我就采用比较规范的RBAC权限模型来开发。由于项目比较小,这里我就没有采用Shiro或SpringSecurity等权限管理框架,而是自己使用过滤器开发了一套。我认为这可以算是权限管理的雏形,如果有更复杂的权限管理需求,可以很方便的基于此扩展。

  1. 管理员角色为最高权限,账户为admin,初始密码为123456。
  2. 管理员可以创建一级代理、添加学员。
  3. 一级代理可以创建二级代理、添加学员。但是一级代理创建的代理和学员初始为未审核状态,只有超管才能审核
  4. 二级代理只有在审核通过后才能添加学员且二级代理不能创建代理。
  5. 针对每个代理获取其下的所有学员,如果是超管或一级代理获取其添加学员的同时获取其下子代理的学员。
  6. 排行榜系统。根据每个代理所添加的代理或学员数(包括子代理的学员数)来确定代理的业绩。获得日业绩排行和总业绩排行
  7. 针对排行榜中的代理进行点赞和评论。

技术实现

  1. 首先认证方面,我这里仍然采用jwt token的认证方式。这里我默认实现了记住密码的功能。即用户第一次登陆成功之后返回一个token在response header中,该token的有效期为2小时,服务器端我保存一个有效期为1周的refresh token。用户在2个小时之内登录不会返回token,2个小时和一周之内第一次携带过期token我会返回新的token在response header。一周之外refresh token失效,这里需要用户重新登录。 这里我也是借鉴了别人的思路:https://segmentfault.com/a/1190000013151506
  2. 权限管理方面,我这里共用了4张表,其实基准的RBAC权限模型最少要5张表。这里比较简单,所以我主要是用户表、角色表、权限表以及权限角色表。用户和角色是一对一的关联关系、角色和权限是一对多的关系。表结构如下:
  1. Filter实现权限过滤。这里比较简单,但是记录一个比较鸡肋的事。就是在SpringBoot中使用Filter时,SpringBoot提供了 @ServletComponentScan(basePackages="com.beautifulsoup.driving")和 @WebFilter及 @Order注解,但是这里的 @Order并不能实现多个Filter的顺序性,无奈我只能采用 FilterRegistrationBean来注入Filter,同时请求第一步进入的是Filter且其不被Spring管理,故而不能通过 @Autowired注解只能构造方法注入。Filter内部用ThreadLocal保存用户信息,校验用户的权限,ThreadLocal作为线程级别对象,对于SpringSecurity中的用户信息保存也是基于此的。
  2. 数据访问层,这里我使用的Spring Data。包括Spring Data Jpa和Spring Data Mongodb。传统项目没必要针对SQL做太多优化,这里我就纯ORM。
  3. 排行榜系统,仍然是记录用户添加代理和学员之后记录入Redis。ZSET记录用户的日业绩和总业绩,然后将前10名从Hash中返回,提升效率。
  4. 点赞仍然使用Redis维护代理的点赞数、评论数据入Redis。
  5. 导出Excel,方便管理员维护代理和学员数据,这里采用Apache POI

小程序界面展示:

接口文档:

文档地址:

https://github.com/fuyunwang/DrivingAgency/wiki/%E9%A9%BE%E6%A0%A1%E4%BB%A3%E7%90%86%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%90%8E%E7%AB%AFAPI%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3#25%E7%BB%99%E6%8C%87%E5%AE%9A%E4%BB%A3%E7%90%86%E8%AF%84%E8%AE%BA

例子:

技术包括

  1. Spring Boot 2.1.3
  2. Spring Data Jpa
  3. Spring Data Redis
  4. Spring Data Mongodb
  5. Spring Boot Mail
  6. Swagger
  7. Quartz
  8. JWT Token
  9. FastDFS
  10. apache poi

要点

  1. 热点数据入Redis,提高SQL的查询性能
  2. 认证采用Jwt Token+Refresh Token+黑名单策略,提高用户体验
  3. 权限管理采用规范的RBAC权限模型
  4. 点赞、排行等数据入Redis,每天进行一次Quartz任务调度,Redis中数据落库
  5. 评论、发布公告等信息入Mongodb,便于存储、操作

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!

Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注

作者:城风

地址:https://juejin.im/post/5ca1b08fe51d455201119177

相关推荐

RACI矩阵:项目管理中的角色与责任分配利器

作者:赵小燕RACI矩阵RACI矩阵是项目管理中的一种重要工具,旨在明确团队在各个任务中的角色和职责。通过将每个角色划分为负责人、最终责任人、咨询人和知情人四种类型,RACI矩阵确保每个人都清楚自己...

在弱矩阵组织中,如何做好项目管理工作?「慕哲制图」

慕哲出品必属精品系列在弱矩阵组织中,如何做好项目管理工作?【慕哲制图】-------------------------------慕哲制图系列0:一图掌握项目、项目集、项目组合、P2、商业分析和NP...

Scrum模式:每日站会(Daily Scrum)

定义每日站会(DailyScrum)是一个Scrum团队在进行Sprint期间的日常会议。这个会议的主要目的是为了应对Sprint计划中的不断变化,确保团队能够有效应对挑战并达成Sprint目标。为...

大家都在谈论的敏捷开发&Scrum,到底是什么?

敏捷开发作为一种开发模式,近年来深受研发团队欢迎,与瀑布式开发相比,敏捷开发更轻量,灵活性更高,在当下多变环境下,越来越多团队选择敏捷开发。什么是敏捷?敏捷是一种在不确定和变化的环境中,通过创造和响应...

敏捷与Scrum是什么?(scrum敏捷开发是什么)

敏捷是一种思维模式和哲学,它描述了敏捷宣言中的一系列原则。另一方面,Scrum是一个框架,规定了实现这种思维方式的角色,事件,工件和规则/指南。换句话说,敏捷是思维方式,Scrum是规定实施敏捷哲学的...

敏捷项目管理与敏捷:Scrum流程图一览

敏捷开发中的Scrum流程通常可以用一个简单的流程图来表示,以便更清晰地展示Scrum框架的各个阶段和活动。以下是一个常见的Scrum流程图示例:这个流程图涵盖了Scrum框架的主要阶段和活动,其中包...

一张图掌握项目生命周期模型及Scrum框架

Mockito 的最佳实践(mock方法)

记得以前面试的时候,面试官问我,平常开发过程中自己会不会测试?我回答当然会呀,自己写的代码怎么不测呢。现在想想我好像误会他的意思了,他应该是想问我关于单元测试,集成测试以及背后相关的知识,然而当时说到...

EffectiveJava-5-枚举和注解(java枚举的作用与好处)

用enum代替int常量1.int枚举:引入枚举前,一般是声明一组具名的int常量,每个常量代表一个类型成员,这种方法叫做int枚举模式。int枚举模式是类型不安全的,例如下面两组常量:性别和动物种...

Maven 干货 全篇共:28232 字。预计阅读时间:110 分钟。建议收藏!

Maven简介Maven这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。Maven是一个跨平台的项目管理工具。主要服务于基于Java平台的项目构建、依赖管理和项目信息管理。仔...

Java单元测试框架PowerMock学习(java单元测试是什么意思)

前言高德的技术大佬在谈论方法论时说到:“复杂的问题要简单化,简单的问题要深入化。”这句话让我感触颇深,这何尝不是一套编写代码的方法——把一个复杂逻辑拆分为许多简单逻辑,然后把每一个简单逻辑进行深入实现...

Spring框架基础知识-第六节内容(Spring高级话题)

Spring高级话题SpringAware基本概念Spring的依赖注入的最大亮点是你所有的Bean对Spring容器的存在是没有意识的。但是在实际的项目中,你的Bean必须要意识到Spring容器...

Java单元测试浅析(JUnit+Mockito)

作者:京东物流秦彪1.什么是单元测试(1)单元测试环节:测试过程按照阶段划分分为:单元测试、集成测试、系统测试、验收测试等。相关含义如下:1)单元测试:针对计算机程序模块进行输出正确性检验工作...

揭秘Java代码背后的质检双侠:JUnit与Mockito!

你有没有发现,现在我们用的手机App、逛的网站,甚至各种智能设备,功能越来越复杂,但用起来却越来越顺畅,很少遇到那种崩溃、卡顿的闹心事儿?这背后可不是程序员一拍脑袋写完代码就完事儿了!他们需要一套严谨...

单元测试框架哪家强?Junit来帮忙!

大家好,在前面的文章中,给大家介绍了以注解和XML的方式分别实现IOC和依赖注入。并且我们定义了一个测试类,通过测试类来获取到了容器中的Bean,具体的测试类定义如下:@Testpublicvoid...

取消回复欢迎 发表评论: