springboot 实现权限管理(一)

2023-10-27

一、背景

1、 为什么进行权限管理?
生活在形形色色的世界之中,我们各自扮演着各自的角色,拥有不同的权利和义务。映射在计算机系统之中,也一样需要 角色、权限 来进行对用户的分类,限制访问资源,保证资源地合理被使用,使人各司其职。
2、应用场景
假设 管理员可以对用户进行CRUD的管理,而普通用户往往只拥有对资源的查看,无法进行删除等高级权限。
3、SpringBoot实现主要的方式
(1)采用注解+拦截器
(2)Shiro框架
(3)Spring Security
4、重点理解
(1)理解用户、角色、权限的概念
(2)分类资源(对应相应的权限),一般可以有数据权限、操作权限、访问权限等,表现为对URL(URI)的访问控制;URL即标识了访问数据,图片等。
(3)将用户,角色,权限 在库表设计时的五张表理解。在关系数据库中,由于原子性(第一规范),因此需要两张关联表进行管理用户和角色,角色和权限。

二、实现

  1. 实现逻辑:采用自底向上的思维

  2. 设计库表
    在这里插入图片描述

create table crm.cus_user
(
    id          int auto_increment
        primary key,
    username    varchar(50)  not null,
    password    varchar(255) not null,
    name        varchar(31)  null,
    sex         varchar(2)   null,
    phone       varchar(11)  null,
    address     varchar(255) null,
    dept_id     varchar(100) null,
    create_time timestamp    null
)
    comment '用户表';

create table crm.cus_role
(
    id             int auto_increment
        primary key,
    name           varchar(255) null,
    create_time    timestamp    null,
    create_user_id int          null,
    update_time    timestamp    null,
    update_user_id timestamp    null
)
    comment '用户角色表';
    
create table crm.cus_permission
(
    id    int auto_increment
        primary key,
    name  varchar(255) null,
    pid   int          null,
    level int          null,
    mark  varchar(255) null
)
    comment '用户权限表';
create table crm.role_permission
(
    id         int auto_increment
        primary key,
    role_id    int null,
    permission int null
)
    comment '角色权限关联表';

create table crm.user_role
(
    id      int auto_increment
        primary key,
    user_id int null,
    role_id int null
)
    comment '用户权限关联表';




  1. 处理逻辑分析

(1)用户访问非登录URL,则查看token(存储在header);若token失效则返回失效,token未失效进行权限查看(token及权限信息等常用个人信息采用Redis进行缓存),有权限放行,无权限拦截;
(2)用户访问登录URL,则无需拦截,判断用户、密码,进行缓存个人信息(查询关系数据库的用户角色、权限信息后进行缓存),并返回token给用户作为下次登录凭证;

  1. 具体代码

(1)工程结构:
在这里插入图片描述
按照 MVC的工程结构:分为 controller,service,dao;
controller:暴露访问资源的URL,使用注解进行注解需要权限的class或method;
service:实现登录逻辑,登录验证,保存token。
dao:访问数据库(采用JPA)
interceptor:进行拦截处理
(2)Postman进行测试
(3)关于Token的生成
在此简单采用的Md5简单加密,好处是简单,坏处是token不具动态性;采用采用策略模式进行设计不同的加密方式(JWT,等)

代码:见Gitee
三、项目地址 gitee

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot 实现权限管理(一) 的相关文章

