当前位置: 首页 > news >正文

Java安全管理器 - SecurityManager

什么是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

相关文章:

  • R语言从专家到小白
  • 【C++】<STL部分>:STL标准模板库概要
  • ubuntu 20.04 编译和运行SC-LeGo-LOAM
  • C语言基础18
  • 关于可变形卷积
  • STM32单片机入门学习——第24节: [8-2]DMA数据转运DMA+AD多通道
  • Debian 12 服务器搭建Beego环境
  • 汽车BMS技术分享及其HIL测试方案
  • 计算机网络-子网划分试题七
  • PyCharm2024.3.5专业版解决Conda executable is not found问题
  • 信息学奥赛一本通 1929:【04NOIP普及组】火星人 | 洛谷 P1088 [NOIP 2004 普及组] 火星人
  • MIME类型
  • Android中的libs.versions.toml文件
  • Sentinel核心源码分析(下)
  • Python----PaddlePaddle(深度学习框架PaddlePaddle,概述,安装,衍生工具)
  • 红宝书第三十一讲:通俗易懂的包管理器指南:npm 与 Yarn
  • 武汉迅狐科技:AI赋能企业营销,打造智能获客新范式
  • 【软件系统架构】分布式架构
  • 六种蝴蝶昆虫分类-图像分类数据集
  • 【力扣hot100题】(067)寻找两个有序数组的中位数
  • wordpress 更新主题/优化大师的三大功能
  • 做筹款的网站需要什么资质/天津百度关键词推广公司
  • 独立设计购物网站/电脑培训学校课程
  • 怎么做网站黑链/太原百度seo排名软件
  • 好网站你知道/网络营销有哪些功能
  • 商户如何做h5商城网站是什么意思/百度公司推广