JVM学习笔记4(安全管理器)

Java安全模型的第四个组成部分就是安全管理器(前三个是类装载器体系结构、class文件校验器以及Java中内置的安全特性)。

它主要用于保护虚拟机的外部资源不被虚拟机运行的恶意或有漏洞的代码侵犯。在运行的Java虚拟机中,它在访问控制——对于外部资源的访问控制——中起中枢作用。

Java安全管理器是Java中的一个类——java.lang.SecurityManager或者其子类的实例传给setSecurityManager(),以此来安装安全管理器,需要手动进行安装,如果没有安装,Java不会给你一个默认的安全管理器。当Java API进行任何可能不安全的操作时,它都会向安全管理器请求许可,从而强制执行自定义的安全策略。要向安全管理器请求许可,Java API将调用安全管理器对象的”check“方法。因为这些方法的名都以”check“开头,所以它们被称为”check“方法。例如,安全管理器的checkRead()方法决定了线程是否可以读取一个特定的文件,checkWrite()方法决定了线程能否对一个特定的文件进行写操作。

1.安装安全管理器

有两种方法来安装安全管理器:一种是直接在代码中实例化安全管理器,调用方法setSecurityManager(new SecurityManager());另一种是在命令行中使用-Djava.security.manager选项来安装管理器。

2.安全策略

制定安全管理器的安全策略也有两种方法:一种是覆盖(override)SecurityManager类中的“checkXXX”方法。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class SecurityManagerTest extends SecurityManager{
	
	@Override
	public void checkRead(String arg0) {
		// TODO Auto-generated method stub
		if(arg0.equals("a.txt")){
			throw new SecurityException("不能读取这个文件");
		}
	}

	public static void main(String[] args){
		System.setSecurityManager(new SecurityManagerTest());
		try{
			FileInputStream fis = new FileInputStream("a.txt");
			System.out.println(fis.read());
		} catch(FileNotFoundException e){	
		} catch(IOException e){
		}
	}
}

输出:

Exception in thread "main" java.lang.SecurityException: 不能读取这个文件
	at tree.SecurityManagerTest.checkRead(SecurityManagerTest.java:13)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.io.FileInputStream.<init>(Unknown Source)
	at tree.SecurityManagerTest.main(SecurityManagerTest.java:20)
另一种是利用.policy文件,下面重点讲一下。

3..po

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值