小编Pau*_*ric的帖子

AccessController用法

我正在尝试了解java安全性和AccessController.doPrivileged()用法的基础知识我从一个示例程序开始

import java.security.AccessController;
import java.security.PrivilegedAction;
public class AccessSystemProperty {
   public static void main(String[] args) {
     System.out.println(System.getSecurityManager());
       AccessController.doPrivileged(
        new PrivilegedAction<Boolean>(){
           public Boolean run(){
               System.out.println(System.getProperty("java.home"));
               return Boolean.TRUE;
           }
        }
       );
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试使用默认安全管理运行上面的代码我得到AccessControlException我的stacktrace是

C:\>java -Djava.security.manager AccessSystemProperty
java.lang.SecurityManager@923e30
Exception in thread "main" java.security.AccessControlException: access denied (
java.util.PropertyPermission java.home read)
        at java.security.AccessControlContext.checkPermission(Unknown Source)
        at java.security.AccessController.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPermission(Unknown Source)
        at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
        at java.lang.System.getProperty(Unknown Source)
        at AccessSystemProperty$1.run(AccessSystemProperty.java:9)
        at AccessSystemProperty$1.run(AccessSystemProperty.java:8)
        at java.security.AccessController.doPrivileged(Native Method)
        at AccessSystemProperty.main(AccessSystemProperty.java:6)
Run Code Online (Sandbox Code Playgroud)

请帮助我清楚地了解一下

1)什么时候需要使用AccessController.doPrivileged()?(如果存在SecurityManager,我们使用AccessController.doPrivileged - 为什么这在上面的示例中失败)

2)使用AccessController和PrivilegedAction获得的真正优势是什么?

3)我们是否需要上述示例的自定义策略文件才能工作?

谢谢,

保罗

java security

25
推荐指数
1
解决办法
1万
查看次数

合并操作中的HashMap null检查

为什么HashMap合并正在对值进行空值检查.HashMap支持null键和null值.所以有人可以告诉为什么需要对合并进行null检查?

@Override
public V merge(K key, V value,
               BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
    if (value == null)
        throw new NullPointerException();
    if (remappingFunction == null)
        throw new NullPointerException();
Run Code Online (Sandbox Code Playgroud)

由于这个原因,我无法Collectors.toMap(Function.identity(), this::get)用于收集地图中的值

java-8 collectors

6
推荐指数
2
解决办法
795
查看次数

标签 统计

collectors ×1

java ×1

java-8 ×1

security ×1