Java安全——存取控制器

news/2025/2/22 15:53:33/

Java安全

存取控制器

Java安全中的存取控制器是一种技术,用于控制访问应用程序中的资源。它的基本思想是允许或拒绝特定用户对系统资源的访问。存取控制器包括四个关键部分: 主体(subject), 权限(permission), 对象(object)和存取控制策略(access control policy)。

主体是指被访问的实体。这些实体可以是人员、进程、应用程序或其他系统资源。权限是指用户可以执行的操作。例如,可以授予用户读取、写入或运行资源的权利。对象是指需要保护的资源。这些资源可以包括文件、数据库、网络、Web服务等。存取控制策略是指用于确定用户是否有权访问资源的规则集合。策略可以基于多种因素,例如用户身份、权限级别、时间、位置和资源类型等。

Java安全中的存取控制器提供了一种有效的方式来保护系统资源和数据免受未经授权的访问。其主要应用包括保护网络、应用程序和数据库等。Java技术可使用存取控制器来确保系统的安全性和完整性,同时还能提高系统的性能和可靠性。

CodeSource类

Java中的CodeSource类是一个安全管理器可以用来确定一个特定代码源的原点,同时还可以用来授权和限制代码的访问。它定义了代码源的概念,表示一个特定的代码路径和相关的证据(如数字签名和证书),并且提供了一种机制来验证该代码源是否能够访问资源。因此,它是Java安全机制的一个重要组成部分,通过它可以控制Java程序的访问权限。

CodeSource类中包含两个字段,分别是URL和CodeSigners。其中URL表示代码源文件或目录所在的位置,而CodeSigners则表示数字签名证书的信息。CodeSource对象还包括一个getCertificates()方法,可以返回数字签名证书的信息。通过CodeSource对象,可以获取代码源位置及证书信息,进而验证代码是否可信,并授予或拒绝访问。例如,可以创建一个java.security.Policy来定义哪些CodeSource对象应该被授予特定的权限,而其他的则应该被拒绝访问。

权限

存取控制器所处理的基本实体是权限对象(Permission)

在默认的安全策略文件中,此类也是组成策略项的基本权限类型

Permmision 类

Java安全中的存取控制器对权限Permission的处理是通过实现Permission类和PermissionCollection类来实现的。Permission类用于定义授予或拒绝访问特定资源的权限,而PermissionCollection类则是一组Permission对象的集合,用于检查和管理该集合中的所有权限。这两个类是Java安全框架中存取控制器的基础组成部分。

Permission类应该是immutable的,它定义了如何获取访问权限以及如何进行访问控制。该类通常包含以下方法:

  • implies(Permission p) 用于检测一个Permission是否包含另一个Permission。
  • equals(Object obj) 用于检测两个Permission是否相等。
  • hashCode() 返回该Permission的哈希码。

对于权限Permission的处理,存取控制器将Permission对象添加到PermissionCollection中,并使用该集合来检查访问权限。PermissionCollection类提供如下方法:

  • add(Permission permission) 将一个Permission对象添加到PermissionCollection中。
  • remove(Permission permission) 将一个Permission对象从PermissionCollection中移除。
  • implies(Permission permission) 检查存储在PermissionCollection中的Permissions集合是否拥有该Permission对象。

通过这些方法,存取控制器可以检测权限并授予或拒绝访问资源的权限。这种机制使得权限管理更加严格和可控,可以有效地保护系统资源和数据。

Policy

Java安全中的存取控制器对策略Policy的处理是通过实现Java Security Policy类来实现的。Java Security Policy类是Java安全框架中的一个重要组成部分,用于实现基于规则的访问控制和权限管理。

Java Security Policy类定义了一组规则,用于确定哪些主体可以访问哪些对象,并对它们执行什么操作。通过Java Security Policy类,可以控制应用程序的访问权限,如文件、网络、操作系统权限等。

Java Security Policy类定义了许多方法,包括PermissionCollection getPermissions(ProtectionDomain pd)、void refresh()、void setPolicy(Policy policy)和PermissionCollection getPermissions(CodeSource codesource)等。这些方法被用来获取、刷新、设置策略,以及获取代码源的访问许可。

Java Security Policy类还包括支持自定义的Policy受体、Policy管理器,可以扩展Policy类以支持特定的访问控制规则。例如,可以添加自定义的访问控制规则,实现特定的访问控制策略。

使用Java Security Policy类,开发人员可以根据应用程序的具体需求创建自定义的访问控制策略,以实现更精细的访问控制和权限管理。它提供了一个有效的机制来控制Java应用程序的访问权限,从而保护系统资源和数据免受未经授权的访问和攻击。

保护域

Java安全中的存取控制器的保护域是指Java程序执行时所处的环境,在该环境中限制程序对资源的访问。它是Java Security的一个重要组成部分,用于隔离不同的代码源并限制其对系统资源的访问。

在Java中,每个类都被分配到一个保护域中,这个保护域是由Java的类加载机制和Java的安全管理器共同管理的。Java安全管理器设置了一个ProtectionDomain对象,用于指示该保护域的范围,该对象包含一个CodeSource对象以及与之相关的权限(Permission)。

Java程序在执行时,需要先获取一个ProtectionDomain对象,该对象包含程序的访问权限和所在的CodeSource信息。之后,Java程序就会被限制在该保护域内,只能访问权限允许的资源。用户可以使用Java Security Policy类来配置保护域中程序对资源的访问权限,从而实现精细的访问控制。

