当前位置:网站首页 > 技术博客 > 正文

权限管理js



 
  


​ Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。

不同身份的人进入系统所完成的操作不同,如下图,当一个系统包含左侧所有菜单功能时,要求不同人员登录展示不同权限下的菜单,这时候就需要学习权限管理,看完本文就可轻松掌握。
请添加图片描述

1.1 基于主页的权限管理

设计多种页面,当不同权限的用户访问时,跳转不同的用户,如下图,用户1登录跳转到index1.html,用户2登录跳转到index2.html,缺陷比较大且繁琐,不建议使用。
请添加图片描述

缺点:适用于用户级别较少的,不能动态分配权限

1.2 基于用户和权限的权限管理

利用用户表、用户权限表、权限表三张表,每个用户在中间表分配权限
请添加图片描述
实现权限的动态分配,但是每个用户对应一个用户权限,10个人就得10个,数据比较冗余,这样就衍生了下面的五张表

1.3 基于角色的访问控制(RBAC)

创建用户表、角色表、权限表和两张中间表用户角色表、角色权限表五张表,每次新加用户时只需要授予角色就可获得相对的权限。
请添加图片描述
给同类人员的其中一个人授予权限可以再加一张用户权限表,直接授予权限。
在这里插入图片描述


2.1 认证和授权
 

在这里插入图片描述

2.2 常见的安全框架
 
2.3 shrio核心功能

在这里插入图片描述

Anthentication 认证,验证用户是否有相应的身份 登录认证 Authorization
授权,权限验证,通过认证的用户检查是否有权限或者角色 Session Management
会话管理,用户在认证成功后创建会话,在没有退出之前,当前用户的所有信息都会保存在这个会话中 Cryptograsphy 加密,对敏感信息加密

支持的特性:
1.Web Support Shrio提供了过滤器,可以通过过滤器拦截web请求来处理web应用的访问控制
2.Caching 缓存支持,shiro可以缓存用户信息以及用户的角色权限信息,可以提高执行效率
3.concurrency shiro支持多线程应用
4.Run As 允许一个用户以另一种身份去访问
5.Remeber Me 记住密码
6.Testing 提供测试支持
Shiro是一个安全框架,不提供用户、权限的维护,用户的权限管理需要我们去设计






2.4 Shiro核心组件

在这里插入图片描述
Subject、Security Manager、Realms

  • Subject:表示待认证和授权的用户
  • Security Manager:Shiro框架的核心,Shiro就是通过Security Manager来进行内部实例的管理,并通过它来提供安全管理的各种服务
  • Realm:相当于shiro进行认证和授权的数据源
    在这里插入图片描述
2.5 shiro的使用

1.添加maven依赖

 

2.创建shiro的配置文件

在resource下创建ini后缀文件

 

3.使用测试

 
2.6 shrio认证流程

在这里插入图片描述

3.1 导入依赖
 
application.yml配置
 
3.2 Shiro配置

SpringBoot没有提供对Shiro的自动配置,因为Spring家族有自己的安全框架

  • config/shiroConfig.java
 
3.3 测试
  • UserServiceImpl.java
     
  • UserController.java
     
  • login.html
 
   
  • 通过shiro.ini定义正确的登录密码
     

在这里插入图片描述
密码正确跳转到index.html
密码错误跳转到login.html

3.4 内置JDBCRealm作为数据源

在这里插入图片描述
如果使用JdbcRealm,则必须提供JdbcRealm所需要的表结构(权限设计)

JdbcRealm规定的表结构

在这里插入图片描述
表中的字段必须保持一致,可以加字段

  • 用户信息表:users
     
  • 角色信息表: user_roles
     
  • 权限信息表:roles_permissions
     

在这里插入图片描述
从图中可以看出用户所对应的权限

步骤

配置Shiro

 

测试结果同上
在这里插入图片描述

3.5 shiro的标签的使用

​ 当用户认证进入到主页之后,需要显示用户信息及当前用户的权限信息,shiro提供了一套标签用于在页面来进行权限数据的呈现

