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 安全模型介绍

  • 相关阅读:
    一个开始搞Linux的现任前端开发,用U盘装CentOS
    .NET:处理数据库事务中的并发
    Xml与对象之间的序列化、反序列化
    嵌套类
    .NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
    backbone 之事件(events)
    一道笔试指针题目详解
    linux安装Cassandra数据库
    Angularjs Controller 间通信机制
    NLucene 和 Lucene .NET
  • 原文地址:https://www.cnblogs.com/langtianya/p/5133633.html
Copyright © 2011-2022 走看看