shiro框架---通过系统介绍shiro框架中的实现逻辑

2023-11-08

接上一篇文章关于shiro框架的简单介绍及用户表的建立维护
  项目已分享到GitHub上,如果需要的可以看下,springboot+shiro项目Git下载地址

本篇主要通过一个已经实现用户登录和权限验证的系统,结合sql,展示一下我的实现。

首先我设置的权限,即功能表,其中func_type 字段分为四类(系统、模块、菜单、操作)。

一、系统的展示

  下边对于同一个系统内,一个用户,我在不同授权下的展示情况:
这里写图片描述
  不好意思,公司系统,我还是不要全贴出来了。
  当前用户我是授权的是测试角色,对于当前的角色我赋予的是以上的功能,即只显示了首页、系统管理、资源管理三个模块,以及部分菜单。下边是我对当前用户授权的测试角色
这里写图片描述
  然后我再将当前用户改为赋予测试角色2,来看一下效果。

这里写图片描述

这里写图片描述

以上,我只是贴出来对于功能的系统、模块、菜单的三种分类,对于操作类,在这里其实就是按钮的控制。而对于按钮的控制,我是通过shiro标签来实现的,但是前三种,实际上就是根据sql查询返回给前端的。
 对于上图中的系统类,其实存储在功能表中,是将那个图片,比如test.png这个字符串存储在功能表上的func_url 字段上
 对于上图中的模块类,其实多加了一级,用来将菜单类归类一下,func_url 上存储的是空字符串。
 对于上图中的菜单类,这个是主要的内容,其实只是将前端对于某个jsp的路径,比如/views/test.jsp 这样的字符串,存储到func_url 字段上。
 当然以上三种,都要存储到对应的func_type 字段,即要选对相应的功能类型。

二、基于sql的实现

  角色上授予不同功能

这里写图片描述
 这里其实就是拿着当前角色的id,还有勾选的多个功能id,然后去添加了多条角色功能关联表的记录。这样就将当前角色id与多种功能关联起来了。

  用户上授予不同角色

这里写图片描述
 这里的用户,当然可以授予多个角色,这里我仅仅只是授予了一个角色,不管几个,其实也就是在保存的时候,去添加用户角色关联表,将用户id和角色id关联起来。这样就在一个用户上绑定了多个角色,如果你这些角色上带有对应的site_id ,即站点,那相当于你可以对当前用户赋予多个系统站点的角色,这样在登录的时候,可以通过site_id 来筛选是否有某个系统的登录权限了。有些人可能觉得siteid应该放到功能表里,我这里放到角色里,是方便于在登录系统验证的时候少关联两张表,只要自己合理应用,我觉得没问题。
  以下是用户在授予多个角色下结构图,挺简单的:
这里写图片描述

  用户登录后,获取当前站点的角色的所有权限,这也是我最上边的实现sql

select distinct f.* from sys_User u,Sys_User_Role_R ur,sysy_Role r,Sys_Func_Role_R fr,Sys_Func f where u.user_id = ur.user_Id and ur.role_Id=r.id and r.id=fr.role_Id and fr.func_Id=f.id and u.user_name='lsf' and r.site_id='1' and f.func_type !=4
就是将这五张表关联一下,然后根据用户表的user_name 字段和角色表的site_id来查询出属于当前用户的站点1系统的功能列表,上边func_type != 4 表示不查询按钮类的功能,因为按钮类我是通过shiro的标签来控制的。关于shiro标签的应用,看这篇文章,shiro框架—关于项目按钮权限控制的配置要点
  这样在用户登录该系统后,就可以根据该sql,查询出来属于当前用户,当前系统的所有功能列表。返回给前端,前端再根据不同的功能类型(没有返回按钮,即类型为4的功能),分类,从func_url 中获取出值来,填充到前端的样式中,这样就实现了不同用户与功能的关联。
  说到这里,我觉得肯定还有人有疑问,我这样返回,前端怎么实现,其实这个很好实现,另外,我觉得不要关心前端如何展示,我们只需要关心实现根据不同用户,不同系统,返回相应的结果即可,其他的等你看到一次前端怎么实现的就知道有多简单了。
下一篇,进入shiro框架在系统项目中的配置介绍
下一篇文章shiro框架—shiro配置介绍(一)

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

