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`(安全管理器)是一个重要的安全组件,它允许开发者对应用程序的安全性进行精细控制。`SecurityManager`是Java虚拟机(JVM)的一部分,用于实施一套安全策略,以防止代码执行...
在Java中,安全管理器(SecurityManager)是控制权限的核心组件。如果一个应用程序设置了安全管理器,那么所有可能引起安全问题的操作都会被检查,看是否拥有执行该操作的相应权限。如果没有,将会抛出...
当`SecurityManager`存在时,每次进行敏感操作(如打开网络连接、读写文件或执行系统命令)前,Java虚拟机(JVM)都会调用`checkPermission`方法来验证是否有执行该操作的权限。如果权限不足,`SecurityManager`将抛...
Java 安全设置的工作原理可以分为两个阶段:第一阶段是 ClassLoader 将类加载到内存中,第二阶段是 SecurityManager 检查类的权限。ClassLoader 负责将类加载到内存中,而 SecurityManager 负责检查类的权限,确保类...
此外,`java.net.URL`类可以用于打开和读取URL资源,而`java.io`和`java.nio`则用于数据的读写操作。 4. **JavaScript引擎**:为了执行网页中的JavaScript代码,Java浏览器需要一个JavaScript引擎。Java可以使用如...
URLConnection是Java中用于打开与URL所指向资源进行连接的类。通过使用URLConnection,开发者可以发送请求并接收响应,甚至可以获取URL指向资源的头信息。API(应用程序接口)则是一种规范,它定义了访问某些数据或...
在Java中,可以通过安全管理器(SecurityManager)来实施细粒度的权限控制,限制程序对某些系统资源的访问,防止被恶意绕过。 5. **用户界面设计**: 锁屏软件通常包含用户登录界面,用户需要输入正确的密码才能解锁...
3. java.lang.SecurityManager:这个类是安全管理器的实现,可以通过setSecurityManager方法设置。它监控并控制应用程序的行为,执行权限检查。 三、实现 1. 权限控制:在Java中,权限是由Permission对象表示的,...
4. **修改Applet代码**:在Applet的`init()`或`start()`方法中,使用`SecurityManager`和`Policy`类检查当前的权限。如果发现需要的权限未被授予,可以提示用户接受更高级别的权限。 5. **用户交互**:在浏览器中...
使用vi编辑器打开/etc/profile文件,在文件末尾添加以下行来设置JAVA_HOME、JRE_HOME、PATH和CLASSPATH: ``` export JAVA_HOME=/opt/jdk1.6.0_25 export JRE_HOME=$JAVA_HOME/jre export PATH=$JAVA_HOME/bin:...
#### 一、Java中调用`System.loadLibrary();` 在Android应用开发中,经常需要调用本地代码(通常是C或C++编写)来实现某些功能,比如高性能计算、硬件访问等。为了实现这一点,开发者通常会使用`System.loadLibrary...
1. **安全管理器(SecurityManager)**:这是Java安全模型的中心组件,它可以控制程序的某些敏感操作,比如读写文件、打开网络连接、访问系统属性等。当一个应用程序试图执行被限制的操作时,安全管理器会进行检查,...
- 打开浏览器,访问 `http://localhost:8080/hello`,如果一切正常,应该能看到 “Hello, Spring Boot!” 的输出。 #### 二、Spring Security 替代方案:Shiro 在 Spring Boot 中,除了使用官方推荐的 Spring ...
- **OpenEntityManagerInViewFilter**:此过滤器使得`EntityManager`能够在视图渲染过程中保持打开状态。这是Spring针对Hibernate的非JPA实现使用的`OpenSessionInViewFilter`的JPA版本。 #### 2. ...
Apache Shiro 是一款强大的安全性框架,它简洁且易于集成到各种Java应用程序中,无论是传统的Java SE环境还是现代的Java EE环境。Shiro可以提供认证、授权、加密和会话管理等功能,使开发者能够轻松地处理常见的安全...
<property name="securityManager" ref="securityManager"/> /login = authc /logout = logout /authenticated = authc /** = kickout,user,sysUser ``` 这样配置后,除了登录和登出...