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的作用.
分享到:
相关推荐
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....
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....
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$...
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$...
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一般的做法创建org.activiti.engine.impl.scripting.ScriptingEngines的实现,该实现重写受保护的方法my.seoj.activiti.sandbox.script.Main.PrivilegedScriptingEngines....
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 中,lineSeparator 变量用于存储行分隔符,它的值是通过 java.security.AccessController.doPrivileged 方法获取的。 BufferedWriter 的使用场景包括日志记录、文件写入、网络传输等场景。在这些...
在Java中,可以通过`java.security.PrivilegedAction`和`java.security.AccessController.doPrivileged()`方法实现。 10. **Java标准权限(Standard Permissions)**:Java提供了一些预定义的权限,如`All...
3. **编写受保护代码**:使用`AccessController.doPrivileged()`方法来包裹可能需要特殊权限的代码块。 4. **权限检查**:在需要的地方插入`checkPermission()`调用来检查当前线程是否具有执行特定操作的权限。 5. *...
6. **代码实现**:在实际代码中,使用`AccessController.doPrivileged()`方法来执行需要特定权限的代码块。这样,即使在没有权限的环境中,也可以在受保护的上下文中执行这些操作。 在文档"权限实现实例.doc"中,...
新的变体AccessController.doPrivileged使代码能够断言其特权的子集,而不会阻止堆栈的完整遍历来检查其他权限 更强大的基于密码加密的算法 JSSE服务器中的SSL / TLS服务器名称指示(SNI)扩展支持 支持AEAD算法...
例如,代码片段中展示了如何使用`AccessController.doPrivileged`方法来获取磁盘列表: ```java public String getDiskList() { return (String) AccessController.doPrivileged( new PrivilegedAction() { ...
8. **ZipInputStream**:这段代码涉及到权限控制,使用了 `AccessController.doPrivileged`。在 [1] 处,关键字应该是 `final`,确保 `copy` 文件对象不会被修改。正确选项为 A(final)。 9. **平安编程**:在处理...
AccessController.doPrivileged(new java.security.PrivilegedAction() { public Void run() { put("SSLContext.TLS", "org.apache.harmony.xnet.provider.jsse.SSLContextImpl"); put("Alg.Alias.SSLContext....
代码中使用了`AccessController.doPrivileged`,这涉及到Java的安全模型,用于在特权上下文中执行代码,此处填入`final`关键字可能是为了确保`copy`变量不会被改变。 9. **安全编程**:外部输入应进行验证,防止...
at java.security.AccessController.doPrivileged(Native Method) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) at...
- 使用AccessController.doPrivileged()进行安全敏感操作,此处关键字可能是`final`,用于确保变量不可修改。 9. **安全编程**: - 对外部输入的数据必须进行验证,防止注入攻击。 - 不允许不受信任的代码直接...
如果它的一个方法调用了`SecurityManager`进行特权检查或其他敏感操作,例如`AccessController.doPrivileged`等,则应确保此方法被标记为final,否则可能被恶意使用者通过重载此方法,跳过预设的检测逻辑。...