shiro框架---通过系统介绍shiro框架中的实现逻辑 的相关文章

  • SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置

    序 关于标题 说是教学 实在愧不敢当 但苦与本人文笔有限 实在找不到更合理 谦逊的词语表达 只能先这样定义了 其实最真实的想法 只是希望这个关键词能让更多的人浏览到这篇文章 也算是对于自己写文章的一个肯定吧 关于内容 再写这系列文章之前 本
  • shiro和thymealeaf整合

    shiro和thymealeaf整合 一 加入依赖
  • spring集成shiro详解

    最近项目中要用到shiro作为权限管理 以前都是用自定义的或者spring security 所以就开始看了一些网上的文章 但是感觉都写得很零散 而且大多数都只是给了几行代码 我们得项目相对比较复杂 需要进行一些额外得改造和扩展 所以自己也
  • springmvc中Shiro注解无效问题的解决方案

    我只能说 官方文档不详细就是坑人 官方配置是对的 可惜没有说明配置应该配在哪个文件 Spring mvc中发现shiro的权限注解不起作用 官方的配置说可以支持注解 只需要将以下代码加到spring 配置文件中即可
  • Shiro学习笔记。

    授权需要继承 AuthorizingRealm 类 并实现其 doGetAuthorizationInfo 方法 AuthorizingRealm 类继承自 AuthenticatingRealm 但没有实现 AuthenticatingR
  • Apache Shiro(三)——Spring Boot 与 Shiro的 整合

    在了解了Apache Shiro的架构 认证 授权之后 我们来看一下Shiro与Web的整合 下面以Spring Boot为例 介绍一下Spring Boot 与 Shiro的 整合 一 创建一个Spring Boot项目 可以使用IDEA
  • SpringBoot基本操作(七)——SpringBoot整合Shiro权限管理(完整demo+界面)

    SpringBoot2 0笔记 一 SpringBoot基本操作 环境搭建及项目创建 有demo 二 SpringBoot基本操作 使用IDEA打war包发布及测试 三 SpringBoot基本操作 SpringBoot整合SpringDa
  • shiro多项目跳转用户身份失效问题排查

    shiro多项目跳转用户身份失效问题排查 1 身份失效问题 最近在项目中遇到过一个问题 统一登录系统中有各个子系统的模块 可点击子系统模块进行跳转 如下图所示 如上图 当用户点击子系统B新窗口打开时 实现跳转成功 当再回到原统一登录系统页面
  • shiro SecurityManager简介说明

    转自 shiro SecurityManager简介说明 下文笔者讲述Shiro SecurityManager的相关简介说明 如下所示 SecurityManager是Shiro框架的核心 典型的Facade模式 Shiro通过Secur
  • ruoyi管理系统+微信小程序登录解决

    原料 ruoyi管理系统项目模板 基于springboot 微信小程序项目 阿里云服务器 有域名 有ssl证书 阿里云服务器的ssl证书可以买一个仅限一年免费的那个证书 注意事项 1 微信小程序调用云服务器接口需要https csdn ne
  • shiro实现基于redis的sessionDao

    shiro实现基于redis的sessionDao 将session持久化到数据库的一个关键步骤是对session对象的序列化和反序列化操作 另外在使用redis保存session时一定要设置过期时间 或在编码中检查过期并及时删除缓存 否则
  • Shiro权限管理框架

    Shiro 一 Shiro权限 什么是权限控制 忽略特别细的概念 比如权限能细分很多种 功能权限 数据权限 管理权限等 理解两个概念 用户和资源 让指定的用户 只能操作指定的资源 CRUD 初学javaweb时怎么做 Filter接口中有一
  • springboot整合shiro相关依赖和配置整理

    springboot整合shiro 一 shiro快速开始 去github下载shiro 找到samples quickstart文件夹 用idea打开它 点进shiro ini文件 这个时候idea会提示下载插件 下载它 二 新建一个sp
  • 在微服务项目中,Spring Security 比 Shiro 强在哪?

    Spring Security 和Shiro的区别
  • 将 Shiro 的 PasswordMatcher 与自定义领域结合使用

    我使用 Apache Shiro 和自定义 JDBC 领域来从数据库中检索用户的盐 密码 哈希算法名称和哈希迭代次数 这些数据都存储为单独的列 问题是我不确定在使用 PasswordMatcher 验证用户密码与数据库中存储的密码是否匹配时
  • 将 Apache Shiro 安全库与基于 Dropwizard 的 JAX-RS 应用程序集成

    我正在尝试改变 Dropwizard 以支持 Shiro 我已阅读文档并且有点困惑 我想将 Shiro 与表单登录身份验证和 Apache Shiro 注释结合使用 我认为我需要使用 Jersey Filters 来支持 Shiro 这是在
  • Java – 高效、数据库感知的实例级授权?

    在 JPA 应用程序中 我有一个场景 其中该应用程序是 列出给定用户有权提款的所有帐户 我有帐户实体和一个多对多表 其中列出了每个用户对每个帐户拥有的授权 为了实现上述场景 应用程序当前只是内部联接两个表 这非常快 现在 我计划添加一个显式
  • 使用 Shiro 登录后重定向到最后访问的页面

    使用 apache shiro 登录并重定向到最后访问的页面的更好方法是什么 我只有这个 SecurityUtils getSubject login new UsernamePasswordToken username password
  • 定制/扩展Spring对shiro的@Async支持

    我正在使用Spring的 EnableAsync异步执行方法的功能 为了安全起见 我使用 Apache Shiro 在异步执行的代码中 我需要访问附加到触发异步调用的线程的 Shiro 主题 Shiro 支持通过将主题与主题相关联来在不同线
  • 配置 shiro.ini 以进行 JDBC 连接

    作为我新的一年学习新技术计划的一部分 我开始尝试使用 Apache Shiro 安全框架 我设法让基本示例正常工作 该示例将用户名 密码和角色存储在 shiro ini 文件中 但是当我修改 shiro ini 文件以使用 JDBC 时 它

随机推荐