`

jvm_7_安全管理器简介

    博客分类:
  • jvm
 
阅读更多

 

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
 这个时候默认的安全管理器就被安装上了。

 

 

 

分享到:
评论

相关推荐

    inside_jvm.rar_Inside the JVM_gettingloaded.html_inside jvm_insi

    《深入理解JVM》(Inside the JVM) 是一本关于Java虚拟机的重要参考资料,它涵盖了JVM的内部工作原理,包括类加载机制、内存管理、字节码执行等核心概念。"gettingloaded.html" 可能是其中的一个章节,专门探讨了类的...

    JVM.rar_java 工作流_java 虚拟机_jvm_jvm hook_虚拟机 Java

    "深入Java虚拟机"这本书可能涵盖了JVM的更深入细节,如类加载机制的自定义、内存模型、垃圾收集器的原理与调优、JVM参数设置、性能监控工具的使用等。通过学习这些内容,开发者可以更好地理解和优化Java应用的运行...

    JVM.pdf_jvm_

    Java虚拟机(JVM)是Java平台的核心组成部分,它是Java程序的运行环境,负责执行字节码并管理内存、线程和类加载等。JVM使得Java具备了“一次编写,到处运行”的特性。在面试中,对JVM的理解深度往往能体现一个...

    JVM_工作原理.

    除此之外,JVM还涉及线程管理、异常处理、安全管理和性能监控等功能。线程让多个任务并发执行,异常处理提供了一种统一的错误处理机制,而安全管理则保证了Java程序的运行安全。JMX(Java Management Extensions)则...

    JVM.rar_jvm_虚拟机

    JVM虚拟机指令集的设计旨在保证Java代码的高效执行,同时确保安全性。通过这些指令,JVM能够解析和执行Java字节码,实现动态编译(JIT编译器)以提高性能,并进行垃圾收集以管理内存。理解JVM指令集对于优化Java代码...

    监测JVM各项性能指标

    - **jinfo**:提供配置信息,如JVM参数,可以实时修改某些非安全的运行时参数。 - **jmap**:用于生成堆内存映射或dump文件,便于分析内存泄漏。 - **jhat**:分析堆dump文件,查找内存泄漏或对象引用问题。 2. ...

    SAP JVM 8.1 64 bits

    7. **性能监控**:SAP JVM提供了丰富的JMX(Java Management Extensions)和JFR(Java Flight Recorder)功能,帮助管理员监控和分析JVM的性能,如内存使用、线程状态、GC(垃圾收集)行为等。 总之,SAP JVM 8.1 ...

    深入理解_Java_虚拟机_(JVM_高级特性与最佳实践)

    JVM通过自动内存管理系统来管理堆内存。当对象不再被引用时,JVM会自动回收这些对象占用的内存空间,这一过程称为**垃圾回收**。常见的垃圾回收算法包括标记-清除算法、复制算法、标记-整理算法以及分代收集算法等。...

    JVM_多线程高并发_集合框架_数据库 BAT面试金典常见80问.pdf

    《JVM_多线程高并发_集合框架_数据库 BAT面试金典常见80问.pdf》这份资料聚焦于Java开发人员在面试中可能遇到的重要问题,涵盖了JVM、多线程高并发、集合框架和数据库等多个核心领域。以下是对这些知识点的详细说明...

    JAVA架构师知识整理.zip_by2kc_jvm_书籍_微服务_架构

    理解JVM的工作原理,包括类加载机制、内存管理(堆、栈、方法区等)、垃圾收集以及性能优化,是每个Java架构师必备的技能。深入学习JVM调优,如调整堆大小、设置GC参数,能够帮助解决性能瓶颈,提高系统的响应速度和...

    JVM.zip_JVM代理_classloader

    在Java世界中,JVM(Java虚拟机)是运行所有Java程序的核心,它负责加载、验证、执行字节码,并管理内存。而JVM代理(JVM Agent)和类加载器(ClassLoader)则是两个关键的概念,它们对于深入理解Java应用程序的运行...

    JVM_01 内存结构(程序计数器、虚拟机栈、本地方法栈)

    - **自动内存管理**:JVM 提供了自动垃圾回收机制,开发者无需手动管理内存。 - **安全性增强**:例如数组下标越界检查等功能,提高了程序的安全性和稳定性。 ##### 常见的JVM - **HotSpot**:这是目前最常用的 JVM...

    JVM指令手册_jvm指令手册_

    1. **操作数栈管理指令**:JVM中的每条指令都可能涉及到操作数栈的操作,如`iconst`系列用于将整数值压入栈,`pop`和`pop2`用于弹出栈顶元素,`dup`用于复制栈顶元素并将其推回栈顶。 2. **局部变量表操作指令**:...

    jvm_session_demo:jvm 会话演示

    7. **安全性考虑**: 管理会话时需要考虑安全性问题,如防止会话劫持、会话固定攻击和CSRF(跨站请求伪造)。有效的安全实践包括定期刷新会话ID、使用HTTPS、验证请求来源等。 8. **性能优化**: 会话过多会占用大量...

    JVM-SANDBOX基于JVM的实时无侵入AOP框架容器

    **JVM-SANDBOX:基于JVM的实时无侵入AOP框架容器** JVM-SANDBOX是一个强大的工具,它允许开发者在Java虚拟机...无论是用于提高安全性、优化性能,还是简化复杂系统的维护,JVM-SANDBOX都值得开发者深入了解和使用。

    java11-jvm白皮书_java_govwe_

    此外,JEP 315(JVM Constants API)为开发者提供了一种更简单的方式访问和操作JVM常量池,简化了反射和类加载器的实现。 总的来说,Java 11的JVM在很多方面都有所改进,包括垃圾收集、模块化、HTTP客户端、性能...

    JVM.rar_jvm

    6. 安全管理器(Security Manager):确保Java程序在安全的环境中运行,控制不同代码的访问权限。 对于Java开发者来说,理解JVM构造有助于: 1. 性能优化:通过分析JVM的内存分配和垃圾收集,可以找出程序的性能...

    JVM 内存管理及调优.zip_JVM内存_java_memory

    Java虚拟机(JVM)内存管理与调优是Java开发中的关键环节,它涉及到程序的性能、稳定性和资源效率。JVM内存分为多个区域,包括堆内存、方法区、程序计数器、虚拟机栈和本地方法栈。理解这些区域的工作原理以及如何...

    jvm.rar_jvm

    本文将深入探讨JVM管理手册中的关键知识点,包括内存管理、垃圾回收机制以及JVM调优。 首先,我们需要理解JVM内存结构。在JVM中,内存被划分为几个主要区域,包括堆(Heap)、栈(Stack)、方法区(Method Area)、...

Global site tag (gtag.js) - Google Analytics