基于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. Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays

    Professor GukiZ and Two Arrays 题意:两个长度在2000的-1e9~1e9的两个序列a,b(无序);要你最多两次交换元素,使得交换元素后两序列和的差值的绝对值最小:输出这 ...

  2. xcode 必用插件二

    本文大致整理了自己用过的一些插件的使用感想(就是好不好用). 在那之前先简单贴两条插件须知,知道的可以忽略. 1.Alcatraz 类似于管理第三方库的cocoapods,管理插件也有个Alcatra ...

  3. iOS9 升级设置

    今天升级了iOS9, Xcode7.1 ; 打开之前的工程发现网络请求出错了, 参照UM开发文档, 对info.plist进行了配置如下: 1. 以iOS9 SDK编译的工程会默认以SSL安全协议进行 ...

  4. Mvc基础(1)

  5. JAVA 时间差距,两个时间相差多少天,时,分,秒

    JAVA 时间差距,两个时间相差多少天,时,分,秒 package io; import java.text.DateFormat; import java.text.ParseException; ...

  6. 时序图(Sequence Diagram)

    控制焦点Focus on Control 的取值: Alternative fragment(denoted “alt”) 与 if…then…else对应 Option fragment (deno ...

  7. The Promise of Deep Learning

    The Promise of Deep Learning By Yoshua Bengio Humans have long dreamed of creating machines that thi ...

  8. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  9. hdu 4433

    一道dp题,虽然知道是dp,但是不会做: 学习了ACM_cxlove大神的代码,终于明白了: 搬运工: dp[i][j][k]表示 前i个已经完全匹配,而这时候,第i+1个已经加了j位,第i+2位已经 ...

  10. Altium Designer10 如何导出Gerber文件

    版本:AD10.818 目的:Gerber文件导出备忘 http://blog.sina.com.cn/s/blog_9b9a51990100zyyv.html 目录: Step1:设置原点 Step ...