权限控制在很多系统中都会用到,其实实现权限控制方法有很多,这里给大家介绍一下通过代理模式实现权限控制。Spring中的AOP、Apache的shiro开源项目,其实都是基于此的。

1、实体类Person.java

public class Person {private String name;private String password;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

2、业务逻辑层接口及实现类
这里的业务逻辑层接口就是代理模式中的抽象对象角色,它的实现类就是真实对象。

import java.util.List;
import java.util.Map;public interface IPersonService {Integer savePerson(Person person);void updatePerson(Person person);List<Person> findPersonList(Map<String,Object> param);
}
import java.util.List;
import java.util.Map;public class PersonServiceImpl implements IPersonService{@Overridepublic Integer savePerson(Person person) {return null;}@Overridepublic void updatePerson(Person person) {}@Overridepublic List<Person> findPersonList(Map<String, Object> param) {return null;}
}

3、创建代理类的工厂

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class ServiceProxyFactory implements InvocationHandler {private  Object service = null;//真实对象public ServiceProxyFactory(){}public Object createServiceProxy(Object obj){this.service = obj;return Proxy.newProxyInstance(this.service.getClass().getClassLoader(), this.service.getClass().getInterfaces(), this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {PersonServiceImpl personService = (PersonServiceImpl)service;if(......){//判断当前登录的用户有没有权限return method.invoke(service, args);}return null;}
}

4、使用代理类

public class TestProxy{public static void main(String[] args){IPersonService service = new PersonServiceImpl();//真实对象ServiceProxyFactory proxyFactory = new ServiceProxyFactory();IPersonService  proxyService = proxyFactory.createServiceProxy(service);//代理对象proxyService.savePerson();//使用代理对象保存Person,当代理对象执行savePerson()方法时,会调用proxyFactory的invoke()方法,因为在创建代理对象时,Proxy.newProxyInstance()方法的第三个参数中传入了一个ServiceProxyFactory的实例。在invoke方法内部就可以进行权限控制,查看当前用户有没有权限进行savePerson()操作。}
}

通过代理实现权限控制相关推荐

  1. 独立使用zuul网关分发不同服务的请求、权限控制,非SpringCloud

    版权声明:本文为博主武伟峰原创文章,转载请注明地址http://blog.csdn.net/tianyaleixiaowu. 网关api Gateway的重要性不言而喻,网关负责统一接收所有请求,然后 ...

  2. 权限控制案例(细粒度)

    权限控制案例 利用注解和动态代理来完成权限控制的功能 案例实现分析    * 创建数据库表    * 对应数据库表,创建JavaBean    * 导入必要的Jar包    * 完成用户登录逻辑.功能 ...

  3. 代理对象之spring注解事务控制或shiro注解权限控制的理解

    通过注解 代理的可以是service或者action等,当他们被调用时由代理对象生效,由框架控制 shiro Action方法注解权限控制 底层基于代理技术实现,为Action创建代理对象,由代理对象 ...

  4. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  5. 权限控制框架Shiro简单介绍及配置实例

    Shiro是什么 Apache Shiro是一个非常易用的Java安全框架它能提供验证.授权.加密和Session控制.Shiro非常轻量级而且API也非常易于理解可以使用Shiro完成从APP到企业 ...

  6. Apache Shiro的运行流程和权限控制方式分析

    Apache Shiro的运行流程和权限控制方式分析 Shiro的架构有3个主要的概念: Subject SecurityManager Realms 下面的关系图是关于这些组件是如何交互的高级概述. ...

  7. Apache Shiro权限控制框架简介

    Apache Shiro权限控制框架简介 要想实现权限控制,可以自己写代码实现,蓄力都的权限控制可以通过过滤器Filter实现,细粒度的权限控制是基于代理对象结合自定义的注解和反射技术来实现,反射技术 ...

  8. 权限控制的两种主要方式详述

    权限控制的两种主要方式详述 粗粒度URL级别的权限控制 权限控制主要分为粗粒度URL级别的权限控制和细粒度的方法级别权限控制. 我们在后台系统的操作,无论 是点击一个按钮,还是点击一个菜单项,都是在访 ...

  9. 前端真的能做到彻底权限控制吗?

    有一天突然想到一个问题,web端的权限控制: 1.真的能控制权限吗? 2.仅仅靠前端,能不能做到真正的权限控制? 3.如果需要后台配合,应该如何配合? 可能这是一个老生常谈的问题,但还是想整理下,有误 ...

  10. 用Python建设企业认证和权限控制平台

    目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...

最新文章

  1. 【iOS】通过NSURLProtocol提高Web加载速度
  2. 腾讯云区块链,打造基础设施之上的生态系统
  3. Android10.0 Binder通信原理(六)-Binder数据如何完成定向打击
  4. 【颜值检测神器】来,请拿出你们的绝活(这颜值,对得起观众么?)
  5. 分布式事务原理及实战seata(转自微信公众号 终码一生 )
  6. arm oe linux gnueabi 系统,【技术分享】Quectel 4G模块Opencpu中实现高通wifi功能
  7. “项目运行时出错,无法启动调试。绑定句柄无效”的解决办法
  8. Android广播机制(2)
  9. 苏大计算机考研专业课,苏州大学计算机考研初试经验分享
  10. 计算机无法识别1136打印机,惠普HP M1136打印机驱动安装失败的多种解决办法
  11. 驱动精灵在服务器的系统安装,驱动精灵怎么安装打印机驱动?打印机驱动安装的方法...
  12. 思科模拟器交换机配置secret和password
  13. unity3d场景制作
  14. java语法 chm_使用java代码打开chm格式的帮助文档
  15. 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结
  16. Lua:小数精度计算,几位数判断,四舍五入,最靠近5倍数取整
  17. LCD设备驱动(一)
  18. nodejs 判断是文件夹还是文件
  19. ENVI/SARscape软件处理问题小结
  20. python oledb dbf_在Python中打开和搜索dBase III(DBF)数据库

热门文章

  1. qpython3下载不了_qpython3手机版
  2. 能气死古人的诗歌改编
  3. OIF 4.0协议分析心得-1
  4. Git常见问题:fatal: Unable to create index.lock File exists 错误的解决办法
  5. 2015-2018节假日表
  6. u盘大计算机视频,处理视频太大在无法从电脑复制到U盘的操作方法
  7. badboy的脚本录制教程
  8. 学会如何带领一个团队
  9. Fully-hierarchical fine-grained prosody modeling for interpretable speech synthesis
  10. Golang获取时间戳并增加一天