权限管理系统
目录
前言
本文主要介绍什么是权限管理,以及基于RBAC的权限设计和在maven中使用shiro框架
一、RBAC是什么?
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单的说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系,也就是说,一个管理者有多个权限。
二、创建一个拥有多个权限的管理系统
1.分析
一个管理系统会有多个权限
例如:
管理产品模块权限:
- 添加商品信息
- 修改产品数据
- 浏览产品信息
- 删除产品信息
一个用户可以有多个角色,一个角色包含多个权限
上面这句话我们就需要多少张表来实现其功能?
一般情况下,需要五张表:
- 用户表
- 角色表
- 权限表
- 用户角色表
- 角色权限表
权限安全管理最终达到的目的是什么?
- 页面中没有权限的不可见
- 在地址栏拼写请求时将拦截
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>

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

被折叠的 条评论
为什么被折叠?



