设为首页 加入收藏

TOP

实例分析JVM安全体系:双亲委派、命名空间、保护域、策略(七)
2017-09-30 16:34:44 】 浏览:3992
Tags:实例分析 JVM 安全 体系 双亲 委派 命名 空间 保护 策略
ClassLoader) this.getClass().getClassLoader();         System.out.println("secret is:" + cl.secret);     } }

MyClassLoader 由AppClassLoader所加载,而Virus由用户自定义的加载器attacker所加载,虽然AppClassLoader是attacker 的父加载器,即MyClassLoader对Virus可见,但由于两者不是由同一个加载器所加载,即不属于同一个运行时包,那么Virus对 MyClassLoader的受保护成员访问受限

public class MyClassLoader extends ClassLoader {
    protected int secret = -1;
//...
    public static void main(String[] args) throws Exception {
            //其父加载器为Bootstrap ClassLoader
            MyClassLoader loader = new MyClassLoader(null, "loader");
            loader.setPath(HOME + "usr\\");

            MyClassLoader attacker = new MyClassLoader("attacker");
            attacker.setPath(HOME + "attacker\\");

            System.out.println("MyClassLoader's classloader:" + MyClassLoader.class.getClassLoader());

            System.out.println("-------------test parent--------------");
            //测试父加载器关系
            traverseParent(attacker);

            System.out.println("-------------test in-package access--------------");
            testVirus(attacker);

        }

        public static void traverseParent(ClassLoader loader) throws Exception{
            if(loader == null) return;
            System.out.println("travase classloader:" + loader.toString());
            while(loader.getParent() != null){
                System.out.println(loader.getParent());
                loader = loader.getParent();
            }
        }


        public static void testVirus(ClassLoader loader) throws Exception {
            Class<?> clazz = loader.loadClass("com.ice.classloader.Virus");
            Object object = clazz.newInstan
首页 上一页 4 5 6 7 8 9 10 下一页 尾页 7/13/13
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇实例探索Class文件 下一篇源码分析:Java堆的创建

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目