启动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方法则用于判断对文件访问权限。一旦发现没有权限都会抛出安全异常。

最新文章

  1. 说说Makefile那些事儿
  2. 什么是Servlet?
  3. linuxqq
  4. 怎样处理“error C2220: warning treated as error - no object file generated”错误
  5. 转-squid介绍及其简单配置
  6. 在windows上安装ASP.NET 5(译文)
  7. 在Unity项目中使用Git
  8. vim之grep
  9. UVa 10817 (状压DP + 记忆化搜索) Headmaster's Headache
  10. PI-webservice06-调用外部webservice过程中注意问题
  11. ThinkPHP函数详解:cache方法
  12. memcached在Windows下的安装
  13. 判断DataRow中是否包含某列
  14. 微信公众号Unauthorized API function
  15. oracle 中 某个字段的长度不够的sql 语句
  16. 彻底弄懂python编码
  17. MySQL常见报错汇总
  18. java----java工具类
  19. Python基础-python数据类型之集合(四)
  20. 20172302 《Java软件结构与数据结构》第八周学习总结

热门文章

  1. python-day10--字符编码
  2. 带分数(dfs,next_permutation)
  3. nyoj 1237 简单dfs
  4. C++技能重拾
  5. 清除mac出现的.DS_Store文件
  6. js前台数据校验
  7. React 源码剖析系列 - 不可思议的 react diff
  8. 设置 placeholder 字体颜色 : ::
  9. .Net Entity Framework Core 用 HasColumnType 配置浮点数精度
  10. Kotlin Reference (十二) Extensions