`

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的作用.
1
4
分享到:
评论
3 楼 大维啊 2017-11-30  
同志,你这不行啊!
2 楼 woshizmy0910 2016-12-20  
有好些错别字,请博主有时间抽空改下
1 楼 javatozhang 2016-10-18  
简单明了非常好。

相关推荐

    aop面向切面需要的jar包

    at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc....

    swing-worker-1.1.jar

    at java.security.AccessController.doPrivileged(NativeMethod) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229) at java....

    jaxen.jar和dom4j.jar

    at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$...

    AXMLPrinter2、baksmali、smali、dex2jar

    at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$...

    android反编译dex2jar

    at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc....

    activiti-sandbox-script:如何使用沙盒脚本引擎运行Activiti

    沙盒脚本如何使用沙盒脚本引擎运行Activiti一般的做法创建org.activiti.engine.impl.scripting.ScriptingEngines的实现,该实现重写受保护的方法my.seoj.activiti.sandbox.script.Main.PrivilegedScriptingEngines....

    hadoop-2.6.0-hadoop.dll-winutils.exe

     at java.security.AccessController.doPrivileged(Native Method)  at javax.security.auth.Subject.doAs(Subject.java:415)  at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation....

    BufferedWriter 介绍_动力节点Java学院整理

    在 BufferedWriter 中,lineSeparator 变量用于存储行分隔符,它的值是通过 java.security.AccessController.doPrivileged 方法获取的。 BufferedWriter 的使用场景包括日志记录、文件写入、网络传输等场景。在这些...

    java权限设计

    在Java中,可以通过`java.security.PrivilegedAction`和`java.security.AccessController.doPrivileged()`方法实现。 10. **Java标准权限(Standard Permissions)**:Java提供了一些预定义的权限,如`All...

    【2018hit计算机学院系统安全java】实验三:完整性访问控制系统设计与实现代码

    3. **编写受保护代码**:使用`AccessController.doPrivileged()`方法来包裹可能需要特殊权限的代码块。 4. **权限检查**:在需要的地方插入`checkPermission()`调用来检查当前线程是否具有执行特定操作的权限。 5. *...

    java权限实现实例

    6. **代码实现**:在实际代码中,使用`AccessController.doPrivileged()`方法来执行需要特定权限的代码块。这样,即使在没有权限的环境中,也可以在受保护的上下文中执行这些操作。 在文档"权限实现实例.doc"中,...

    jdk1.8.0_181(64位).7z

    新的变体AccessController.doPrivileged使代码能够断言其特权的子集,而不会阻止堆栈的完整遍历来检查其他权限 更强大的基于密码加密的算法 JSSE服务器中的SSL / TLS服务器名称指示(SNI)扩展支持 支持AEAD算法...

    javascrpit与javaapplet交互

    例如,代码片段中展示了如何使用`AccessController.doPrivileged`方法来获取磁盘列表: ```java public String getDiskList() { return (String) AccessController.doPrivileged( new PrivilegedAction() { ...

    java编码规范考试题答案.doc

    8. **ZipInputStream**:这段代码涉及到权限控制,使用了 `AccessController.doPrivileged`。在 [1] 处,关键字应该是 `final`,确保 `copy` 文件对象不会被修改。正确选项为 A(final)。 9. **平安编程**:在处理...

    Android用JavaMail发送邮件

    AccessController.doPrivileged(new java.security.PrivilegedAction() { public Void run() { put("SSLContext.TLS", "org.apache.harmony.xnet.provider.jsse.SSLContextImpl"); put("Alg.Alias.SSLContext....

    java编码规范考试题答案23435.doc

    代码中使用了`AccessController.doPrivileged`,这涉及到Java的安全模型,用于在特权上下文中执行代码,此处填入`final`关键字可能是为了确保`copy`变量不会被改变。 9. **安全编程**:外部输入应进行验证,防止...

    struts2驱动包

    at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at...

    java编码规范考试题答案借鉴.pdf

    - 使用AccessController.doPrivileged()进行安全敏感操作,此处关键字可能是`final`,用于确保变量不可修改。 9. **安全编程**: - 对外部输入的数据必须进行验证,防止注入攻击。 - 不允许不受信任的代码直接...

    Java 开发安全规范.docx

    如果它的一个方法调用了`SecurityManager`进行特权检查或其他敏感操作,例如`AccessController.doPrivileged`等,则应确保此方法被标记为final,否则可能被恶意使用者通过重载此方法,跳过预设的检测逻辑。...

Global site tag (gtag.js) - Google Analytics