1.业务分析

权限说的是不同的用户对同一个系统有不同访问权限,其设计的本质是:给先给用户分配好URL,然后在访问的时候判断该用户是否有当前访问的URL.

2.实现

2.1数据库设计标准5表权限结构

2.2.sql语句实现,根据用户id查询该用户所有的资源

sql语句:   SELECT ur.user_id, r.url FROM user_role ur LEFT JOIN role_resource rr ON (ur.role_id = rr.role_id) LEFT JOIN resource r ON (rr.resource_id = r.id) WHERE ur.user_id = 1

2.3. 存放资源

在用户登录完成后,根据该用的id,查询出所用资源,并放入缓存中.

登录完成后放入缓存代码:

1                   //密码正确 登录成功
2                      //存放资源信息
3                           //放memcache  key= 业务前缀_userId   value  list
4                  String key="resource_"+loginUserByName.getId();//准备key
5                  //调用 到查询 到
6                  List<String> resource = resourceDao.getResource(loginUserByName.getId()); //根据用户id获取该用户的所用资源
7                  DicMemcache.putResource(key,resource); //存放到memcache缓存中

用到的resourceDao代码:

接口: List<String> getResource(Integer id);

mapper映射文件

 1 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"2         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">3 <!--4 对应的接口地址: namespace="com.day02.sation.dao.ITicketDao"5 -->6 <mapper namespace="com.day02.sation.dao.IResourceDao">7 8     <select id="getResource" parameterType="int" resultType="String">9 SELECT  r.url FROM user_role ur LEFT JOIN role_resource rr ON (ur.role_id = rr.role_id)
10 LEFT JOIN resource r ON (rr.resource_id = r.id) WHERE ur.user_id = #{id}
11    </select>
12 </mapper>

用到的DicMemcache存放方法与后面要用的获取用户资源方法

 1  /**2      * 存放用户资源3      * @param key4      * @param value5      */6     public static void putResource(String key,Object value) {7         memcachedAccess.put(key,value);8     }9
10     /**
11      * 获取用户资源
12      * @param key
13      */
14     public static List<String> getResource(String key) {
15         List<String> obj =(List<String>) memcachedAccess.getObj(key);
16         return obj;
17
18     }

2.4使用aop实现权限判定

权限判定管理类:

 1 package com.day02.sation.aop;2 3 import com.day02.sation.map.DicMemcache;4 import com.day02.sation.model.LoginUser;5 import org.slf4j.Logger;6 import org.slf4j.LoggerFactory;7 import org.springframework.web.context.request.RequestContextHolder;8 import org.springframework.web.context.request.ServletRequestAttributes;9
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12 import javax.servlet.http.HttpSession;
13 import java.io.IOException;
14 import java.util.List;
15
16 /**
17  * Created by Administrator on 1/9.
18  */
19 public class resourceAop {
20     private static final Logger logger = LoggerFactory.getLogger(resourceAop.class);
21
22     /**
23      * 方法执行前输出
24      */
25     public void beforeResource() throws IOException {
26         logger.info("-----------beforeResource----------------");
27         ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
28         //获取请求对象
29         HttpServletRequest request = requestAttributes.getRequest();
30         //获取响应对象
31         HttpServletResponse response = requestAttributes.getResponse();
32         //查看是否已经登录   做权限必须是在登录的情况下
33         HttpSession session = request.getSession();
34         LoginUser loginUser = (LoginUser) session.getAttribute("LOGIN_IN_SESSION");
35         if (loginUser != null) {//说明已经登录
36             //权限判定
37             //1.获取 当前访问的资源
38             String requestURI = request.getRequestURI();
39             System.out.println("requestURI=" + requestURI);
40             //2.获取用户拥有的资源   缓存中取
41             String key = "resource_" + loginUser.getId();//拼接权限资源key
42             List<String> resource = DicMemcache.getResource(key);//根据key获取对应的资源列表
43             //3.比较是否有该资源
44             boolean isResource = false;//给定默认的值为没有改权限
45             for (int i = 0; i < resource.size(); i++) {
46                 String valueResource = resource.get(i);
47                 if (requestURI.equals(valueResource)) {
48                     //拥有在资源的权限
49                     isResource = true;
50                     logger.info("有该权限:=" + valueResource);
51                     break;
52                 }
53             }
54             //没有该资源权限
55             if (!isResource) {
56                 response.sendRedirect("/noResource.jsp");
57             }
58         } else {
59             //用户没用登录不做权限判定
60         }
61     }
62 }

aop配置文件

 1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"4        xsi:schemaLocation="http://www.springframework.org/schema/beans5         http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop6          http://www.springframework.org/schema/aop/spring-aop.xsd">7     <!--引入日志管理类-->8     <bean id="webAspectLog" class="com.day02.sation.aop.WebAspectLog"/>9     <!--引入权限管理类-->
10     <bean id="resourceAop" class="com.day02.sation.aop.resourceAop"/>
11     <!--配置切面-->
12     <aop:config>
13         <!--日志aop-->
14         <aop:aspect ref="webAspectLog">
15             <aop:pointcut id="pointcut" expression="execution(* com.day02.sation.controller.*Controller.*(..))"/>
16             <aop:before method="beforeLog" pointcut-ref="pointcut"/>
17            <!-- 注意如果要获取执行后的结果 必须配置参数 returning="对象为afterLog方法的参数对象名称"-->
18             <aop:after-returning method="afterLog" pointcut-ref="pointcut" returning="returnObj"/>
19         </aop:aspect>
20         <!--权限aop-->
21         <aop:aspect ref="resourceAop">
22             <aop:pointcut id="pointcut" expression="execution(* com.day02.sation.controller.*Controller.*(..))"/>
23             <aop:before method="beforeResource" pointcut-ref="pointcut"/>
24         </aop:aspect>
25     </aop:config>
26 </beans>

