Java安全——类加载器

这篇具有很好参考价值的文章主要介绍了Java安全——类加载器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java安全

Java类装载器

Java类加载器提供了以下机制:

  1. 加载类:类加载器通过查找和定位类的字节码,将类加载到Java虚拟机中。
  2. 连接类:连接类包括验证、准备和解析三个阶段。验证阶段是验证字节码是否符合Java虚拟机规范;准备阶段是为类的静态变量分配内存并设置默认初始值;解析阶段是将符号引用转换为直接引用。
  3. 初始化类:当类被加载到Java虚拟机中后,需要执行类的静态代码块,并初始化类的静态变量。
  4. 对象实例化:类加载器还可以实例化对象,并为对象分配内存空间。
  5. 类的卸载:当类不再被使用时,类加载器可以将其卸载,释放内存空间,从而提高Java虚拟机的性能。

总的来说,Java类加载器提供了将类加载到Java虚拟机中的功能,通过连接、初始化和卸载等阶段,实现了Java程序的动态加载和卸载机制。

类加载器主要说明
  • 提供将类字节码文件读入java虚拟机并转换为类定义形式
  • 类加载器可以结合虚拟机的定义名称空间,以此保护java语言本身安全特性的完整性
  • 类加载器在必要的时候调用安全管理器,从而保证代码在定义和访问类时有适当的权限
  • 类加载器建立了权限与类对象(每个类的保护域)之间的映射,这样存取管理器就知道哪些类拥有哪些权限
虚拟机定义的名称空间

Java虚拟机定义了三个名称空间来管理类的加载:引导类加载器、扩展类加载器和应用程序类加载器。每个加载器都有自己的类加载器名称空间,用于隔离加载的类和其它资源。

类加载器实现了双亲委派机制,即当一个类需要被加载时,它首先会委托它的父类加载器寻找该类,如果父类加载器无法找到该类,它会再委托它自己的子类加载器寻找该类,以此类推。这种机制可以避免同一个类被重复加载,从而保证类的唯一性和一致性。

在这种机制下,类加载器和虚拟机的名称空间可以相互结合,保证了类的唯一性和一致性,同时还能够隔离不同类加载器加载的类和其它资源。例如,应用程序类加载器只能加载应用程序的类,而不能加载引导类或扩展类中的类,这保证了应用程序的安全性和稳定性。

类加载器调用安全管理器

类加载器在加载应用程序时,可能需要涉及到一些安全性检查,例如检查访问权限、文件权限、代码签名等。为了保证应用程序的安全性,Java虚拟机提供了安全管理器(Security Manager)来进行安全性检查,类加载器在必要的时候会调用安全管理器进行检查。

安全管理器是一个Java类,它实现了Java安全性模型中的安全策略,控制访问权限、文件权限、网络权限等。当类加载器需要进行安全性检查时,它会调用安全管理器的相应方法来获取访问权限、文件权限、网络权限等信息。

例如,当类加载器需要读取本地文件时,它会调用安全管理器的checkRead()方法来检查是否有读取文件的权限。如果安全管理器不允许读取该文件,类加载器将抛出SecurityException异常。类加载器还可以调用安全管理器的其他方法,如checkPermission()checkConnect()等,来获取访问权限、网络权限等信息。

类加载器建立权限和类之间的关系映射

类加载器在加载类的过程中,会根据类的名字和其他一些信息(例如包名)计算出一个唯一的标识符,并且将这个标识符和对应的类对象(包括类的保护域)保存到内存中。当应用程序需要访问某个类的成员(例如静态方法、静态变量等)时,存取管理器会检查当前线程的访问权限,并使用类加载器保存的映射关系确定该类的访问权限。

例如,假设应用程序需要访问com.example.MyClass类的静态变量myField,类加载器会先计算出com.example.MyClass类的唯一标识符,并根据标识符找到对应的类对象和保护域。然后,存取管理器会检查当前线程是否有访问该类和该变量的权限,如果有,就允许访问;如果没有,就抛出SecurityException异常。

因此,类加载器建立了权限与类对象之间的映射,并将这些映射关系保存在内存中,这样存取管理器就可以根据这些映射关系来判断哪些类拥有哪些权限。这种机制可以在Java虚拟机中实现安全性管理,保证应用程序不会访问不应有的资源或执行不应有的操作。

类加载器中的类和方法执行说明

类装载器是 Java 应用程序运行时的一个重要组成部分,主要作用是将类文件加载到 Java 虚拟机中并生成 Java 类型对象。在 Java 中,类装载器主要分为三种:Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader。

  1. Bootstrap ClassLoader Bootstrap ClassLoader(引导类加载器)是 JVM 内置的类加载器,用来加载 Java 核心类库和扩展 API 等核心功能。它是 Java 类型系统中最为基础的一层,是 JVM 的一部分。Bootstrap ClassLoader 无法通过 Java 编写,因为它不是普通的 Java 类,而是用 C++ 语言编写的。Bootstrap ClassLoader 加载的类文件是 Java 核心类库和扩展 API。
  2. Extension ClassLoader Extension ClassLoader(扩展类加载器)是 Bootstrap ClassLoader 的子类,负责加载 Java 应用程序扩展的 API。它的加载路径是 Java 的安装目录下的 jre/lib/ext 目录。如果在 Java 启动时加入 -Djava.ext.dirs 参数,可以让 Extension ClassLoader 加载指定的扩展路径中的类文件。
  3. System ClassLoader System ClassLoader(系统类加载器)也称为应用程序类加载器,负责加载应用程序的类文件。它会优先加载 ClassPath 中的类,如果没有找到再去加载扩展类和引导类的类文件。System ClassLoader 可以通过 ClassLoader.getSystemClassLoader() 方法获取。