Shiro提供了可供JSP使用的标签以及Thymeleaf标签

  • JSP页面中引用
     
  • Thymeleaf模板中引用
    • 在pom.xml中导入thymeleaf模板对shiro标签的支持依赖
     
         
    • 在ShiroConfig中配置Shiro的方言支持
     
         
    • Thymeleaf模板中引入shiro的命名空间
     
常用标签
 

具体用法如下:
数据库添加如下信息
在这里插入图片描述

 
 

当游客身份登录
请添加图片描述
当admin管理员登录
在这里插入图片描述
当仓管人员登录
在这里插入图片描述
当行政人员登录
在这里插入图片描述






当要使用自己定义的数据结构表,就需要告诉Realm,更改为自己设计的数据源

4.1 数据库设计

在这里插入图片描述

SQL语句

 

在这里插入图片描述
从表中就可以查询出lisi的角色为cmanager,权限有[入库,出库,修改,查询]

一个人可以关联多个角色,权限取多个角色的并集

4.2 创建DAO层
 

编写Mapper映射

UserMapper.xml

 

RoleMapper.xml

 

PermissionMapper.xml

 
4.3 application.yml
 
4.4 pom.xml
 
4.5 自定义Realm配置类

要使用自己设计的权限数据库,这个时候的Realm就要继承AuthorizingRealm类使它成为一个Realm类。

在config配置包里创建MyRealm.java

 
4.6 shiro配置

ShiroConfig.java

 
4.7 shiro业务层
 
4.8 Controller层
 
4.9 整合layUI

导入layui包,官网复制后台框架代码

 

实现不同权限的管理员登录,展示的菜单不同

zhangsan 超级管理员 显示全部菜单
在这里插入图片描述
wangwu xmanager管理员,对仓库管理只有查看的权限
在这里插入图片描述


layui实现点击左边菜单,内容右边显示
在这里插入图片描述
在这里插入图片描述

用户密码在存储到数据库之前根据一定的加密规则加密为密文。加密规则可以自定义,在项目开发中通常使用BASE64和MD5编码方式进行加密

​ BASE64:可以反编码的编码方式。

​ MD5:不可逆的编码方式(网站上常见的MD5解密,只不过是列出常见密码的密文进行查询,密码一旦复杂就解密不出来了,为了防止暴力穷举激活成功教程,可以加盐加密)

在这里插入图片描述

 
5.1 Shiro加密
 
5.2 密码认证

在ShiroConfig中配置加密规则

修改上文的ShiroConfig.java,设置加密规则认证时就生效,没有设置加密规则,默认明文校验

 

在这里插入图片描述

可以正常登录,如果密码加盐了,Realm在返回认证信息时需要返回盐数据,在自定义Realm中修改

 

在这里插入图片描述

  • 在Shiro过滤器中进行配置,配置logout对应的路径
    在这里插入图片描述
  • 在页面的退出按钮上添加路径/logout
    在这里插入图片描述
    当点击退出登录按钮时,shiro会拦截logout的路径调用subject.logout()登出。

​ 一般的授权方式有两种:一、HTML授权,即用户登录只显示自己权限的菜单,没有权限的菜单不显示。二、过滤器授权,对所有用户显示所有菜单功能,当用户点击菜单后再验证是否有此权限,无权限提示权限不足。

7.1 HTML授权
  • shiro标签
 
7.2 过滤器授权

在这里插入图片描述

7.3 注解授权
  • 配置Spring对Shiro的注解支持
 
   
  • 在请求的控制器添加权限注解
 

当无权人员访问时会抛出AuthorizationException异常,可以配置全局异常类。

 
7.4 手动授权

在代码中进行权限校验,一般写在业务层

 

版权声明


相关文章:

  • mipi接口是什么意思2025-09-02 18:01:07
  • 召回率和精度怎么计算2025-09-02 18:01:07
  • 积分电路详细工作原理2025-09-02 18:01:07
  • 私库网app2025-09-02 18:01:07
  • amd能用android虚拟机吗2025-09-02 18:01:07
  • ctf pwn入门书籍2025-09-02 18:01:07
  • 藏文输入法下载安装2025-09-02 18:01:07
  • c语言指针数组与数组指针2025-09-02 18:01:07
  • 网速慢dns怎么设置2025-09-02 18:01:07
  • ccp协议及xcp协议2025-09-02 18:01:07