转载于:https://www.cnblogs.com/dw3306/p/9360372.html

业务分析之--权限管理相关推荐

  1. 软件需求管理用例方法 pdf_演讲|软件造价联盟罗翔:业务分析与需求管理实践...

    2019年10月24日,由中国电子技术标准化研究院.中国计算机用户协会指导,北京软件造价评估技术创新联盟.中国计算机用户协会软件造价分会共同主办的2019(第四届)中国软件估算大会在北京丽亭华苑酒店成 ...

  2. 业务中台--系统权限管理简介

    权限系统是每位后台产品产品经理绕不过去的问题,好的权限系统可以明确公司内不同人员.不同部门的分工,降低操作风险发生概率,便于管理等优势.笔者曾负责过若干种后台系统的搭建,其中都绕不开"权限管 ...

  3. 一些常用的场景进行描述分析(权限管理、6个典型场景)

    A: 软件不需要配置权限什么的,一个操作员进来了什么都可以做,用户管理也很简单,几乎没什么需要. 对策:       A.1 登录程序不用开发了.       A.2 修改密码不用开发了.       ...

  4. java 二进制 归属权限_【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】...

    一.权限计算相关分析 1.如何存储权限 首先说一下权限保存的问题,一个系统中最多有多少权限呢?一个大的系统中可能有成百上千个权限需要管理.怎么保存这么多的权限?首先,我们使用一个数字中的一位保存一种权 ...

  5. J2EE-RBAC权限管理

    来源:http://blog.chinaunix.net/u1/52224/showart_415123.html 前不久在http://blog.chinaunix.net/u1/52224/sho ...

  6. 企业级管理软件快速开发平台-完整的权限管理设计

    前几篇博介绍了极致业务基础平台的框架及一些开发效果详细见下面的地址 极致业务基础平台简要介绍: http://www.cnblogs.com/Jeez_JBF/archive/2010/07/29/J ...

  7. Vuex前端saas人力资源中台管理项目第五天 权限管理和图表设计

    权限设计-RBAC的权限设计思想 首先,我们先了解下什么是传统的权限设计 从上面的图中,我们发现,传统的权限设计是对每个人进行单独的权限设置,但这种方式已经不适合目前企业的高效管控权限的发展需求,因为 ...

  8. 【VUE项目实战】32、权限管理-实现角色列表

    接上篇<31.权限管理-实现权限列表> 上个阶段我们完成了权限管理模块,本篇我们来介绍用户.角色和权限三者的关系,并完成角色管理列表模块. 一.权限管理业务分析 通过权限管理模块,控制不同 ...

  9. 数据权限设计思路_后台权限管理设计思路:三种模型分析

    编辑导语:任何系统/产品搭建时,最先考虑的都应该是权限管理模块,而且权限管理模块的清晰.稳定是平台产品健康发展的基石,权限管理核心考虑的问题是用户与权限的关系.本文作者对三种不同权限管理的版本展开了梳 ...

最新文章

  1. 参加web前端开发培训具体要学什么内容
  2. mysql备份slave_MySQL主(Master)从(Slave)备份;
  3. 查服务器的作用有哪些,云服务器优点和功能有哪些,可以看看这些或许你会明白...
  4. 神仙打架激辩深度学习:LeCun出大招,马库斯放狠话,机器学习先驱隔空“互怼”...
  5. img文件解包工具_使用tar归档命令,就不怕文件多!
  6. 赖美云的认证照_真人秀及综艺类双榜单TOP10嘉宾热度认证 赖美云双面魅力引热议...
  7. javaScript事件(一)事件流
  8. 《MySQL DBA修炼之道》——1.4 MySQL权限
  9. 远程桌面保存密码(凭据)的备份导出
  10. 曾365天排队,如今被嫌弃!火了13年的网红鼻祖,要过气了吗?
  11. python爬视频网站数据_python爬虫基础应用----爬取无反爬视频网站
  12. 三个快速便捷的命令行小贴士
  13. Linux 下的终端
  14. Android9.0 setStereoVolume左右声道流程(二十四)
  15. 微服务把多个模块服务 聚合成一个服务
  16. validation 开始日期 结束日期_Spring Boot集成validation用于优雅的校验API参数的合法性...
  17. java工具类(六)根据经纬度计算距离
  18. 41 神经网络-神经元模型及神经网络模型
  19. ERP系统和CRM系统
  20. vm安装win xp镜像遇到的安装问题之一

热门文章

  1. boost::hana::test::TestGroup用法的测试程序
  2. Boost:使用accumulator_set <>和std :: for_each()计算一些有用的统计信息
  3. ITK:打开一个二进制图像
  4. DCMTK:OFStandard中“转换为标记”代码的测试程序
  5. DCMTK:测试文件是否使用DICOM Part 10格式
  6. VTK:IO之GLTFImporter
  7. VTK:几何对象之TextActor
  8. Qt第三方Android库
  9. OpenGL索引呈现
  10. C++获取链表的大小的实现算法(附完整源码)