Java安全管理器
启动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安全管理器的更多相关文章
- java安全管理器SecurityManager入门
table { margin-left: 30px; width: 95%; border: 1px; border-collapse: collapse } img { border: 1px so ...
- java安全管理器SecurityManager介绍
java安全管理器类SecurityManager简单剖析: javadoc介绍: SecurityManager是一个允许应用实现一种安全策略的类.它允许一个应用去明确,在执行一个可能安全或者敏感的 ...
- java安全管理器SecurityManager
本文转载自java安全管理器SecurityManager 导语 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如 ...
- Java安全管理器——SecurityManager
总的来说,Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性:二是Java语言开发的应用程序的安全性.由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我 ...
- Java RMI之HelloWorld程序以及相关的安全管理器的知识
Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,可以让在某个 Java 虚拟机上的对象调用还有一个 Java 虚拟机中的对象上的方法.可以用此 ...
- 关于java中的安全管理器
最近再查看java的源码的时候看见了这一类代码 final SecurityManager sm = System.getSecurityManager(); 想要了解这个是为了做什么,查看资料之后发 ...
- 安全管理器SecurityManager
一.文章的目的 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如在阅读源码的时候,发现这样的代码,想了解是做什么的 ...
- Java 类加载器(ClassLoader)
类加载器 ClassLoader 什么是类加载器? 通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现, 以便让应用程序自己决定如何去获取所需要的类.实现这个动作的代 ...
- java安全沙箱(四)之安全管理器及Java API
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
随机推荐
- nyoj311(完全背包变形)
完全背包 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 直接说题意,完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用.第i种物品的体积是c,价值是 ...
- 批量kill Linux环境下的任务
批量kill Linux服务器的进程可以通过ps grep aws xargs 进行结合来完成 比如要kill 全部test.sh 的进程 ps -ef |grep "test.sh ...
- OC 归档和解档
#import <Foundation/Foundation.h> #define PATH @"/Users/mac/Desktop/file.txt" int ma ...
- OC Foundation框架—结构体
一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...
- pos提交提交数据时碰到Django csrf
我的github(PS:希望star):https://github.com/thWinterSun/v-admin 最近在用Vue写前端代码,再用vue-resource向后台提交数据.项目后台是用 ...
- Edraw安装图解
Edraw安装图解 Success
- git reset --hard和git revert命令
git reset --hard和git revert命令 git误操作时可以用git reset –hard 去撤销这次修改, 但是这样做也有问题,可能在之前本地有没有提交的修改也都消失了, ...
- flask(十)使用alembic,进行数据库结构管理,升级,加表,加项
1.安装扩展,在虚拟环境中安装 alembic,不懂可以去看pycharm的系列文章. 2.初始化, 使用 Alembic 前需要通过 alembic init 命令创建一个 alembic 项目,该 ...
- gitignore中常见需要被无视的文件
gitignore中常见的需要被忽略的文件:例如各个系统.一些软件会自动生成的文件,主要适用于web项目. 复制后,保存进.gitignore文件中即可. # Project node_modules ...
- 玩转X-CTR100 | STM32F4 l GPIO位带操作
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...