在Java中限制文件访问权限

问题:
在我的Java应用程序(而不是一个applet),我要限制某些文件操作的所有类,除了类的列表/组/包,不应该受到限制。

具体来说,我想限制...

  • 文件读取
  • 文件写入
  • 档案建立
  • 文件删除

......这样他们只能在当前工作目录中完成,但所有的无限制类。

SecurityManager的尝试:
我试图实现实现这一行为SecurityManager类的子类,但它看来,当检查由提供的文件资料不给予更多的不仅仅是文件名 ​​(除非我失去了一些东西?)。

另外,我不太明白如何在这种情况下,我可以找出哪些呼叫正在从制作类,让我来决定是否允许该操作或抛出异常。 有什么办法,我能得到我需要这种方法工作的所有信息?

基于策略的尝试:
我也知道,Java的政策旨在限制类的行动,包括的东西,如文件操作。 不过,我真的在努力寻找一个很好的资源,了解我怎么可能去使用.policy文件解决我的问题。

问题Summarisation:

1)是否有可能优于那些我所提到的任何其他办法?

2)采用了SecurityManager这是可能的吗? 难道我错过了我应该如何实际实施这样的做法?

3)这可能使用的策略文件? 在那里我已经错过了在这方面的任何好的资源?

我真的不adversed到我需要投资在实现这个-我只是不能确定我应该怎么正确地对待它的辛勤工作的量。 我还非常缺乏良好的资源足够的教我,我提到的两种可能的方法,让我实现它自己。 首先,我不害怕在必要显著阅读!

感谢您的任何帮助,你可以给,在前进。

--------------解决方案-------------

下面是如何使用策略文件做到这一点。

创建可以与特权行为的Java文件:

package egPriv;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;

public class PrivCat {
/** Cat a file with no privileges */
public void cat(String file) throws IOException {
cat(new FileReader(file));
}

private void cat(Reader r) throws IOException {
int c;
while( (c = r.read()) != -1 ) {
System.out.print((char) c);
}
r.close();
}

/** Cat a file WITH privileges */
public void catPriv(final String file) throws IOException {
Reader r;
try {
r = AccessController.doPrivileged(new PrivilegedExceptionAction<Reader>() {
public Reader run() throws IOException {
return new FileReader(file);
}
});
} catch (PrivilegedActionException e) {
throw (IOException) e.getCause();
}
cat(r);
}
}

创建demonstating常规文件

package eg;

import egPriv.PrivCat;

import java.io.IOException;

public class Cat extends PrivCat {
public static void main(String[] args) throws IOException {
Cat eg2 = new Cat();
System.out.println("Processing with privilege:");
eg2.catPriv(args[0]);

System.out.println("Processing normally");
eg2.cat(args[0]);
}
}

创建sample.policy文件:

/* anyone can read write and execute within current working dir */
grant {
permission java.io.FilePermission "${user.dir}", "read,write,execute";
};

grant {
permission java.io.FilePermission "${user.dir}/*", "read,write,execute,delete";
};

/* Only code from this jar can work outside of CWD */
grant codebase "file:egPriv.jar" {
permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute,delete";
};

编译并测试:

jar cvf egPriv.jar egPriv
jar cvf eg.jar eg

echo 'Restricted' > ..\file.txt
java -cp eg.jar;egPriv.jar -Djava.security.manager -Djava.security.policy=sample.policy eg.Cat ..\file.txt

echo 'Open' > file.txt
java -cp eg.jar;egPriv.jar -Djava.security.manager -Djava.security.policy=sample.policy eg.Cat file.txt

分类:java的 时间:2012-01-01 人气:0
分享到:

相关文章

  • 难道Java的IO有一个最大的文件名长度? 2012-06-22

    不同的操作系统有不同的文件名长度最多. 处理文件时,没有Java的对文件名长度的限制? --------------解决方案------------- Java有没有最大文件名长度,但显然对于字符串最大长度的限制(这是数组的最大长度,即Integer.MAX_VALUE的). 也许有些JVM上有一个下限,但我从来没有碰到这样的问题(我几乎可以肯定这将是对于Java规范的错误),当然操作系统可以有一个. 我做了一个测试,得到了〜1150​​个字符最大长度. if (!destFile.exists

  • filepicker.io政策不工作 2012-07-21

    我有以下PHP产生. $policy = base64_encode(json_encode(array("maxsize"=>1, 'path'=>'tmp/', 'expiry'=>strtotime("+5 minutes"), 'extension'=>'.pdf', 'call'=>array('pick','store')))); $sig = hash_hmac('sha256', $policy, FILEPICKER_

  • Java的IO实现Unix / Linux的“尾-f” 2012-07-11

    我想知道的技术和/或库用什么来实现Linux命令"尾-f"的功能. 我基本上是寻找附加/替换java.io.FileReader下降. 客户端代码可能是这个样子: TailFileReader lft = new TailFileReader("application.log"); BufferedReader br = new BufferedReader(lft); String line; try { while (true) { line= br.readL

  • Java的IO异常醒目 2012-10-10

    我得到这个错误: bill value:$ 0.10 bill value: $0.05 bill value: $0.01 bill value: $100.00 Exception in thread "main" java.io.EOFException at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source) at java.io.ObjectInputStream.readObject

  • Java的IO丑陋的try-finally块 2012-10-12

    有没有治疗的不那么丑陋的方式close()例外,关闭两个流,那么: InputStream in = new FileInputStream(inputFileName); OutputStream out = new FileOutputStream(outputFileName); try { copy(in, out); } finally { try { in.close(); } catch (Exception e) { try { // event if in.close fail

  • Java的IO异常 - 硒GRID 2012-12-05

    我是新来的网格. 我能够启动集线器和几个RC服务器,但是当我想我的测试用例跑,我越来越典型的Java IO错误. 下面是对RC服务器中的一个错误堆栈. <error> [java] java.lang.RuntimeException: java.io.IOException: Cannot run program "/usr/lib/firefox-3.0.19/firefox": java.io.IOException: error=12, Cannot allocat

  • Java的IO,从文件和打印到2D字符数组阅读 2013-03-29

    所以,我正在为我的游戏设计类构建一个吃豆子克隆的任务,这将是整个学期. 目前,我有一个文本文件,它是吃豆子迷宫 见下文 : WWWWWWWWWWWWWWWWWWWWWWWWWWWW W............WW............W W.WWWW.WWWWW.WW.WWWWW.WWWW.WW*WWWW.WWWWW.WW.WWWWW.WWWW*W W.WWWW.WWWWW.WW.WWWWW.WWWW.W W..........................W W.WWWW.WW.WWWWW

  • 在处理Java的IO异常 2013-07-05

    基本上,我想打开一个文件,读取一些字节,然后关闭该文件. 这是我想出了: try { InputStream inputStream = new BufferedInputStream(new FileInputStream(file)); try { // ... inputStream.read(buffer); // ... } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }

  • Java的IO给我一个错误 2013-09-23

    当我运行下面的代码,我得到一个错误. package practicing.io; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class JavaIO { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOu

  • ReadLong和WriteLong方法Java.Random.IO 2013-11-13

    我想写长使用Java命令随机文件IO如下: fstreamOut = new FileOutputStream(new File("C:\\Basmah","dataOutput.7"),true); DataOutputStream out=new DataOutputStream(fstreamOut); Long p= Long.parseLong(longNumberInString ); // Number of digits for this long

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.881 (s). 10 q(s)