博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java SecurityManager
阅读量:6818 次
发布时间:2019-06-26

本文共 980 字,大约阅读时间需要 3 分钟。

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方法后,检查到调用其的类后不再继续检查。

转载地址:http://qnczl.baihongyu.com/

你可能感兴趣的文章
201421410018 于佳裔 实验四
查看>>
【VUE】@click加上v-bind绑定切换类名及动画事件
查看>>
Microsoft发布新一代主机:Xbox One
查看>>
运维经验分享:关于系统运维监控的几点建议
查看>>
jQuery渐隐渐现字体发虚的问题
查看>>
[SDOI2008]烧水问题
查看>>
杂项之rabbitmq
查看>>
【转】关于大型网站技术演进的思考(十)--网站静态化处理—动静整合方案(2)...
查看>>
jQuery练习题HTML文件
查看>>
SQL注入原理
查看>>
MySQL 锁(lock与latch)
查看>>
python
查看>>
DataTable数据存入指定路径的Excel文件
查看>>
Linq-C#左连接
查看>>
c和指针读书笔记
查看>>
常用正则表达式集锦
查看>>
JS 验证
查看>>
【Lua】特性和一些基础语法
查看>>
Jaxb2 实现JavaBean与xml互转
查看>>
shell中exec解析(转)
查看>>