• java 的 AccessController.doPrivileged使用


    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

    推荐文章:Java 安全模型介绍

  • 相关阅读:
    Git .gitignore文件简介及使用
    JMeter 报告监听器导入.jtl结果文件报错解决方案
    JMeter 中实现发送Java请求
    JMeter 正则表达式提取器结合ForEach控制器遍历提取变量值
    Tomcat_记一次tomcatwar包应用简单部署过程
    Python_基于Python同Linux进行交互式操作实现通过堡垒机访问目标机
    Python_关于多线程下变量赋值取值的一点研究
    JMeter 后置处理器之正则表达式提取器详解
    性能测试 CentOS下结合InfluxDB及Grafana图表实时展示JMeter相关性能数据
    Python 标准类库-数据类型之copy-深拷贝浅拷贝操作
  • 原文地址:https://www.cnblogs.com/langtianya/p/5133633.html
Copyright © 2020-2023  润新知