基于url权限管理流程

完成权限管理的数据模型创建。

1.     系统登陆

系统 登陆相当 于用户身份认证,用户成功,要在session中记录用户的身份信息.

操作流程:

用户进行登陆页面

输入用户名和密码进行登陆

进行用户名和密码校验

如果校验通过,在session记录用户身份信息

1.1 用户的身份信息

1.2 mapper

mapper接口: 根据用户账号查询用户(sys_user)信息

1.3 service

功能:根据用户的身份和密码 进行认证,如果认证通过,返回用户身份信息

认证过程:

根据用户身份(账号)查询数据库,如果查询不到用户不存在

对输入的密码 和数据库密码 进行比对,如果一致,认证通过

1.4 controller

1.5 用户认证拦截器

//用于用户认证校验、用户权限校验

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

//得到请求的url

String url = request.getRequestURI();

//判断是否是公开 地址

//实际开发中需要公开 地址配置在配置文件中

//从配置中取逆名访问url

List<String> open_urls = ResourcesUtil.gekeyList("anonymousURL");

//遍历公开 地址,如果是公开 地址则放行

for(String open_url:open_urls){

if(url.indexOf(open_url)>=0){

//如果是公开 地址则放行

return true;

}

}

//判断用户身份在session中是否存在

HttpSession session = request.getSession();

ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser");

//如果用户身份在session中存在放行

if(activeUser!=null){

return true;

}

//执行到这里拦截,跳转到登陆页面,用户进行身份认证

request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);

//如果返回false表示拦截不继续执行handler,如果返回true表示放行

return false;

}

1.6 在springmvc.xml中配置拦截器

2. 授权

2.1 commonURL.properties

在此配置文件配置公用访问地址,公用访问地址只要通过用户认证,不需要对公用访问地址分配权限即可访问。

2.2 获取用户权限范围的菜单

思路:

在用户认证时,认证通过,根据用户id从数据库获取用户权限范围的菜单,将菜单的集合存储在session中。

mapper接口:根据用户id查询用户权限的菜单

service接口:根据用户id查询用户权限的菜单

2.3 获取用户权限范围的url

思路:

在用户认证时,认证通过,根据用户id从数据库获取用户权限范围的url,将url的集合存储在session中。

mapper接口:根据用户id查询用户权限的url

service接口:根据用户id查询用户权限的url

2.4 用户认证通过取出菜单和url放入session

修改service认证代码:

2.5 菜单动态显示

修改first.jsp,动态从session中取出菜单显示:

2.6 授权拦截器

//在执行handler之前来执行的

//用于用户认证校验、用户权限校验

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

//得到请求的url

String url = request.getRequestURI();

//判断是否是公开 地址

//实际开发中需要公开 地址配置在配置文件中

//从配置中取逆名访问url

List<String> open_urls = ResourcesUtil.gekeyList("anonymousURL");

//遍历公开 地址,如果是公开 地址则放行

for(String open_url:open_urls){

if(url.indexOf(open_url)>=0){

//如果是公开 地址则放行

return true;

}

}

//从配置文件中获取公共访问地址

List<String> common_urls = ResourcesUtil.gekeyList("commonURL");

//遍历公用 地址,如果是公用 地址则放行

for(String common_url:common_urls){

if(url.indexOf(common_url)>=0){

//如果是公开 地址则放行

return true;

}

}

//获取session

HttpSession session = request.getSession();

ActiveUser activeUser = (ActiveUser) session.getAttribute("activeUser");

//从session中取权限范围的url

List<SysPermission> permissions = activeUser.getPermissions();

for(SysPermission sysPermission:permissions){

//权限的url

String permission_url = sysPermission.getUrl();

if(url.indexOf(permission_url)>=0){

//如果是权限的url 地址则放行

return true;

}

}

//执行到这里拦截,跳转到无权访问的提示页面

request.getRequestDispatcher("/WEB-INF/jsp/refuse.jsp").forward(request, response);

//如果返回false表示拦截不继续执行handler,如果返回true表示放行

return false;

}

2.7 配置授权拦截器

注意:将授权拦截器配置在用户认证拦截的下边。

2.8 小结

使用基于url拦截的权限管理方式,实现起来比较简单,不依赖框架,使用web提供filter就可以实现。

问题:

需要将所有的url全部配置起来,有些繁琐,不易维护,url(资源)和权限表示方式不规范。

