Java安全静态代理

admin 2021年12月24日06:30:25评论78 views字数 1690阅读5分38秒阅读模式


     在Java代码审计中静态代理是必须要掌握的,

什么是Java静态代理?

代理这个词是来源于Java设计模式中的代理模式,代理模式最简单的理解就是通过第三方来代理我们的工作

场景模拟:

在一个项目中连接数据库操作是不可避免的,不可能每个开发人员在连接数据库时都要重新写一边连接代码,此时需要一个接口(Mappr1)。连接,关闭数据库功能的代码封装放到实现了接口的代理类里面(StaticProxy), 

每个需要用到连接,关闭数据库功能的对象(Usermappr, Adminmappr)只需要实现这个接口即可。当某个对象(Usermappr, Adminmappr)实现了接口,不需要在反复写连接数据库部分,只需要在重写接口方法时写具体业务操作代码即可,然后把某个对象(Usermappr,Adminmappr)传递给代理类(StaticProxy) 即可,这样就实现传入什么对象执行相应的操作.


代码PART


首先是父接口Mappr1.class


package statics;public interface Mappr1 {public void jdbc0();}


目标对象 AdminMappr.class

package statics;public class AdminMappr implements Mappr1{ public void jdbc0(){      System.out.println("--secbang--admin--执行核心业务代码----");     }}

目标对象 UserMappr.class

package statics;public class UserMappr implements Mappr1 {    public void jdbc0(){      System.out.println("--user--执行核心业务代码----");    }}

代理类 StaticProxy.class

public class StaticProxy implements Mappr1{  private Mappr1 um; //创建接口对象  /*   * 有参构造器   */   public StaticProxy(Mappr1 um) {    this.um = um;   }
public void jdbc0() { System.out.println("---获取链接----"); um.jdbc0(); System.out.println("---关闭链接----");  }}

然后我们进行测试

package statics;public class Test {public static void main(String[] args) {// 创建目标对象UserMappr mp =new UserMappr();        AdminMappr ap =new AdminMappr();//创建代理StaticProxy sp =new StaticProxy(ap);sp.jdbc0();}}

输出结果 

Java安全--静态代理


总结

1.实现了Mappr1接口的类都可以看作为Mappr1对象

2.核心在StaticProxy代理类,传入什么对象执行相应的操作。


执行过程

1.Main方法执行

2.UserMappr mp =new UserMappr(); (创建Usermappr对象)///  

3.创建StaticProxy(传递实现了接口的Usermaoor对象mp 这个对象可以是任何实现了Mappr1接口的类对象)

4.这样利用 StaticProxy即可实现更为灵活的调用不同类的对象。


     有人可能会有疑惑,这样做有点多此一举,为啥还要去代理呢, 这就涉及到工作需求,在不改变实现类的情况下,对实现类进行功能的增加,由此而产生了代理类,生成代理对象

    静态就是在创建代理类的时候,接口和被代理类都已经被固定了,无法改变,代理类就只能这一种类,我们主要的是实现代理功能,实际上已经完成了这个功能,

      实际开发中有很多功能增强时,就需要更多的代理类,即每一个主题接口都得创建一个代理类,会造成代码的繁多和冗余,因此就产生了我们的动态代理技术.


本文始发于微信公众号(安全帮Live):Java安全--静态代理

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月24日06:30:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java安全静态代理http://cn-sec.com/archives/462310.html

发表评论

匿名网友 填写信息