`

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

 

 

 

分享到:
评论

相关推荐

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

    170 第7章 虚拟机类加载机制 / 171 7.1 概述 / 171 7.2 类加载的时机 / 172 7.3 类加载的过程 / 176 7.3.1 加载 / 176 7.3.2 验证 / 178 7.3.3 准备 / 181 7.3.4 解析 / 182 7.3.5 初始化 / 186 7.4 类...

    JVM 相关知识的脑图介绍

    JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具有跨平台性。JVM的结构包括类加载器、解释器、即时编译器等组件,通过优化和调整这些组件可以提高Java程序的性能。JVM的内部机制复杂而丰富,深入了解JVM...

    深入java虚拟机

    1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾...4.2 JVM内存管理:深入垃圾收集器与内存分配策略 4.3 深入理解JVM

    JBoss7配置指南及管理员手册

    中文的JBoss7应用配置指南及是管理员手册,包括了JBoss所有的应用 1. jboss各主要版本特性 3 1.1. jboss4特性 3 1.2. jboss5特性 5 1.3. jboss6特性 6 1.4. jboss7特性 7 2. 为什么JBoss AS7 这么快 8 3. JBoss AS7...

    JBoss7-配置-管理员手册

    4.4.2. 管理接口的安全性 59 4.4.2.1. 初始化设置 60 4.4.2.2. 快速配置 61 4.4.2.3. 详细配置 63 4.4.2.3.1. 管理接口 63 4.4.2.3.2. 安全域 64 4.4.2.3.3. Outbound connections(外部连接) 68 4.4.2.4. 问题 68 ...

    Java线程安全问题_动力节点Java学院整理

    不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。...JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于java开发人员,要清楚在jvm内存模型的基础上,如果解决多线程的可见性和有序性。

    kalang:基于jvm的另一种程序语言

    依赖管理器集成 静态类型安全 灵活的语法 与其他基于jvm的语言兼容,例如java,groovy等。 安装 对于Linux / Mac用户: wget -O kalang-compiler-1.10.0.tar ...

    appendix_hp_systems_insight_manager_cn_cs

    • 无须增加 Java 客户端 — [CUSTOMERNAME]可以利用改进的控制台性能,并消除令管理员劳神的 Java 虚拟机 (JVM) 冲突。 • 基于角色的安全性支持 Windows 用户组,简化了用户的管理工作。 • 利用“首次向导 (First...

    YJVM—一种运行在嵌入式Linux内核中的Java虚拟机的设计与实现

    4、YJVM中程序装载、解释器、进程管理、垃圾收集和对Classpath核心类库集成的具体实现要点. 5、测试方案的制定的依据和结果;测试例程的构造和选择;测试结果的分析和在此基础上提出的改进和发展方向。

    java虚拟机2021面试题第二季

    3. 字节码验证和安全性检查:JVM对字节码进行验证,以确保它符合Java语言规范,并且没有潜在的安全漏洞。 4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类...

    java虚拟机2021面试题第三季

    3. 字节码验证和安全性检查:JVM对字节码进行验证,以确保它符合Java语言规范,并且没有潜在的安全漏洞。 4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类...

    java虚拟机2021面试题第一季

    3. 字节码验证和安全性检查:JVM对字节码进行验证,以确保它符合Java语言规范,并且没有潜在的安全漏洞。 4. 类加载和链接:JVM通过类加载器负责将字节码加载到内存中,并进行链接和初始化。类加载器还支持动态类...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    3.6 安全管理器和java api 3.7 代码签名和认证 3.8 一个代码签名示例 3.9 策略 3.10 保护域 3.11 访问控制器 3.11.1 implies()方法 3.11.2 栈检查示例 3.11.3 一个回答“是”的栈检查 3.11.4...

    Tomcat配置管理实践

    7,TOMCAT环境变量 8,TOMCAT和JVM的配置 9,TOMCAT基于名称的虚拟主机 10,TOMCAT IP访问控制 11,TOMCAT访问日志记录 12,TOMCAT状态验证 13,TOMCAT设置SSL访问 14,TOMCAT安全策略 15,TOMCAT的URL编码格式 ...

    Java面试整理,涵盖基础、JVM、线程并发、框架、MySQL、微服务、Redis、中间件、数据结构与算法等。陆续完善中.zip

    安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 可移植性:Java字节码可以在所有安装了JVM的设备上执行,从服务器到嵌入式系统,再到移动...

    JAVA线程安全及性能的优化

    不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。...JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于java开发人员,要清楚在jvm模型的基础上,如果解决多线程的可见性和有序性。

    java霸王的大陆源码-Overlord:强大的内存管理库。无限制地在JVM的本机内存上执行非法,不安全和极其危险的操作

    无限制地在JVM的本机内存上执行非法,不安全和极其危险的操作。 您也可以假装这是C,并直接管理内存! :) 特征: 在不使用其构造函数的情况下创建对象。 编辑堆内存中的对象。 在堆之外分配和管理内存。 将对象和...

    JAVA虚拟机全面理解.docx

    Java虚拟机(JVM)是Java语言的重要核心之一,它是Java程序运行的基础。Java虚拟机是一种抽象的计算机,它模拟了实际的计算机系统,并提供了所有...应用层则提供了与具体应用相关的功能,如安全管理器、垃圾收集器等。

    JDK_1_6 API

    javax.transaction.xa 提供定义事务管理器和资源管理器之间的协定的 API,它允许事务管理器添加或删除 JTA 事务中的资源对象(由资源管理器驱动程序提供)。 javax.xml 根据 XML 规范定义核心 XML 常量和功能。 ...

    exe4j_windows_4_5_1 免安装版

    如果你想在任务管理器中及Windows XP分组的用户友好任务栏里以你的进程名取代java.exe的出现,那么exe4j可以完成这个工作。exe4j帮助你以一种安全的方式启动你的 java应用程序,来显示本地启动画面,检测及发布合适...

Global site tag (gtag.js) - Google Analytics