RBAC(Role-Based Access Control )基于角色的访问控制。

RBAC 认为权限的过程可以抽象概括为:

判断【Who 是否可以对 What 进行 How 的访问操作(Operator)】

Who:权限的拥用者或主体

What:权限针对的对象或资源

How:具体的权限

Operator:操作。表明对 What 的 How 操作。也就是 Privilege+Resource

Role:角色,一定数量的权限的集合。权限分配的单位与载体,目的是隔离User与Privilege的逻辑关系

UA(User Assignment):用户角色分配

PA(Permission Assignment):角色许可分配

实例:不同用户权限登录,显示不同权限分配:

1)框架:SpringMVC+Spring+Mybatis

2)数据库:Mysql

创建表:

多对多通过第三方表关联(roles_menus)

实现效果:

看主要源代码:

俩个过滤器:

当你不是从登录页面进去的时候,后台会强制你先进入登录页面

package com.bjsxt.filter;

import com.bjsxt.pojo.Users;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException; public class loginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String uri = req.getRequestURI();
/*//对静态资源做处理
if (uri.endsWith(".js")||uri.endsWith(".css")||uri.endsWith(".gif")){
chain.doFilter(request,response);
}else {*/
//对登录做处理
if (uri.indexOf("login")!=-1||uri.indexOf("userlogin")!=-1){
chain.doFilter(request,response);
}else {
HttpSession session = req.getSession();
Users user = (Users)session.getAttribute("user");
if (user!=null&&user.getUsername().length()>0){
chain.doFilter(request,response);
}else {
req.setAttribute("msg","请先登录,再进行后续操作~");
req.getRequestDispatcher("/login").forward(request,response);
}
}
//}
}
@Override
public void destroy() { }
}

当你登录过后,直接越级访问会拦截

package com.bjsxt.filter;

import com.bjsxt.pojo.Funs;
import com.bjsxt.pojo.Users; import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List; public class safeFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException { } @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain Chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
String uri = req.getRequestURI();
if (uri.endsWith(".jsp")||uri.endsWith(".css")||uri.endsWith(".gif")){
Chain.doFilter(servletRequest,servletResponse);
}else if (uri.indexOf("login")!=-1||uri.indexOf("userlogin")!=-1){
Chain.doFilter(servletRequest,servletResponse);
}else {
HttpSession session = req.getSession();
Users user = (Users)session.getAttribute("user");
List<Funs> funs = user.getFuns();
boolean flag=false;
for (Funs f:funs){
//判断当前访问的 URI 是否在功能数据中包含
if (uri.indexOf(f.getFunurl())!=-1){
flag=true;
break;
}
}
//根据开关的值来进行跳转
if (flag){
Chain.doFilter(servletRequest,servletResponse);
}else {
resp.sendRedirect("roleerror");
}
}
} @Override
public void destroy() { }
}

普通用户权限和管理员权限数据库表:

管理员:

普通用户:

