Java SecurityManager

Java的SecurityManager用于完成对一些本地方法的权限管理。其他安全特性可以保证程序Java程序安全运行,但是当调用本地方法时,Java安全沙箱完全不起作用,因此需要在调用本地方法前确认它是可信任的。

启动SecurityManager开关:

默认情况下,JVM是不启动安全检查的。打开的方式有两种:一种是在启动运行中追加JVM参数-Djava.security.manager,另一种方式是在程序中直接设置:System.setSecurityManager(new SecurityManager())。第二种方法可以设置为系统的SecurityManager或者自定义类扩展该类。这两种方式是等价的,但是不能同时使用。

Java安全管理器控制权限的方法:

使用系统的SecurityManager 编写.policy文件;扩展SecurityManager修改其check方法,使用上述第二种方法启动SecurityManager。使用系统的SecurityManager需要修改policy文件:修改jvm自带的java.policy文件,或者指定为另一个文件。java.policy文件位于%JAVA_HOME%/ jre/lib/security/。指定为其他方法启动时加参数-Djava.security.policy=c:/all.policy。另外在调试过程中我使用了命令行的方式编译带包声明的Java,与不带包声明的方式有点差别,命令如下:

set classpath=.
javac -d ./ Test.java  #第二个参数
java monitor.Test

SecurityManager中做权限检查实际上调用的是AccessController来完成检查。检查的过程是从栈顶开始,一直检查到栈底部,遇到某个类的保护域没有权限则抛出异常。这样的算法防止了任何代码执行任何不信任的代码。有的时候靠近栈顶的代码希望之星一段代码,而这段代码在较下层不允许执行,例如一个不可靠的applet请求Java API加载字体,因此需要打开这个字体文件的权限。这种情况下AccessController的doPrivileged方法可以解决问题。检查权限的过程中,检查到doPrivileged方法后,检查到调用其的类后不再继续检查。

时间: 2024-08-06 23:13:45

Java SecurityManager的相关文章

java.security.PublicKey翻译

  Overview Package  Class Use Tree Deprecated Index Help JavaTM 2 PlatformStd. Ed. v1.4.2  PREV CLASS   NEXT CLASSFRAMES    NO FRAMES     All Classes SUMMARY: NESTED | FIELD | CONSTR | METHODDETAIL: FIELD | CONSTR | METHOD java.security Interface Pub

Java中打开SecurityManager的方法

每个Java应用都可以有自己的安全管理器,它是防范恶意攻击的主要安全卫士.安全管理器通过执行运行阶段检查和访问授权,以实施应用所需的安全策略,从而保护资源免受恶意操作的攻击.实际上,安全管理器根据Java安全策略文件决定将哪组权限授予类.然而,当不可信的类和第三方应用使用JVM时,Java安全管理器将使用与JVM相关的安全策略来识别恶意操作.在很多情况下,威胁模型不包含运行于JVM中的恶意代码,此时Java安全管理器便不是必需的.当安全管理器检测到违反安全策略的操作时,JVM将引发 Access

Java VisualVM远程监控JVM

   VisualVM是一个以监控.显示本地或者远程服务器JVM工作情况,进行性能调优的工具.借助VisualVM,我们可以实现对JVM内存各个子池.CPU.垃圾收集器等方面进行监控,从而发现程序代码中潜在的泄露点和配置问题. 远程监控Linux JVM有两种连接方式: CentOS6.5安装:yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel Ubuntu12.04安装:sudo apt-get install java-7-open

Java安全——理解Java沙箱

Java安全--理解Java沙箱 标签: Java 安全 [toc] 什么是沙箱^1 Java安全模型的核心就是Java沙箱(sandbox),什么是沙箱?沙箱是一个限制程序运行的环境.限制程序运行一方面是为了保护系统资源,同时另一方面也为了保护程序自己.沙箱主要限制系统资源访问,那系统资源包括什么?--CPU.内存.文件系统.网络.不同级别的沙箱对这些资源访问的限制也可以不一样. 所有的Java程序运行都可以指定沙箱,可以定制安全策略.而一个Java程序运行的安全策略,包括了以下几点基础: 字

Java服务器端编程安全必读

安全|编程|服务器   概述和溢出 一.概述 编写安全的Internet应用并不是一件轻而易举的事情:只要看看各个专业公告板就可以找到连续不断的安全漏洞报告.你如何保证自己的Internet应用不象其他人的应用那样满是漏洞?你如何保证自己的名字不会出现在令人难堪的重大安全事故报道中? 如果你使用Java Servlet.JavaServer Pages(JSP)或者EJB,许多难以解决的问题都已经事先解决.当然,漏洞仍有可能出现.下面我们就来看看这些漏洞是什么,以及为什么Java程序员不必担心部

java.net.URLClassLoader翻译

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!--NewPage--><HTML><HEAD><!-- Generated by javadoc (build 1.4.2-rc) on Fri Jun 13 00:14:25 PDT 2003 --&

网上收集的一些Java应用

我先说说在JBUILDER中将程序外观变的更酷的办法!JAVA程序默认的外观(LOOKANDFEEL)可以改变为JAVA外观.MOTIF外观.WINDOWS外观.MAC外观:而JAVA外观又有五种风格分别是海蓝宝石风格.祖母绿风格.红宝石风格.木炭风格.高对比风格.外观改变具体方法如下: 1:可以直接在程序中调用下面三个中的一个: import javax.swing.*; UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.Motif

Java权限模型的缺陷

围绕各种 permission 类和基于代码的安全性构建的 Java SE Access Control 模型没能紧跟 Java 平台的发展步伐,因而无法满足当今企业系统的需求.本文将分析该问题的根源,并给出一些建议的替代方案. Java SE 模型概述 该模型的本质是使用代码中的 permission 类来认可执行某些操作的正确性.当某个操作要在特定的类/页面/等中执行时,该代码将调用 SecurityManager 的(或 AccessController 的)方法 checkPermiss

利用数字签名超越Java Applet的安全限制

Java技术之所以在今天得到了如此广阔的应用,其中它的安全性是不能不提的.不同于其它技术(例如Microsoft的ActiveX)中安全性作为附加设计和补丁,Java从设计之初便考虑到了安全性.因此Java的安全性是在语言层次实现的.Java的安全性由下列三个方面保证: 1.语言特性(包括数组的边界检查.类型转换.取消指针型变量). 2.资源访问控制(包括本地文件系统访问.Socket连接访问). 3.代码数字签名(通过数字签名来确认代码源以及代码是否完整). 本文主要讨论结合后两种技术来实现超