博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
业务分析之--权限管理
阅读量:6994 次
发布时间:2019-06-27

本文共 4454 字,大约阅读时间需要 14 分钟。

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  list4                  String key="resource_"+loginUserByName.getId();//准备key5                  //调用 到查询 到6                  List
resource = resourceDao.getResource(loginUserByName.getId()); //根据用户id获取该用户的所用资源7 DicMemcache.putResource(key,resource); //存放到memcache缓存中

 

     用到的resourceDao代码:

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

     mapper映射文件

1 
3
6
7 8
12

 

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

1  /** 2      * 存放用户资源 3      * @param key 4      * @param value 5      */ 6     public static void putResource(String key,Object value) { 7         memcachedAccess.put(key,value); 8     } 9 10     /**11      * 获取用户资源12      * @param key13      */14     public static List
getResource(String key) {15 List
obj =(List
) 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();//拼接权限资源key42             List
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 
2
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

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

你可能感兴趣的文章
十、装饰(Decorator)模式 --结构模式(Structural Pattern)
查看>>
WWDC 2013 Session笔记 - UIKit Dynamics入门
查看>>
5月7日——采用第三方页面内容,但是顶部title使用自己的
查看>>
RGBa颜色 css3的Alpha通道支持
查看>>
SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。
查看>>
unity SystemInfo类 获得电量battery
查看>>
[好文要转]【关于block使用的5点注意事项】
查看>>
Windows如何安装自定义服务
查看>>
095、如何创建Swarm集群?(Swarm02)
查看>>
结对开发地铁
查看>>
附加题
查看>>
this kernel requires an x86-64 cpu,but only detected an i686 cpu
查看>>
extjs4学习-02-导入相关文件
查看>>
python generator iterator和iterable object
查看>>
求二维数组中最大子数组的和
查看>>
SaltStack
查看>>
1. 构建您的第一个应用
查看>>
适配器模式(Adapter)
查看>>
FastStone Capture无法录制系统声音解决方法(win10)
查看>>
wamp 软件 rewrite伪静态支持
查看>>