随机推荐

  • new String和String直接赋值的区别

    栈区存引用和基本类型 不能存对象 而堆区存对象 是比较地址 equals 比较对象内容 在hotspot虚拟机中 jdk1 8之后 String常量池是在堆中的 单纯的String str aaa 是从虚拟机栈中的变量直接指向String常
  • 单点登录CAS学习(一):初识单点登录

    一 单点登录应用场景 不少业主单位随着自身的发展 建立不少业务支撑系统 往往会采用不同的开发商进行系统开发和建设 因此必然形成如下一种局面 工作人员需要登录多个业务系统才能将自己的工作全部完成 给工作人员带来了额外的负担 因此单点登录变应运
  • CentOS 6.9下的iptables在本机用DNAT转发指定IP到内网IP无效的问题解决(127.0.0.1)...

    比如 iptables t nat A OUTPUT p tcp d 192 168 1 0 24 dport 2222 j DNAT to destination 127 0 0 1 2222或者iptables t nat A OUTP
  • [个人笔记] Windows配置NTP时间同步

    Windows 运维篇 第六章 Windows配置NTP时间同步 Windows 运维篇 系列文章回顾 Windows配置NTP时间同步 域控环境的NTP配置 工作组环境的NTP配置 Windows的CMD部分命令集 参考来源 系列文章回顾
  • Angular表单实现双向数据绑定

    创建组件过程省略 实现双向数据绑定 要在app module中引入并声明 表单组件内容 import Component from angular core Component selector app form templateUrl f
  • mysql开启日志general_log

    general log会记录下发送给MySQL服务器的所有SQL记录 因为SQL的量大 默认是不开启的 一些特殊情况 如排除故障 可能需要临时开启一下 开启MySQL的general log MySQL有三个参数用于设置general lo
  • OBS直播画质怎么调?

    有用户在使用OBS软件直播时 发现直播的画质太差了 想要调高画质 但是却不知道如何调整 OBS参数设置教程 1 双击或者右击打开OBS软件 接着点击右下角箭头所指的设置选项 2 来到设置界面后 点击页面左侧的输出选项 3 在下图所示的输出页
  • Python学习总结1(知识+示例)

    学习环境 Ubuntu18 04系统 Geany编辑器 Python3 Pyhton3 安装 sudo add apt repository ppa fkrull deadsnakes sudo apt get update sudo ap
  • 故障注入测试(Fault Injection Test)评价类型说明

    这周新一篇技术文章来袭 上周我们对故障注入测试 Fault Injection Test 方法进行了初步的了解 本周要分享的技术文章是 故障注入测试 Fault Injection Test 评价类型说明 将针对故障注入测试进行更深层的说明
  • Linux 字符串截取方法

    八种截取方法 场景 var http www baidu com abc html 1 删除左边字符 保留右边字符 例 echo var 输出内容 www baidu com abc html 表示所有 获取变量var从左边遍历开始遇到的第
  • linux常用压缩、解压缩文件或文件夹命令tar、zip

    前言 工作中 压缩 解压缩文件或文件夹是比较基本的操作了 利用 tar或zip 命令可以把一大堆的文件和目录打包成一个文件 这对于备份文件或是将几个文件组合成为一个文件进行网络传输是非常有用的 tar压缩文件 tar 选项 源文件或目录 选
  • 微信支付接入

    目 录 第1章 微信支付接入 2 第2章 微信小程序申请微信支付 3 2 1 申请微信支付 3 2 2 微信审核 3 2 3 账户参数说明 4 第3章 微信公众号申请微信支付 5 3 1 支付申请 5 3 2 提交资料 6 3 3 填写商户
  • 多益网络校招前端面经(2020.09.24)

    多益网络校招前端面经 2020 09 24 面试平台 QQ视频通话 时长 大约半小时 过程 自我介绍 项目问题 项目中遇到的问题以及解决方式 在团队开发过程中个成员合作方式 遇到问题的解决方式 css命名冲突 http和https http
  • PyCharm使用教程(详细版 - 图文结合)

    目录 一 创建项目 二 运行 三 错误提示 四 安装三方包 PyCharm的使用贯穿整个Python的学习 所以单独拿出来出教程不合适 说多了对于新手来说也还是不明白 这里我们先从学习开始前大家需要用到PyCharm的一些功能讲起 后面的p
  • PHP实现用户登录注册(详细教程)

    教程前先给大家看看小编的实现成果吧 图1 图2 图3 教程 实现这个功能我们需要五个php文件 login php 登录界面 如图2
  • unity通过全局事件对项目进行解耦

    一个类要是想调用另一个类的方法 例如A想调用B的方法 方式一 引用 最简单的方式是A持有一个B类的引用 即A拥有一个B的成员对象 方式二 设计模式 中介者模式 或者A和B同属于一个对象C 通过对象C调用对方 中介者模式 例如QQ群 A和B互
  • 如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数 我发现将二维数组作参数进行传递还不是想象得那么简单里 但是最后我也解决了遇到的问题 所以这篇文章主要介绍如何处理二维数组当作参数传递的情况 希望大家不至于再在这上面浪费时间 正文 首先 我引
  • android 弹出式对话框实现自定义菜单栏

    第一步 创建菜单项实体类 Menu 菜单栏选项类 public class Menu 标题 private String title Id 图片Id private int iconID public Menu String title i
  • OpenWrt安装使用教程(x86/64架构)

    什么是OpenWrt 官网简介 OpenWrt项目是一个针对嵌入式设备的Linux操作系统 OpenWrt不是一个单一且不可更改的固件 而是提供了具有软件包管理功能的完全可写的文件系统 这使您可以从供应商提供的应用范围和配置中解脱出来 并且
  • springboot 实现权限管理(一)

    一 背景 1 为什么进行权限管理 生活在形形色色的世界之中 我们各自扮演着各自的角色 拥有不同的权利和义务 映射在计算机系统之中 也一样需要 角色 权限 来进行对用户的分类 限制访问资源 保证资源地合理被使用 使人各司其职 2 应用场景 假