Java安全管理器 - SecurityManager

打印 上一主题 下一主题

主题 1953|帖子 1953|积分 5859

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
什么是Java安全管理器?

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

Java安全管理器的优缺点

优点:

权限控制灵活
实现简朴
缺点:

控制粒度太细,难以精细化控制
本质上是在程序上做控制,没有深入到系统的层面

如何使用Java安全管理器?

创建安全管理器

新建一个自定义的安全管理器类,继续SecurityManager类,再重写父类中的方法实现各种权限的控制,如:
1、以是权限放开
  1. import java.security.Permission;
  2. /**
  3. * 默认安全管理器
  4. */
  5. public class DefaultSecurityManager extends SecurityManager {
  6.     // 检查所有的权限
  7.     @Override
  8.     public void checkPermission(Permission perm) {
  9.         System.out.println("默认不做任何限制");
  10.         System.out.println(perm);
  11.         // super.checkPermission(perm);
  12.     }
  13. }
复制代码
2、所有权限拒绝
  1. import java.security.Permission;
  2. /**
  3. * 禁用所有权限安全管理器
  4. */
  5. public class DenySecurityManager extends SecurityManager {
  6.     // 检查所有的权限
  7.     @Override
  8.     public void checkPermission(Permission perm) {
  9.         throw new SecurityException("权限异常:" + perm.toString());
  10.     }
  11. }
复制代码
3、限定读权限
  1. @Override
  2. public void checkRead(String file) {
  3.     throw new SecurityException("checkRead 权限异常:" + file);
  4. }
复制代码
4、限定写权限
  1. @Override
  2. public void checkWrite(String file) {
  3.     throw new SecurityException("checkWrite 权限异常:" + file);
  4. }
复制代码
5、限定执行文件权限
  1. @Override
  2. public void checkExec(String cmd) {
  3.         throw new SecurityException("checkExec 权限异常:" + cmd);
  4. }
复制代码
6、限定网络权限
  1. @Override
  2. public void checkConnect(String host, int port) {
  3.     throw new SecurityException("checkConnect 权限异常:" + host + ":" + port);
  4. }
复制代码
指定安全管理器

创建完自定义的安全管理器之后,我们需要再程序中指定使用它,如:
  1. import cn.hutool.core.io.FileUtil;
  2. import java.nio.charset.Charset;
  3. /**
  4. * 测试安全管理器
  5. */
  6. public class TestSecurityManager {
  7.     public static void main(String[] args) {
  8.         System.setSecurityManager(new MySecurityManager());
  9.         FileUtil.writeString("aa", "aaa", Charset.defaultCharset());
  10.     }
  11. }
复制代码
也可以通过命令行的方法指定,如:
  1. java -Dfile.encoding=UTF-8 -cp %s;%s -Djava.security.manager=MySecurityManager Main
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表