zoukankan      html  css  js  c++  java
  • 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 安全模型介绍

  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/langtianya/p/5133633.html
Copyright © 2011-2022 走看看