权限管理系统以及shiro框架的配置(详细教程+shiro框架源码)

本文详述了权限管理系统的设计,解释了RBAC模型,并通过Shiro框架展示了如何在Java项目中实现权限控制。文章涵盖了创建RBAC所需的数据表设计,Shiro的组件如Subject、SecurityManager等,以及在Maven项目中配置和使用Shiro的步骤,包括自定义令牌和认证 Realm。最后,提供了登录验证示例和源码下载链接。

权限管理系统


前言

本文主要介绍什么是权限管理,以及基于RBAC的权限设计和在maven中使用shiro框架


一、RBAC是什么?

RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单的说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系,也就是说,一个管理者有多个权限。

二、创建一个拥有多个权限的管理系统

1.分析

一个管理系统会有多个权限
例如:
管理产品模块权限:

  • 添加商品信息
  • 修改产品数据
  • 浏览产品信息
  • 删除产品信息

一个用户可以有多个角色,一个角色包含多个权限
上面这句话我们就需要多少张表来实现其功能?
一般情况下,需要五张表:

  1. 用户表
  2. 角色表
  3. 权限表
  4. 用户角色表
  5. 角色权限表

权限安全管理最终达到的目的是什么?

  1. 页面中没有权限的不可见
  2. 在地址栏拼写请求时将拦截

2.基于 RBAC的权限设计

上文提到了用户、角色与权限之间需要五个表,接下来就对五个表进行设计

用户表
在这里插入图片描述
角色表
在这里插入图片描述
权限表
在这里插入图片描述
管理员_角色表
在这里插入图片描述
角色_权限表
在这里插入图片描述
通过以上5张表 如何不依托框架来自己实现权限控制管理?
在用户登录[认证]后根据用户的信息获取该用户的权限列表.存放进Session中
当用户进行下一步操作时 从session中获取用户的权限信息 与用户的行为进行比对

除了这种方法以外,我们还可以通过使用shiro框架进行权限管理。


框架方式实现(Shiro框架)

安全框架

在这里插入图片描述
subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权。
securityManager:安全管理器,主体进行认证和授权都是通过securityManager进行。
authenticator:认证器,主体进行认证最终通过authenticator进行的。
执行登录操作 (认证) 登录 用户名/密码
authorizer:授权器,主体进行授权最终通过authorizer进行的。
获取这个身份下的所属权限
授权 当用户进行认证后 进行授权根据这个用户信息获取权限列表
鉴权 当用户要做什么时 进行鉴权
sessionManager:web应用中一般是用web容器对session进行管理,shiro也提供一套session管理的方式。
cache Manager:缓存管理器,主要对session和授权数据进行缓存,比如将授权数据通过cacheManager进行缓存管理,和ehcache整合对缓存数据进行管理。
一个用户 登录后 进行操作时 获取 权限列表 进行鉴权操作,下一次在执行 一个请求时 就不需要在根据当前登录这获取id 查询 权限 (加入这个用户具备角色的管理 对自身拥有的角色进行了权限的更改后,不会马上生效)

在maven中使用Shiro框架

1.创建一个maven项目

文档尾部有源码链接,需要的自行查看

用下面的代码将pom文件中的对应位置的代码进行替换

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>4.1.1.RELEASE</spring.version>
    <shiro.version>1.3.2</shiro.version>
    <java-version>1.8</java-version>
  </properties>


  <dependencies>
    <!-- spring mvc -->

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${
   
   spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${
   
   spring.version}</version>
    </dependency>



    <!-- servlet -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>


    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      <scope>compile</scope>
    </dependency>



    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.2.3</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.2.3</version>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.2.3</version>
    </dependency>



    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值