Java安全管理器-(Security Manager)

发布于:2025-06-16 ⋅ 阅读:(23) ⋅ 点赞:(0)

最近做项目的时候,为了保证项目程序的安全性,学习了Java提供的一种安全机制,用于控制Java应用程序权限的工具类SecurityManager。

1.基本概念

Java安全管理器(SecurityManager)是Java平台提供的一种安全机制,用于控制Java应用程序的权限。它通过检查代码来源和权限设置,限制代码对系统资源的访问。

2.安全管理器的作用

安全管理器主要用于防止恶意代码对系统资源的未授权访问。例如限制文件读写、网络连接、系统属性修改等操作。

3.使用安全管理器

有三种常见的使用安全管理器的方法:

1.使用命令行参数启用安全管理器:

java -Djava.security.manager -Djava.security.policy=myPolicy.txt MyApp
 

2.在代码中动态启用:

System.setSecurityManager(new SecurityManager());
 

3.也就是最常用的自定义安全管理器,只需要要继承SecurityManager类就可以自定义安全管理类:

放开所有权限



public class DefaultSecurityManager extends SecurityManager {

    // 检查所有的权限
    @Override
    public void checkPermission(Permission perm) {
        System.out.println("默认不做任何限制");
        System.out.println(perm);
        // super.checkPermission(perm);
    }
}

限制所有权限 


/**
 * 禁用所有权限安全管理器
 */
public class DenySecurityManager extends SecurityManager {

    // 检查所有的权限
    @Override
    public void checkPermission(Permission perm) {
        throw new SecurityException("权限异常:" + perm.toString());
    }
}

 限制读文件权限

@Override
public void checkRead(String file) {
    throw new SecurityException("checkRead 权限异常:" + file);
}

 限制写文件权限

@Override
public void checkWrite(String file) {
    throw new SecurityException("checkWrite 权限异常:" + file);
}

限制执行文件权限

@Override
public void checkExec(String cmd) {
	throw new SecurityException("checkExec 权限异常:" + cmd);
}

限制网络连接权限

@Override
public void checkConnect(String host, int port) {
    throw new SecurityException("checkConnect 权限异常:" + host + ":" + port);
}

 4.安全管理器的优缺点

优点:实现操作很简单,而且权限控制很灵活

缺点:如果权限限制比较严格,那么就需要自己去判断哪些文件和包允许读写,精细化控制很困难,某些框架或库可能绕过安全管理器,导致防护失效。


网站公告

今日签到

点亮在社区的每一天
去签到