博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 的 AccessController.doPrivileged使用
阅读量:7282 次
发布时间:2019-06-30

本文共 1391 字,大约阅读时间需要 4 分钟。

AccessController.doPrivileged意思是这个是特别的,不用做权限检查.

在什么地方会用到呢:加入1.jar中有类可以读取一个文件,现在我们要使用1.jar去做这个事情.但是我们的类本生是没有权限去读取那个文件的,一般情况下就是眼睁睁的看着了.  
但是jiava提供了doPrivileged.在1.jar中如果读取文件的方法是通过doPrivileged来实现的.就不会有后面的检查了,现在我们就可以使用1.jar去读取那个文件了.
例子:

Java代码  
  1. package huangyunbin.client;  
  2.   
  3. import java.io.FilePermission;  
  4. import java.security.AccessController;  
  5. import java.security.Permission;  
  6. import java.security.PrivilegedAction;  
  7.   
  8. public class Client  
  9. {  
  10.     public   void  doCheck() {  
  11.                 AccessController.doPrivileged( new  PrivilegedAction()  {  
  12.             public  Object run()  {  
  13.                 check();  
  14.                 return   null ;  
  15.             }  
  16.         } );  
  17.     }  
  18.   
  19.     private   void  check()  {  
  20.         Permission perm  =   new FilePermission( "/1.txt" ,  "read" );  
  21.         AccessController.checkPermission(perm);  
  22.         System.out.println( " TestService has permission " );  
  23.     }  
  24. }  

把这个类打包成client.jar 放到/home/h/client/下
我们建立个my.policy文件,文件内容是:

Java代码  
  1. grant codeBase  "file:/home/h/client/*"   {  
  2.      permission java.io.FilePermission  "/1.txt","read";  
  3.  };  

配置文件的意思是 /home/h/client/下面的jar包或class类 可以读取/1.txt.
现在我们再创建一个项目:创建一个类来调用前面的Client

Java代码  
  1. public class server  
  2. {  
  3.     public static void main(String[] args)  
  4.     {  
  5.         Client c =new    Client();  
  6.         c.doCheck();  
  7.     }  
  8. }  

运行这个server类.注意这里要用上之前的my.policy文件
在vm参数中写上这样的:

Java代码  
  1. -Djava.security.manager   
  2. -Djava.security.policy=/home/h/my.policy  

运行,结果是
TestService has permission
在配置文件my.policy中我们没有允许server去读取/1.txt,但是现在却可以正常访问.这个就是 AccessController.doPrivileged的作用.

 

原文:http://huangyunbin.iteye.com/blog/1942509

推荐文章:

转载地址:http://aezjm.baihongyu.com/

你可能感兴趣的文章
《Java EE核心框架实战》—— 2.4 < sql >标签
查看>>
《提高转化率!网页A/B测试与多变量测试实战指南》一2.2 掌控优化测试
查看>>
Go程序设计语言2.3 变量
查看>>
程序化交易:侠之大者为国背锅
查看>>
Spring Data 官方文档》Reference Documentation至5.2. Examples Repository
查看>>
MaxCompute SQL 2.0全新的计算引擎
查看>>
数据结构之栈和队列
查看>>
springMVC post方式乱码解决方案
查看>>
如何评估你的创业点子
查看>>
阿里云的下一个十年,云计算驱动制造业
查看>>
关于MongoDB Sharding,你应该知道的
查看>>
Git基础06:介绍一个成功的 Git 分支模型
查看>>
[MySQL源码] Innodb如何处理auto_inc值
查看>>
Git(进击学习:远程仓库操作)-V3.0
查看>>
mysql常用基础操作语法(九)~~外连接查询【命令行模式】
查看>>
lamp lnmp lnamp区别
查看>>
Shell 历史记录异地留痕审计与监控
查看>>
机器学习理论研究方法探讨
查看>>
日志服务(原SLS)新功能发布(15)--控制台支持查看协同消费组(ConsumerGroup)消费进度...
查看>>
深入Protobuf源码-概述、使用以及代码生成实现
查看>>