类装载器和安全管理的执行步骤如下:文章来源地址https://www.toymoban.com/news/detail-514127.html

  1. 首先,类加载器获取要加载的类的二进制文件字节码。
  2. 接着,类加载器将这些字节码转换成 JVM 中的一个 class 对象。
  3. 类加载器会检查这个类是否已经被加载,如果没有被加载,则会进行类加载的操作。
  4. 在类加载的过程中,安全管理器会对该操作进行检查,确保该类可以被加载,并且该类的加载不会带来安全问题。
  5. 如果检查通过,类加载器会将字节码文件加载到内存中,并生成 Java 类型对象。
  6. 链接该类文件,包括验证、准备、解析等步骤。
  7. 类加载器返回这个类的 class 对象,供程序使用。
  8. 在程序执行过程中,如果要调用该类的某个方法,安全管理器也会对该调用进行检查,确保该操作是安全的。如果检查通过,则方法被执行,否则操作将会被拒绝。

到了这里,关于Java安全——类加载器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java类加载机制详解

    类加载器 加载类 备注 启动类加载器(Bootstrap ClassLoader) JAVA_HOME/jre/lib 无上级,无法直接访问 由jvm加载 拓展类加载器(Extension ClassLoader) JAVA_HOME/jre/lib/ext 父加载器为 Bootstrap,显示为 null 。该类由Bootstrap加载 应用类加载器(Application ClassLoader) classpath 父加载器上级为 Exten

    2024年02月08日
    浏览(24)
  • JVM:Java类加载机制

            加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的,类型的加载过程必须按照这种顺序按部就班地开始,而解析阶段则不一定:它在某些情况下可以在初始化阶段之后再开始, 这是为了支持Java语言的运行时绑定特性(也称为动态绑定或晚期绑定)。

    2024年01月21日
    浏览(29)
  • 【Java】深入了解双亲委派机制(常说的类加载机制)

    ava虚拟机(JVM)的类加载机制是Java应用中不可或缺的一部分。本文将详细介绍JVM的双亲委派机制,并阐述各关键点。 双亲委派机制(Parent-Delegate Model)是Java类加载器中采用的一种类加载策略。该机制的核心思想是:如果一个类加载器收到了类加载请求,默认先将该请求委托

    2024年02月04日
    浏览(27)
  • java以及android类加载机制

    java中,每一个类或者接口,在编译后,都会生成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验,解析和初始化。最终,每一个类都会在方法去保存一份元数据,在堆中创建一个与之对应的Class对象。 类的生命周期,经历7个

    2024年02月20日
    浏览(24)
  • 【Jvm】Java类加载机制是什么?

    什么是类的加载? 类的生命周期? 类加载器是什么? 双亲委派机制是什么? JVM将class文件字节码文件加载到内存中, 并将这些静态数据转换成方法区中的运行时数据结构,在堆(并不一定在堆中,HotSpot在方法区中)中生成一个代表这个类的java.lang.Class 对象,作为方法区类数

    2024年02月11日
    浏览(32)
  • JVM 虚拟机 ----> Java 类加载机制

    一、概述 类是在运行期间第一次使用时,被类加载器动态加载至 JVM 。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存 二、类的生命周期 类的生命周期包含以下 七 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化

    2024年02月07日
    浏览(32)
  • 解决Tomcat异常:java.lang.IllegalStateException: 非法访问:此Web应用程序实例已停止。无法加载。为了调试以及终止导致非法访问的线程,将抛出以下堆栈跟踪。

    调试项目的时候发现每次使用idea重新部署项目时会出现这个错误,但是不影响实际使用,重启服务器第一次部署时也不会出现错误,尝试搜索解决这个问题。 解决方法: 进入tomcat目录下查找配置文件,conf Context.xml,查找Context标签,修改属性reloadble为 reloadable=“false” (如果

    2024年02月04日
    浏览(43)
  • 【JAVA基础】JVM之类加载--双亲委派机制

    1. 类加载的过程 描述: 我们写的 .java 文件通过编译成字节码文件 .class 文件,然后再通过我们的类加载器:Class Loader,反射以后,类模板存在方法区,把实例化的对象存在堆里; 看图: 对象的hashcode值 解释: 从图中我们可以看出,从同一个类模板new出来三个对象(实例化

    2024年01月23日
    浏览(37)
  • 解析Java类加载的运行机制和双亲委派模型

    类加载形如把.class文件,加载到内存中,得到类对象这样的过程 类加载一共分为五个步骤: 加载 验证 准备 解析 初始化 加载 类加载的第一步是将编译好的 Java 类的字节码文件加载到 Java 虚拟机(JVM)中。类加载器会根据类的名称找到对应的字节码文件,并将其读取到内存

    2024年02月15日
    浏览(29)
  • Java安全——安全提供者

    安全提供者 在Java中,安全提供者(Security Provider)是一种实现了特定安全服务的软件模块。它提供了一系列的加密、解密、签名、验证和随机数生成等安全功能。安全提供者基础设施在Java中的作用是为开发人员提供一种扩展和替换标准安全功能的方式,以满足特定的安全需

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包