Java程序访问权限控制(policy文件)

本文探讨了Java程序如何通过配置`java.policy`文件进行访问权限控制。该文件通常位于`%JAVA_HOME%/jre/lib/security/`下。通过实例`JavaPolicyTest.java`,展示了在C:/TEMP目录下运行时如何受此文件影响。
摘要由CSDN通过智能技术生成
当你想对Java程序进行权限控制时,可以考虑启用SecurityManager安全管理器,并配置XX.policy文件来达到你想的效果。(想对安全管理器进一步了解,可以阅读《深入Java虚拟机》)
1.启动SecurityManager开关
默认情况下,JVM是不启动安全检查的,所以要想让程序在沙箱中运行,必须将开关打开。打开的方式有两种,一种是在启动运行中追加JVM参数 -Djava.security.manager,还有一种方式是在程序中直接设置:System.setSecurityManager(new SecurityManager());,这两种方式是等价的。
2.JVM自带的java.policy文件

java.policy文件位于%JAVA_HOME%/ jre/lib/security/下,默认内容如下:

// Standard extensions get all permissions by default
 
grant codeBase "file<img src="%5C%22static/image/smiley/default/shy.gif%5C%22" smilieid="\"8\"" alt="\"\"" border="\"0\"">{
  {java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};
 
// default permissions granted to all domains
 
grant { 
        // Allows any thread to stop itself using the java.lang.Thread.stop()
        // method that takes no argument.
        // Note that this permission is granted by default only to remain
        // backwards compatible.
        // It is strongly recommended that you either remove this permission
        // from this policy file or further restrict it to code sources
        // that you specify, because Thread.stop() is potentially unsafe.
        // See "http://java.sun.com/notes" for more information.
        permission java.lang.RuntimePermission "stopThread";
 
        // allows anyone to listen on un-privileged ports
        permission java.net.SocketPermission "localhost:1024-", "listen
Java提供了一套权限控制机制,可以对用户访问服务器文件进行权限控制。 具体的实现方式是: 1. 定义文件访问权限对象(Permission):通过定义文件访问权限对象(例如FilePermission),来描述用户对文件访问的权限。权限对象包括文件路径、访问方式等信息。 2. 创建权限集合(PermissionCollection):通过创建权限集合,将多个权限对象合并到一个集合中,方便进行权限控制。 3. 配置安全策略文件:在安全策略文件中,可以定义用户的访问权限,例如指定某个用户可以读取某个文件的权限。 4. 运行时进行权限检查:在程序运行时,通过SecurityManager来进行权限检查,检查用户是否具有访问文件的权限。 下面是一个简单的例子,展示了如何对用户访问服务器文件进行权限控制: ```java import java.io.FilePermission; import java.security.AccessControlException; import java.security.AccessController; import java.security.PermissionCollection; public class TestFilePermission { public static void main(String[] args) { // 定义文件访问权限 FilePermission filePermission = new FilePermission("/path/to/file.txt", "read"); // 创建权限集合 PermissionCollection permissionCollection = filePermission.newPermissionCollection(); permissionCollection.add(filePermission); // 配置安全策略文件 System.setProperty("java.security.policy", "file:/path/to/security.policy"); // 运行时进行权限检查 try { AccessController.checkPermission(filePermission); System.out.println("User has permission to access the file."); } catch (AccessControlException e) { System.out.println("User does not have permission to access the file."); } } } ``` 在上述例子中,首先定义了用户对文件访问权限,然后将其添加到权限集合中。然后,在安全策略文件中配置了用户的访问权限,最后在程序运行时,通过AccessController来进行权限检查。如果用户具有访问文件的权限,则输出"User has permission to access the file.",否则输出"User does not have permission to access the file."。 总之,Java提供了一套完整的权限控制机制,可以对用户访问服务器文件进行细粒度的权限控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值