SecurityManager在Java中被用来检查应用程序是否能访问一些有限的资源,例如文件、套接字(socket)等等。它可以用在那些具有高安全性要求的应用程序中。通过打开这个功能, 我们的系统资源可以只允许进行安全的操作。
当Java虚拟机启动时,它首先通过检查系统属性java.security.manager来确定SecurityManager是否打开了。如果打开了,那么SecurityManager实例将被创建,它可以被用来检查不同的权限。默认情况下,SecurityManager是关闭的,但是这里有一些方法可以打开SecurityManager。
1. 指定 -Djava.security.manager
当我们运行一个程序,我们可以指定JVM命令 -Djava.security.manager 使SecurityManager运行。
1
|
java -Djava.security.manager <class_name> |
这是打开SecurityManager最常见的方式。java.security.manager是一个系统属性,您可以使用System.getProperty(“java.security.manager”)检查该系统属性是否被设置。
在 这里,你可能会认为,我们可以使用System.setProperty(“java.security.manager”)打开 SecurityManager,但是并不能这么设置。因为先前我们提到,这个系统属性是在当JVM启动时进行检查的。如果我们用程序手动设置该属性,并 不能奏效,因为JVM已经启动了,已经过了检查系统属性的步骤了。
2. 通过程序打开SecurityManager
现在,如果我们真的想通过我们的程序打开SecurityManager,我们也能做到。 System类中有一个叫 setSecurityManager() 的方法可以做到这一点。这个方法的参数是一个SecurityManager实例。
1
2
|
SecurityManager sm= new SecurityManager();
System.setSecurityManager(sm); |
通过这个,我们可以打开SecurityManager.。如果之后我们想要关闭SecurityManager, 我们该怎么做? 下面的代码能做到吗?
1
2
3
4
|
SecurityManager sm=System.getSecurityManager(); if (sm!= null ){
System.setSecurityManager( null );
} |
上面的代码只有你在位于${JAVA_HOME}/lib/security目录下或者其他指定目录下的java.policy文件中指定了一个权限才会奏效。 这个权限是:
1
|
permission java.lang.RuntimePermission "setSecurityManager"; |
上面的一行将被用来允许代码设置SecurityManager
3. 在build文件中
我们想打开SecurityManager,如果我们使用Ant构建应用程序时, 我们可以加上
1
|
< sysproperty key = "java.security.manager" value = "" />
|
我们通过Ant创建单元测试的时候非常有用。
相关推荐
安全解决Java中设计缺陷的SecurityManager实现
NULL 博文链接:https://lanhuidong.iteye.com/blog/1090395
3.10 java.lang.SecurityManager 51 3.10.1 使用安全管理器的实例 51 3.10.2 JDK1.2中没有改变的API 52 3.10.3 JDK1.2中禁用的方法 53 3.11 java.security.AccessController 56 3.11.1 AceessController的界面设计 ...
3.10 java.lang.SecurityManager 51 3.10.1 使用安全管理器的实例 51 3.10.2 JDK1.2中没有改变的API 52 3.10.3 JDK1.2中禁用的方法 53 3.11 java.security.AccessController 56 3.11.1 AceessController的界面设计 ...
创建安全管理器利用安全管理器public static void main(String args[]){方法调用此方法时,返回所有新创建的线程实例化后所在的线
主要威胁来自外部,例如,精心设计的输入会触发本来值得信赖的库中的意外行为。 我们需要保护代码不被颠覆。 默认方法的问题在于,最容易受到攻击的类(如调用堆栈开头的类,例如应用程序服务器本身)也是必须授予...
理解 Shiro 的核心概念:Subject、SecurityManager、Realm 等。 身份认证: 理解身份认证的概念和流程。 认识 AuthenticationToken 和 AuthenticationInfo。 学习如何自定义 Realm 来实现不同的身份认证方式。 授权...
下面小编就为大家带来一篇浅谈shiro的SecurityManager类结构。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。 Java 语言是可...
在现代的Java Web应用开发中,使用SSM(Spring + Spring MVC + MyBatis)框架组合是一种非常流行的做法。SSM框架提供了一种轻量级的方式来构建应用程序,其中Spring负责管理应用程序的生命周期和依赖注入,Spring ...
这是使用Scala编写的Java SecurityManager对沙盒代码的实现。 它从Jens Nordahl的汲取了灵感,尽管花了点时间才能看清参数是什么。 它由一个Main类组成,该类启动一个沙箱,然后从该沙箱中启动一个脚本。 跑步 ...
java对通过网络下载的类具 有一个安全防范机制(类classloader),如分配不同的名字空间以防替代本地的同名类 、字节代码检查,并提供安全管理机制(类securitymanager)让java应用设置安全哨兵 。多元性,作为现下...
使用详情见 博客 利用ScriptEngineManager执行js的RSA加密 http://blog.csdn.net/userwyh/article/details/52345718
More Security Topics <br>Signed Applets Writing a Security Manager Appendix A: Security and Permissions Appendix B: Classes, Methods, and Permissions Appendix C: SecurityManager ...
适用于OpenIDConnect的Flask-AppBuilder SecurityManager 包装,公开了可与任何Flask-AppBuilder应用一起使用的SecurityManager 。 它将允许您的用户使用OpenIDConnect提供程序(例如Auth0,Okta或Google Apps)...
Requirements: (Only JDK 11.0.X 64 bit (17 and 18 not contains a java.lang.SecurityManager class needed for sandboxing)), 64-bit OS mod by CXV Press Generate a Key in welcome window - fix all ...
主要针对计算机相关专业的正在做毕设的学生和需要项目实战的Java学习者。 也可作为课程设计、期末大作业。包含:项目源码、数据库脚本、项目说明等,该项目可以直接作为毕设使用。 也可以用来学习参考借鉴!
下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。 1. System.exit(0)会跳过finally块的执行 System.setSecurityManager(new ...
三个核心组件:Subject, SecurityManager 和 Realms. Subject:即"当前操作用户"。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着"当前...