当前位置: 首页 > 知识库问答 >
问题:

一种java安全管理器,除了对系统进行一次检查调整外,它与任何安全管理器都不相同。出口

羊舌勇
2023-03-14

我不太精通java安全管理,因此想确认我的理解:

我有一个java进程,它随机停止(关闭钩子运行),即使没有人杀死它的痕迹。结果我决定安装一个安全管理器,并覆盖check Exit(int状态),以确保停止的原因不是调用System.exit()的东西。基本上我是这样写的:

            System.setSecurityManager(new SecurityManager() {
                @Override
                public void checkExit(int status) {
                    Thread.dumpStack();
                    super.checkExit(status);
                }
            });

我希望我的程序能像往常一样运行,唯一的变化是,如果系统崩溃,堆栈跟踪将被转储。调用了exit()。我发现事实并非如此。它无法从以下安全异常开始:

java.security.AccessControlException: access denied ("java.util.PropertyPermission" "config" "read")
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) ~[na:1.8.0_74]
        at java.security.AccessController.checkPermission(AccessController.java:884) ~[na:1.8.0_74]
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) ~[na:1.8.0_74]
        at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1294) ~[na:1.8.0_74]
        at java.lang.System.getProperty(System.java:717) ~[na:1.8.0_74]
        at Main.main(Main.java:161) ~[na:na]

SecurityManager似乎没有复制默认行为,在阅读了相关内容后,它似乎在${JAVA_HOME}/jre/lib/security/JAVA下应用了默认策略。政策,限制性很强。

当没有安全管理器时,Java真正的默认行为是什么?是“允许一切”,还是发生了其他事情?

如果我想复制默认行为,除了上面的单一调整之外,作为安全管理器,我应该安装什么?

关于最后一点,我可以看到系统。setSecurityManager()实际上需要一个java实例。lang.SecurityManager,这意味着我不得不使用该实现(它依赖于策略文件)。重写该类中的方法以复制无安全管理器的实际默认行为的最有效方法是什么?

编辑:根据下面的讨论,这似乎可以做到

            System.setSecurityManager(new SecurityManager() {
                @Override
                public void checkPermission(Permission perm) {
                    return; // no security manager behaviour
                }

                @Override
                public void checkPermission(Permission perm, Object context) {
                    return; // no security manager behaviour
                }

                @Override
                public void checkExit(int status) {
                    Thread.dumpStack();
                    super.checkExit(status);
                }
            });

共有1个答案

赵镜
2023-03-14

你很困惑。

SecurityManager似乎没有复制默认行为,在阅读了它之后,它似乎应用了${JAVA_HOME}/jre/lib/Security/java.policy下的默认策略,这是非常限制性的。

SecurityManager的默认行为是遵守Javadoc中规定的合同,默认允许的情况除外。策略文件,这确实是非常严格的。在没有安全经理的情况下,默认行为是允许任何事情。

当没有安全管理器时,Java的真正默认行为是什么?是允许一切吗?

是的。

还是有其他事情发生?

没有。

如果我想复制默认行为,除了上面的单一调整之外,作为安全管理器,我应该安装什么?

正是这样做的安全管理器。如果您希望它除了您实现的一个重写之外什么都不强制,您必须为它的所有其他方法提供空重写。

 类似资料:
  • 问题内容: 关于Java安全性的这篇文章说: 每当要进行危险的操作时,Java库中的代码都会向安全管理器咨询。 那么,这到底是什么意思?说,如果我已经实现了自己的安全管理器并为整个JVM启用了它。现在,java运行时是否针对每个Java调用(例如System.out.println()等)咨询我的securitymanager,还是仅针对诸如System.exit(),文件操作等api调用进行咨询

  • 即使我在Mule EE上运行,Mule Security Manager依赖性也没有得到解决。代码如下: http://www.mulesoft.org/schema/mule/spring-security http://www.mulesoft.org/schema/mule/spring-security/current/mule-spring-security.xsd http://www

  • 有没有办法给管理servlet增加登录安全性? 似乎在V0.7中,您可以将以下两个添加到您的yaml文件中: 然而,我在最新版本(0.9.2)中尝试了,它给我一个错误,说:server.yaml有一个错误: 这是我拥有的:

  • 1. 前言 安全管理是软件系统必不可少的的功能。根据经典的 “墨菲定律”—— 凡是可能,总会发生。如果系统存在安全隐患,最终必然会出现问题。 本节就来演示下,如何使用 Spring Boot + Spring Security 开发前后端分离的权限管理功能。 2. Spring Security 用法简介 作为一个知名的安全管理框架, Spring Security 对安全管理功能的封装已经非常完

  • 我有一个WildFly 10.1环境,我在其中使用以下配置启动容器: 当我没有指定参数时,实例启动,测试执行得很好;但是,当我使用安全管理器使用安全管理参数触发时,我得到以下异常: 我需要使用安全管理器来执行我的Arquillian测试用例,我不清楚在我的配置中会遗漏什么。 相关的毕业生图书馆是:

  • 我正在寻找沙盒Java 8的Nashorn javascript引擎。我已经发现了--no-java标志,这很有帮助,但我还发现了以下链接,其中指出需要“在启用SecurityManager的情况下运行”:http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-September/002010.html 我还没有找到留档说明如何与Nashor