基于url的权限管理的更多相关文章

  1. shiro-5基于url的权限管理

    1.1 搭建环境 1.1.1 数据库 mysql5.1数据库中创建表:用户表.角色表.权限表(实质上是权限和资源的结合 ).用户角色表.角色权限表. 完成权限管理的数据模型创建. 1.1.2 开发环境 ...

  2. 基于URL的权限管理(三)

    思路:先创建一个专门的类ActiveUser用于存储用户登录的信息,主要用于存储用户id,账户,名称,菜单,权限. 认证拦截器主要是查看用户是否已登陆,如果没有转发到登陆界面,用户用账户跟密码登录时候 ...

  3. 【shiro】(5)---基于Shiro的权限管理

    基于Shiro的权限管理项目搭建 前面写了四篇有关权限的文章,算是这篇文章的铺垫了.这篇文章采用 开发环境           JDK1.8          Eclipse          Mav ...

  4. 【shiro】(2)---基于RUL的权限管理

    基于RUL的权限管理 我想在写shiro权限管理认证前,先来一个基于URL实现的权限管理控制. 一.基于URI的权限业务逻辑  实现思路:       将系统操作的每个url配置在权限表中,将权限对应 ...

  5. 基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

    距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里 ...

  6. 在ASP.NET MVC中实现基于URL的权限控制

    本示例演示了在ASP.NET MVC中进行基于URL的权限控制,由于是基于URL进行控制的,所以只能精确到页.这种权限控制的优点是可以在已有的项目上改动极少的代码来增加权限控制功能,和项目本身的耦合度 ...

  7. 10.spring-boot基于角色的权限管理页面实现

    10.spring-boot基于角色的权限管理页面实现

  8. 基于云端的通用权限管理系统,SAAS服务,基于SAAS的权限管理,基于SAAS的单点登录SSO,企业单点登录,企业系统监控,企业授权认证中心

    基于云端的通用权限管理系统 SAAS服务 基于SAAS的权限管理 基于SAAS的单点登录SSO 基于.Net的SSO,单点登录系统,提供SAAS服务 基于Extjs 4.2 的企业信息管理系统 基于E ...

  9. devops-jenkins基于角色的权限管理RBAC

    一. devops-jenkins基于角色的权限管理RBAC 1 安装角色的rbac角色管理  1.1) 点击系统管理 1.2) 选择插件管理 1.3) 选择可选插件,输入role搜索 1.4) 选择 ...

随机推荐

  1. (转载)delphi 把图片存入数据库

    delphi 把图片存入数据库 procedure TForm1.Button1Click(Sender: TObject); // 插入图片过程var Stream:TMemoryStream;be ...

  2. 【python】分片copy和等号的区别

    例一 >>> list1=[1,2,3,4]>>> list2=list1>>> list3=list1[:]>>> list1 ...

  3. PHP下拉框选择的实现方法

    实现 第一种PHP下拉框实现方法: < ?php //提交下拉框; //直接饱触发onchange事件的结果 $id=$_GET['myselect']; // myselect 为locati ...

  4. linux下进度条的简单实现

    在实现进度条之前,先学习一下makefile. 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中, makefile 定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编 ...

  5. OC与JS交互前言-b

    一.WebView加载HTML UIWebView提供了三个方法来加载html资源 1. loadHTMLString:baseURL: 把html文件的内容以字符串的形式加载到webView里面,然 ...

  6. log的6种等级

    在Java中,log有6种等级,从低到高为: (1)TRACE:用于展现程序执行的轨迹 (2)DEBUG:用于协助低层次的调试 (3)INFO:用于基本高层次的诊断信息,在长时间运行的代码段开始运行及 ...

  7. Uva 1354 Mobile Computing

    题目链接 题意: 在一个宽为r 的房间里, 有s个砝码, 每个天平的一端要么挂砝码, 要么挂另一个天平, 并且每个天平要保持平衡. 求使得所有砝码都放在天平上, 且总宽度不超过房间宽度的最大值. 思路 ...

  8. Ajax、Comet、HTML 5 Web Sockets技术比较分析

    最近因为考虑研究B/S结构网站即时消息处理 参考了 JAVA怎么样实现即时消息提醒http://bbs.csdn.net/topics/330015611http://www.ibm.com/deve ...

  9. JVM 学习笔记

    1.   JAVA类分为三类: 1.1   系统类  (用系统类加载器加载bootstrap ClassLoader) 1.2   扩展类  (用扩展类加载器加载Ext ClassLoader) 1. ...

  10. Uva 1050 Ars Longa

    Description You have been struck with inspiration, and are designing a beautiful new art sculpture f ...