码迷,mamicode.com
首页 > 编程语言 > 详细

Java安全系列 - 突破私有构造限制

时间:2015-03-13 18:09:51      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

我们知道当一个类的构造方法被设为私有时,这就意味着我们不能通过new关键字来直接创建这个对象,这时我们可以通过sun.misc.Unsafe来实现我们创建对象的目的,这个类是Java基于底层操作的API,可以直接进行底层操作,例如获得某个属性的偏移地址,甚至可以直接将class文件字节码载入到内存,直接突破Java虚拟机沙箱限制。

1.创建User.java,内容如下:

public class User{   

    private User(){

        System.out.println("constructor User..");

    }   

}

 

2.创建UnsafeTest

import java.lang.reflect.Field;

import sun.misc.Unsafe;

 

public class UnsafeTest {

 

    public static void main(String[] args) {

        try{

            //使用UnSafe构造实例

            Field field = Unsafe.class.getDeclaredField("theUnsafe");

            field.setAccessible(true);

            Unsafe unsafe = (Unsafe) field.get(null);

            User user=(User)unsafe.allocateInstance(User.class);

            System.out.println(user);

           

        }catch(Exception e){

            e.printStackTrace();  

        }

    }  

}

 

 

输出:

User@61de33

  

 

Java安全系列 - 突破私有构造限制

标签:

原文地址:http://www.cnblogs.com/gdds/p/4335423.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!