0 Java安全模型组成部分:
a) 类装载器 ---> 可以自定义
b) class文件校验器
c) 安全管理器 ---> 可以自定义
安全管理器作用: 对于外部资源的访问启动控制作用, 默认安全管理器是没有安装
通过代码简单看看安全管理器的作用:
protected ClassLoader(ClassLoader parent) { SecurityManager security = System.getSecurityManager();// 返回安全管理器对象java.lang.Security if (security != null) {//不为空时,安全管理器进行校验 security.checkCreateClassLoader(); } this.parent = parent; initialized = true; } // 进入 校验方法 public void checkCreateClassLoader() { checkPermission(SecurityConstants.CREATE_CLASSLOADER_PERMISSION); } // 进行进入后如下 public void checkPermission(Permission perm) { java.security.AccessController.checkPermission(perm); } // 继续进入如下 public static void checkPermission(Permission perm) throws AccessControlException { //System.err.println("checkPermission "+perm); //Thread.currentThread().dumpStack(); if (perm == null) { throw new NullPointerException("permission can't be null"); } AccessControlContext stack = getStackAccessControlContext(); // if context is null, we had privileged system code on the stack. 如果当前的访问控制器上下文为空,在栈上的系统代码将得到特权 if (stack == null) { Debug debug = AccessControlContext.getDebug(); boolean dumpDebug = false; if (debug != null) { dumpDebug = !Debug.isOn("codebase="); dumpDebug &= !Debug.isOn("permission=") || Debug.isOn("permission=" + perm.getClass().getCanonicalName()); } if (dumpDebug && Debug.isOn("stack")) { Thread.currentThread().dumpStack(); } if (dumpDebug && Debug.isOn("domain")) { debug.println("domain (context is null)"); } if (dumpDebug) { debug.println("access allowed "+perm); } return; } AccessControlContext acc = stack.optimize(); acc.checkPermission(perm); } 进入acc.checkPermission(perm);方法如下: 看注释即可, 大意是遍历上下文中的保护域,一旦发现请求的权限不被允许,停止,抛出异常 /* * iterate through the ProtectionDomains in the context. * Stop at the first one that doesn't allow the * requested permission (throwing an exception). * */ /* if ctxt is null, all we had on the stack were system domains, or the first domain was a Privileged system domain. This is to make the common case for system code very fast */ if (context == null) return; for (int i=0; i< context.length; i++) { if (context[i] != null && !context[i].implies(perm)) { if (dumpDebug) { debug.println("access denied " + perm); } if (Debug.isOn("failure") && debug != null) { // Want to make sure this is always displayed for failure, // but do not want to display again if already displayed // above. if (!dumpDebug) { debug.println("access denied " + perm); } Thread.currentThread().dumpStack(); final ProtectionDomain pd = context[i]; final Debug db = debug; AccessController.doPrivileged (new PrivilegedAction() { public Object run() { db.println("domain that failed "+pd); return null; } }); } throw new AccessControlException("access denied "+perm, perm); } }
通过上述代码一度跟踪流程,可知,安全管理器就是用来控制执行权限的。
默认下是没有开启的,通过如下代码来验证:
public class test2 { /** * @param args */ public static void main(String[] args) { System.out.println(System.getSecurityManager()); } }
结果为null,
重新换个方式运行,在ecplise里右键--Run As--Run Configuration--Arguments,在VM arguments的栏目里输入
-Djava.security.manager。在点击Run,结果为:
java.lang.SecurityManager@de6ced
这个时候默认的安全管理器就被安装上了。
相关推荐
《深入理解JVM》(Inside the JVM) 是一本关于Java虚拟机的重要参考资料,它涵盖了JVM的内部工作原理,包括类加载机制、内存管理、字节码执行等核心概念。"gettingloaded.html" 可能是其中的一个章节,专门探讨了类的...
"深入Java虚拟机"这本书可能涵盖了JVM的更深入细节,如类加载机制的自定义、内存模型、垃圾收集器的原理与调优、JVM参数设置、性能监控工具的使用等。通过学习这些内容,开发者可以更好地理解和优化Java应用的运行...
Java虚拟机(JVM)是Java平台的核心组成部分,它是Java程序的运行环境,负责执行字节码并管理内存、线程和类加载等。JVM使得Java具备了“一次编写,到处运行”的特性。在面试中,对JVM的理解深度往往能体现一个...
除此之外,JVM还涉及线程管理、异常处理、安全管理和性能监控等功能。线程让多个任务并发执行,异常处理提供了一种统一的错误处理机制,而安全管理则保证了Java程序的运行安全。JMX(Java Management Extensions)则...
JVM虚拟机指令集的设计旨在保证Java代码的高效执行,同时确保安全性。通过这些指令,JVM能够解析和执行Java字节码,实现动态编译(JIT编译器)以提高性能,并进行垃圾收集以管理内存。理解JVM指令集对于优化Java代码...
- **jinfo**:提供配置信息,如JVM参数,可以实时修改某些非安全的运行时参数。 - **jmap**:用于生成堆内存映射或dump文件,便于分析内存泄漏。 - **jhat**:分析堆dump文件,查找内存泄漏或对象引用问题。 2. ...
7. **性能监控**:SAP JVM提供了丰富的JMX(Java Management Extensions)和JFR(Java Flight Recorder)功能,帮助管理员监控和分析JVM的性能,如内存使用、线程状态、GC(垃圾收集)行为等。 总之,SAP JVM 8.1 ...
JVM通过自动内存管理系统来管理堆内存。当对象不再被引用时,JVM会自动回收这些对象占用的内存空间,这一过程称为**垃圾回收**。常见的垃圾回收算法包括标记-清除算法、复制算法、标记-整理算法以及分代收集算法等。...
《JVM_多线程高并发_集合框架_数据库 BAT面试金典常见80问.pdf》这份资料聚焦于Java开发人员在面试中可能遇到的重要问题,涵盖了JVM、多线程高并发、集合框架和数据库等多个核心领域。以下是对这些知识点的详细说明...
理解JVM的工作原理,包括类加载机制、内存管理(堆、栈、方法区等)、垃圾收集以及性能优化,是每个Java架构师必备的技能。深入学习JVM调优,如调整堆大小、设置GC参数,能够帮助解决性能瓶颈,提高系统的响应速度和...
在Java世界中,JVM(Java虚拟机)是运行所有Java程序的核心,它负责加载、验证、执行字节码,并管理内存。而JVM代理(JVM Agent)和类加载器(ClassLoader)则是两个关键的概念,它们对于深入理解Java应用程序的运行...
- **自动内存管理**:JVM 提供了自动垃圾回收机制,开发者无需手动管理内存。 - **安全性增强**:例如数组下标越界检查等功能,提高了程序的安全性和稳定性。 ##### 常见的JVM - **HotSpot**:这是目前最常用的 JVM...
1. **操作数栈管理指令**:JVM中的每条指令都可能涉及到操作数栈的操作,如`iconst`系列用于将整数值压入栈,`pop`和`pop2`用于弹出栈顶元素,`dup`用于复制栈顶元素并将其推回栈顶。 2. **局部变量表操作指令**:...
7. **安全性考虑**: 管理会话时需要考虑安全性问题,如防止会话劫持、会话固定攻击和CSRF(跨站请求伪造)。有效的安全实践包括定期刷新会话ID、使用HTTPS、验证请求来源等。 8. **性能优化**: 会话过多会占用大量...
**JVM-SANDBOX:基于JVM的实时无侵入AOP框架容器** JVM-SANDBOX是一个强大的工具,它允许开发者在Java虚拟机...无论是用于提高安全性、优化性能,还是简化复杂系统的维护,JVM-SANDBOX都值得开发者深入了解和使用。
此外,JEP 315(JVM Constants API)为开发者提供了一种更简单的方式访问和操作JVM常量池,简化了反射和类加载器的实现。 总的来说,Java 11的JVM在很多方面都有所改进,包括垃圾收集、模块化、HTTP客户端、性能...
6. 安全管理器(Security Manager):确保Java程序在安全的环境中运行,控制不同代码的访问权限。 对于Java开发者来说,理解JVM构造有助于: 1. 性能优化:通过分析JVM的内存分配和垃圾收集,可以找出程序的性能...
Java虚拟机(JVM)内存管理与调优是Java开发中的关键环节,它涉及到程序的性能、稳定性和资源效率。JVM内存分为多个区域,包括堆内存、方法区、程序计数器、虚拟机栈和本地方法栈。理解这些区域的工作原理以及如何...
本文将深入探讨JVM管理手册中的关键知识点,包括内存管理、垃圾回收机制以及JVM调优。 首先,我们需要理解JVM内存结构。在JVM中,内存被划分为几个主要区域,包括堆(Heap)、栈(Stack)、方法区(Method Area)、...