rbac结合ssm实现权限分配和管理的更多相关文章

  1. rbac集成 权限分配。之角色管理

    权限分配功能拆分: a. 角色管理 b. 用户管理 c. 菜单和权限的管理 d. 批量的权限操作 e. 分配权限 先实现 角色管理: 无非也就是,增删改查: 定义路由, 编写视图. 1.查看角色页面: ...

  2. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十三节--RBAC模式及ABP权限管理(附送福利)

    ABP+AdminLTE+Bootstrap Table权限管理系统一期 Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate- ...

  3. tp5的RBAC插件及其使用很方便的管理用户登录及操作权限

    tp5-rbac 本扩展包是tp5的rbac包,使用了部分tp5的特性实现了关系型数据库中特殊数据结构的处理. 安装方法 先安装composer如果不知道怎么安装使用composer请自行百度. 打开 ...

  4. linux 用户创建、管理、权限分配

    (1)su与sudo su:通过su可以在用户之间切换,如果超级权限用户root向普通或虚拟用户切换不需要密码,什么是权力?这就是!而普通用户切换到其它任何用户都需要密码验证: sudo: sudo扮 ...

  5. “MVC+Nhibernate+Jquery-EasyUI” 信息发布系统 第五篇(用户管理之“用户权限分配”)

    一.在做权限分配之前,首先先了解“ZTree”这个插件,我的这个系统没有用Jquery-EasyUI的Tree.用的是”ZTree“朋友们可以试试,也很强大.点击下载ZTree插件.       1. ...

  6. Mysql用户管理及权限分配

    早上到公司,在服务器上Mysql的数据库里新建了个database,然后本地的系统里用原来连接Mysql账号admin连这个数据库.结果报错了,大概是这样子的: Access denied for u ...

  7. RBAC权限分配

    RABC:基于角色的权限访问控制(Role-Based Access Control) 一般在登录系统认证通过后,会先确定的该用户的操作权限,判断用户的后续操作是否合法! RABC至少需要三张表:用户 ...

  8. php_ThinkPHP的RBAC(基于角色权限控制)详解

    一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...

  9. RBAC打造通用WEB权限

    RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方便 5个关系对应5张表 五张表设计 CREATE TABLE `user` ( `id` ) unsig ...

随机推荐

  1. 史上最详细的C语言冒泡排序算法

    未经同意,请勿转载. void bubbing(){ ] = {,,,,,,,,,};//define init the array //going to the exinternal loop,st ...

  2. java VS c#,异同点

    因工作安排,后期需要维护一个java项目.所以稍微熟悉下java,开此篇记录下java与c#的区别点,方便增强自己学习效果.肯定是不全的,可能是有错的,欢迎批评指正. 一.关键字 描述 C# Java ...

  3. 在Debian/Ubuntu上面安装升级nginx到最新版

    在Debian下面通过 apt-get 可以自动安装 nginx,不过版本一般比较老,如果想要使用nginx的最新特性就需要升级版本.   一般安装可以通过编绎源文件安装,但可能需要安装很多编绎工具, ...

  4. RHEL7.2 SSH无密码登录非root用户

    1 修改三台虚拟机的/ect/hosts文件 [hadoop@hadoop01 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain ...

  5. Vue学习之Vue模拟后台数据

    前后端项目的开发,需要前端和后端同时进行开发,有时后端开发人员还未完成API接口可以提供给前端调用,因此就需要模拟前端请求后端接口,后端返回数据.一般开发中都是返回json数据格式来完成前后端的交互. ...

  6. sql注入基本原理

    SQL注入基本原理 WEB技术发展日新月异,但是徒手拼SQL的传统手艺还是受相当多的开发者亲睐.毕竟相比于再去学习一套复杂的ORM规则,手拼更说方便,直观.通常自己拼SQL的人,应该是有听说过SQL注 ...

  7. 如何利用快照( snapshot )功能快速定位性能问题

    我们常常会遇到这样的困惑,收到用户或者客服的反馈,平台使用有问题,但是测试人员搭建环境后又没办法复现故障,最后导致问题没法解决,眼睁睁地看着用户流失. 这是因为线上生产环境非常复杂.很多时候是偶发性  ...

  8. java之初见

    1.Java语言的了解: Java语言最早是由SUN公司创造出来的,1991年,SUN公司的green项目,Oak,随后SUN公司和后来的甲骨文公司又先后发布了java1.0,1.1,1.2,1.3, ...

  9. es6 filter方法应用

    let arr =[ {title:'aaaa',read:100,hot:true}, {title:'bbbb',read:50,hot:false}, {title:'ccc',read:100 ...

  10. Mybatis日志体系

    承接上一篇关于spring 5.x的日志体系,本篇看看Mybatis的日志体系及实现,Mybatis版本基于3.x. 关于mybatis的官方文档比较友好,分门别类,各有论述,如mybatis官方文档 ...