Java安全管理器 - SecurityManager

发布于:2025-04-08 ⋅ 阅读:(34) ⋅ 点赞:(0)

什么是Java安全管理器?

Java安全管理器是Java提供的保护JVM和程序安全的机制,它能限制用户的代码对文件、内存、资源、网络的操作和访问,防止恶意代码入侵程序。常用来控制用户提交的代码对各种资源的访问权限,防止用户恶意提交代码导致系统崩溃或数据泄露。

Java安全管理器的优缺点

优点:

权限控制灵活

实现简单

缺点:

控制粒度太细,难以精细化控制

本质上是在程序上做控制,没有深入到系统的层面

如何使用Java安全管理器?

创建安全管理器

新建一个自定义的安全管理器类,继承SecurityManager类,再重写父类中的方法实现各种权限的控制,如:

1、所以权限放开



import java.security.Permission;

/**
 * 默认安全管理器
 */
public class DefaultSecurityManager extends SecurityManager {

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

2、所有权限拒绝



import java.security.Permission;

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

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

3、限制读权限

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

4、限制写权限

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

5、限制执行文件权限

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

6、限制网络权限

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

指定安全管理器

创建完自定义的安全管理器之后,我们需要再程序中指定使用它,如:

import cn.hutool.core.io.FileUtil;

import java.nio.charset.Charset;

/**
 * 测试安全管理器
 */
public class TestSecurityManager {

    public static void main(String[] args) {
        System.setSecurityManager(new MySecurityManager());
        FileUtil.writeString("aa", "aaa", Charset.defaultCharset());
    }
}

也可以通过命令行的方法指定,如:

java -Dfile.encoding=UTF-8 -cp %s;%s -Djava.security.manager=MySecurityManager Main


网站公告

今日签到

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