java 的 AccessController.doPrivileged使用
AccessController.doPrivileged意思是这个是特别的,不用做权限检查.
在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们的类本生是没有权限去读取那个文件的,一般情况下就是眼睁睁的看着了.
但是jiava提供了doPrivileged.在1.jar中如果读取文件的方法是通过doPrivileged来实现的.就不会有后面的检查了,现在我们就可以使用1.jar去读取那个文件了.
例子:
- package huangyunbin.client;
- import java.io.FilePermission;
- import java.security.AccessController;
- import java.security.Permission;
- import java.security.PrivilegedAction;
- public class Client
- {
- public void doCheck() {
- AccessController.doPrivileged( new PrivilegedAction() {
- public Object run() {
- check();
- return null ;
- }
- } );
- }
- private void check() {
- Permission perm = new FilePermission( "/1.txt" , "read" );
- AccessController.checkPermission(perm);
- System.out.println( " TestService has permission " );
- }
- }
把这个类打包成client.jar 放到/home/h/client/下
我们建立个my.policy文件,文件内容是:
- grant codeBase "file:/home/h/client/*" {
- permission java.io.FilePermission "/1.txt","read";
- };
配置文件的意思是 /home/h/client/下面的jar包或class类 可以读取/1.txt.
现在我们再创建一个项目:创建一个类来调用前面的Client
- public class server
- {
- public static void main(String[] args)
- {
- Client c =new Client();
- c.doCheck();
- }
- }
运行这个server类.注意这里要用上之前的my.policy文件
在vm参数中写上这样的:
- -Djava.security.manager
- -Djava.security.policy=/home/h/my.policy
运行,结果是
TestService has permission
在配置文件my.policy中我们没有允许server去读取/1.txt,但是现在却可以正常访问.这个就是 AccessController.doPrivileged的作用.
原文:http://huangyunbin.iteye.com/blog/1942509
推荐文章:Java 安全模型介绍
java 的 AccessController.doPrivileged使用的更多相关文章
- SecurityManager一:理解AccessController.doPrivileged()
AccessController.checkPermission()检测模型: 从VM Stack的current stack frame起逐个检测stack frome所指class的protect ...
- Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
学习架构探险,从零开始写Java Web框架时,在学习到springAOP时遇到一个异常: "C:\Program Files\Java\jdk1.7.0_40\bin\java" ...
- 再次学习 java 类的编译
做JAVA开发的都知道myeclipse, 我们在myeclipse中新建一个类,然后保存, 如何正常的话,那么在项目指定的目录(也就是项目的output目录)就会生成同名的class文件, 可是,我 ...
- myeclipse 无法启动 java.lang.IllegalStateException: Unable to acquire application service. Ensure that the org.eclipse.core.runtime bundle is resolved and started (see config.ini).
把myeclipse10 按照目录完整拷贝到了另外一台电脑, 另外的目录 原安装目录 D\:\soft\i\myeclipse10 新安装目录 E\:\soft\myeclipse10 双击启动失败, ...
- Java DNS查询内部实现
源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...
- 执行打的maven jar包时出现“Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for Manifest main attributes”
Exception in thread "main" java.lang.SecurityException: Invalid signature file digest for ...
- 【java.lang.UnsupportedClassVersionError】版本不一致出错
这种错误的全部报错信息: java.lang.UnsupportedClassVersionError: org/apache/lucene/store/Directory : Unsupported ...
- 【异常】Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException
Caused by: java.lang.ClassNotFoundException: org.springframework.dao.DataIntegrityViolationException ...
- Java Hashtable的实现
先附源码: package java.util; import java.io.*; /** * This class implements a hash table, which maps keys ...
随机推荐
- js-JavaScript高级程序设计学习笔记5
第七章 函数表达式 1.函数声明的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明,因此可以把函数声明放在调用它的语句后面. 2.使用函数表达式创建的函数叫做匿名函数(拉姆达函数), ...
- C++实现类似飞鸽的内网聊天工具,采用多播的协议实现
项目相关地址 源码:https://github.com/easonjim/FreeAnt bug提交:https://github.com/easonjim/FreeAnt/issues
- phpize报cannot find autoconf
突然想往php种增加个模块,可是又不想重新编译php,因为真的比较费时间. phpize就可以解决这个问题. 遇到的问题: Configuring for: PHP Api Version: Zend ...
- alertDialog创建登陆界面,判断用户输入
alertDialog创建登陆界面,需要获取用户输入的用户名和密码,获取控件对象的时候不能像主布局文件那样获得, 需要在onClickListener中获取,代码如下: public boolean ...
- ASP.NET MVC4 执行流程
MVC在底层和传统的asp.net是一致的,在底层之上,相关流程如下: 1)Global.asax里,MvcApplication对象的Application_Start()事件中,调用 RouteC ...
- 《JavaScript权威指南》学习笔记 第五天 window对象的方法。
前天和昨天大致浏览了犀牛书的函数.类与模块.正则表达式.JavaScript扩展.以及服务端的js.这些方面对于我目前的水平来说比较难,一些最基本的概念都不能领会.不过最复杂的知识占用平时使用的20% ...
- JS-节点属性(常用!)
(开始很生疏,不想看的知识点,后来DOM中用的特别多,才发现很重要.还有几个点,是比较容易忽略的,值得注意!) <!DOCTYPE html><html> <head&g ...
- BZOJ2286: [Sdoi2011]消耗战
建出虚树dp. 把询问点按dfs序排序,用一个以dfs序为关键字的单调栈(以深度为关键字也是一样的),每次将一个询问点与栈顶的点的lca入栈,再将这个询问点入栈,在这个过程中建出一棵树就是虚树.具体看 ...
- uC/OS-II内存(OS_mem)块
/*************************************************************************************************** ...
- js023-离线应用与客户端存储
js023-离线应用与客户端存储 本章内容: 进行离线检测 使用离线缓存 在浏览器中保存数据 23.1 离线检测 第一步:知道设备是在线还是离线:navigator.Online属性.该值为true表 ...