启动SecurityManager开关:

隐式:

启动时添加JVM启动参数:

-Djava.security.manager :启动默认的安全管理器;

-Djava.security.policy="E:/java.policy":指定安全管理器的配置文件;

显式:

实例化一个java.lang.SecurityManager或继承它的子类的对象,然后通过System.setSecurityManager()来设置并启动一个安全管理器。

System.setSecurityManager(new SecurityManager())

配置Policy文件:

JVM自带的Policy文件位于%JAVA_HOME%/jre/lib/security/java.policy;

Java.policy解析:

grant codeBase "file:${{java.ext.dirs}}/*" {

permission java.security.AllPermission;

};

定义了系统属性${{java.ext.dirs}}路径(%JAVA_HOME%/jre/lib/ext)下的所有的class及jar拥有所有的操作权限;关于配置的路径说明:

directory/ :表示directory目录下的所有.class文件,不包括.jar文件;

directory/* :表示directory目录下的所有.class文件,不包括.jar文件;

directory/- :表示directory目录下的所有.class文件,不包括.jar文件;

grant {

permission java.io.FilePermission "d:/1.txt", "read";

};

表示给d:\1.txt文件赋予读的权限;

Demo:

public class SecurityManagerTest {

public static void main(String[] args)throws FileNotFoundException {

System.out.println("SecurityManager: " + System.getSecurityManager());

FileInputStreamfis = new FileInputStream("c:\\protect.txt");

System.out.println(System.getProperty("file.encoding"));

}

}

1、不添加任何参数运行,相当于没有启动安全管理器,程序运行正常;

2、添加启动参数:-Djava.security.manager-Djava.security.policy=c:/protect.policy

运行会报AccessControlException异常;

3、需要在protect.txt中添加授权语句:

grant {

permissionjava.io.FilePermission "c:/protect.txt", "read";

permissionjava.util.PropertyPermission "file.encoding", "read";

};

此时再运行则正常;

工作原理:

当应用程序要读取本地文件时,securitymanager就会在读取前进行拦截,判断是否有读取此文件的权限,如果有则顺利读取,否则将抛出访问异常。SecurityManager类中提供了很多检查权限的方法,例如checkPermission方法会根据安全策略文件描述的权限对操作进行判断是否有操作权限,而checkRead方法则用于判断对文件访问权限。一旦发现没有权限都会抛出安全异常。

Java安全管理器的更多相关文章

  1. java安全管理器SecurityManager入门

    table { margin-left: 30px; width: 95%; border: 1px; border-collapse: collapse } img { border: 1px so ...

  2. java安全管理器SecurityManager介绍

    java安全管理器类SecurityManager简单剖析: javadoc介绍: SecurityManager是一个允许应用实现一种安全策略的类.它允许一个应用去明确,在执行一个可能安全或者敏感的 ...

  3. java安全管理器SecurityManager

    本文转载自java安全管理器SecurityManager 导语 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如 ...

  4. Java安全管理器——SecurityManager

    总的来说,Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性:二是Java语言开发的应用程序的安全性.由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我 ...

  5. Java RMI之HelloWorld程序以及相关的安全管理器的知识

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,可以让在某个 Java 虚拟机上的对象调用还有一个 Java 虚拟机中的对象上的方法.可以用此 ...

  6. 关于java中的安全管理器

    最近再查看java的源码的时候看见了这一类代码 final SecurityManager sm = System.getSecurityManager(); 想要了解这个是为了做什么,查看资料之后发 ...

  7. 安全管理器SecurityManager

    一.文章的目的 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如在阅读源码的时候,发现这样的代码,想了解是做什么的 ...

  8. Java 类加载器(ClassLoader)

    类加载器 ClassLoader 什么是类加载器? 通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现, 以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代 ...

  9. java安全沙箱(四)之安全管理器及Java API

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

随机推荐

  1. WinForm窗体下Excel的导入

    一.Winform窗体程序的Excel的导入 把Excel导入到内存中的DataTable 方法实现: #region ExcelToDataTable public static DataTable ...

  2. Oracle ASM 相关的 视图(V$) 和 数据字典(X$)

    本文转自: http://blog.csdn.net/tianlesoftware/article/details/6733039 ASM由于其高度的封装性,使得我们很难知道窥探其内部的原理.可以通过 ...

  3. python里实现DSL

    以后用到的话可以参考如下链接: http://safehammad.com/downloads/domain-specific-languages-and-python-2011-04-21.pdf ...

  4. 获取和设置消息队列的属性msgctl,删除消息队列

    消息队列的属性保存在系统维护的数据结构msqid_ds中,用户可以通过函数msgctl获取或设置消息队列的属性. int msgctl(int msqid, int cmd, struct msqid ...

  5. sql server中的大数据的批量操作(批量插入,批量删除)

    首先我们建立一个测试用员工表 ---创建一个测试的员工表--- create table Employee( EmployeeNo int primary key, --员工编号 EmployeeNa ...

  6. 快速切题sgu126. Boxes

    126. Boxes time limit per test: 0.25 sec. memory limit per test: 4096 KB There are two boxes. There ...

  7. sgu106.The equation 拓展欧几里得 难度:0

    106. The equation time limit per test: 0.25 sec. memory limit per test: 4096 KB There is an equation ...

  8. https://blog.csdn.net/u012150179/article/details/38091411

    一 scrapy-redis实现分布式爬取分析 所谓的scrapy-redis实际上就是scrapy+redis其中对redis的操作采用redis-py客户端.这里的redis的作用以及在scrap ...

  9. Oracle 12c新特性(For DBA)

    一: Multitenant Architecture (12.1.0.1)      多租户架构是Oracle 12c(12.1)的新增重磅特性,内建的多分租(Multi-tenancy),一个容器 ...

  10. 树状数组Lowbit用法

    刚学树状数组,看到这里的时候懵了.经过询问,发现,原来在程序运行时,数据用的都是补码,于是解决了 int Lowbit(x) { return x&(-x); } 如: x =1: 1 &am ...