Java安全中的保护域模型为Java程序提供了安全可靠的运行环境,使得程序的运行环境与外部环境隔离开来,并明确了程序对资源的访问权限。同时,它可以帮助程序员实现安全的Java编程,防止程序出现安全漏洞,保护系统和用户的信息安全。

AccessController

Java安全中的存取控制器的AccessController是一个Java API,用于在Java环境中实现对资源的访问控制和权限管理。通过AccessController,可以实现对Java程序以及Java API的安全控制,限制程序对资源的访问,并且确保程序仅具有授权的权限。

AccessController类包含两个静态方法:doPrivileged()和checkPermission()。其中,doPrivileged()方法用于在特权环境下执行代码块,checkPermission()方法用于检查权限。

doPrivileged()方法有多个重载,其中一个重载可以接受一个特权执行的代码块和一个AccessControlContext对象。通过这个方法,可以在特权环境下执行代码块,获取一些普通环境下不允许操作的资源,比如读取敏感文件、修改系统属性等。可以使用该方法来允许程序执行一些不安全的操作,但需要在代码块执行前先进行权限检查。

checkPermission()方法可以将Java程序的权限与指定的Permission对象进行比较,确定程序是否具有访问受保护资源的权利。如果权限不足,该方法则会抛出SecurityException,从而阻止程序对资源的访问。

通过AccessController,Java程序可以实现对资源的严格访问控制和权限管理,保护系统免受未授权访问和攻击。它是Java安全模型中的一个重要组成部分,有效地提高了Java程序的安全性

在这里插入图片描述

警卫对象

Java安全中的存取控制器的警卫对象是Java安全模型中的一个重要概念之一,用于控制程序对资源的访问权限。它指的是一个AccessControlContext对象,该对象封装了代码执行的上下文信息,包括执行该代码的线程和所处的保护域对象。

Java Security中的代码执行是在一个运行线程和保护域中进行的,线程的执行许可是由当前的AccessControlContext对象控制的。AccessControlContext对象内部存储了该线程在访问控制上下文中的访问权限,包括程序代码来源、证书、权限等等。

AccessControlContext对象是通过AccessController.getContext()方法获得的,它是传递给AccessController.doPrivileged()方法的必需参数之一,指示要运行代码的环境上下文。

Java程序可以使用AccessControlContext对象来限制程序对资源的访问权限,比如文件和网络资源。当代码试图访问受保护资源时,AccessControlContext对象就会检查程序是否拥有访问这些资源的权限。如果没有,代码的访问请求将被阻止。

通过使用警卫对象,可以实现更加安全的Java编程,并确保程序保持在限制的上下文环境中执行,从而避免恶意程序或未经授权的访问。


http://www.ppmy.cn/news/664578.html

相关文章

从风光到巨额亏损 老企业夏普衰落真相是什么?

从“日本最创新的企业”和“液晶之父”的神坛上跌落,夏普最终找到了鸿海这根救命稻草。郭台铭入主一年后的夏普,财务状况与经营状况均已好转,在这个创新速度比眨眼速度还快的时代,靠吃老本的夏普能够重现辉煌? 鸿海董事长郭台铭…

“8K+AI”成三星电视高端标配,把握“长期价值”电视行业仍有故事可讲

文|曾响铃 来源|科技向令说(xiangling0815) 从上世纪20年代开始,电视机从无到有,逐渐走入人类生活,并给家庭娱乐带来翻天覆地的改变。回望电视机的发展历程,不只是简单归结于“屏幕”的进化,其…

三星在全球电视市场的霸主位置稳固,但在高端电视市场面临挑战

2017年三星电视的出货量达到4190万台,同比下滑了13%,市场份额首次跌破20%,不过近日市调机构IHS预计三星电视今年的出货量将超过4000万台,继续是全球最大电视品牌,而另有数据显示在高端电视市场三星电视正被LG和索尼所超…

三星出售所有夏普股份 价值4500万美元

三星 北京时间9月16日消息,据外媒报道,在富士康入股夏普后,三星电子已经出售了所持有的全部夏普股份。 三星通过其日本子公司持有大约3580万股夏普股票,持股比例为0.7%。按照夏普周三的收盘价计算,这部分股份的价值约为…

电视android内置系统界面,Android TV并非唯一 这些电视系统也各具特色

智能电视显然已经是主流,事实上你可能在选购时不经意地就买到一款智能电视。在世界范围内,目前四大智能电视系统最受欢迎、覆盖机型也最广泛,分别是Android TV、Firefox TV、三星Tizen及LG WebOS,那么哪一款才是最好的选择呢&…

三星不愿意和“夙敌”富士康为伍:已卖掉夏普股权

三星不愿意和“夙敌”富士康为伍:已卖掉夏普股权 责任编辑:editor004 作者:晨曦 | 2016-09-15 21:07:31 本文摘自:腾讯科技 富士康是全球最大的电子产品代工厂,旗下拥有众多零部件业务,三星电子则是全球最…

夏普亏损破百年记录:示好三星成转折关键

据知情人士透露,为了更好的融资,夏普已经公布三年业务振兴计划,计划显示夏普将加大对三星的供货量,同时裁员5000人。 5月15日消息,夏普昨日发布2012财年(截至2013年3月31日)财报。财报显示&…

智能电视可以安装鸿蒙操作系统吗,智能电视或将现寡头垄断,鸿蒙凭为何能“上任”?...

电视机厂商密集发布新品,欲在今年下半年一决高下。8月10日,华为发布荣耀智慧屏;8月16日,TCL发布XESS智屏;8月19日,海信发布社交电视S7。就连拼多多,也联手JVC电视发布了4款“智能大屏电视”。如…