OSGi中的权限

在上一篇文章中 ,我们介绍了为Java应用程序实现沙箱的方法,在其中我们可以安全地运行移动代码 。

这篇文章探讨了如何在OSGi环境中执行相同的操作。

OSGi

OSGi规范 为Java定义了一个动态模块系统 。 因此,它是实施那种可以使您的应用程序动态添加移动代码的插件系统的理想选择。

OSGi中的安全性基于我们之前讨论的Java 2安全性体系结构,因此您可以重复使用有关代码签名等方面的知识。

但是,OSGi进一步走了几步。

吊销权限

Java权限模型的弱点之一是,您只能显式授予权限,而不能撤销它们。 在许多情况下,您都希望允许所有内容(特殊情况除外)。

没有使用标准Java权限来执行此操作的方法,但是幸运的是,OSGi引入了一种解决方案。

缺点是OSGi引入了自己的语法来指定策略。

以下示例显示如何拒绝com.acme.secret子包的PackagePermission

DENY {( ..PackagePermission "com.acme.secret.*" "import,exportonly" )
} "denyExample"

(在下面的示例中,我给出了权限类的简单名称,而不是完全限定名称。我通过在简单名称前面加上..暗示这一点..

PackagePermission是OSGi定义的用于对包导入和导出进行授权的权限。 您的应用程序可以使用这样的策略来确保移动代码无法调用给定程序包中的类,例如,以限制对数据库的直接访问。

权限的可扩展条件

OSGi带来的第二个改进是,可以在运行时动态评估授予权限的条件。

以下示例显示如何有条件地授予ServicePermission

ALLOW {[ ..BundleSignerCondition "* ; o=ACME" ]( ..ServicePermission "..ManagedService" "register" )
} "conditionalExample"

ServicePermission是OSGi定义的权限,用于限制对OSGi服务的访问。

条件是方括号之间的部分。 OSGi定义了两个条件,它们对应于常规Java策略中的signedBycodeBase构造。

您还可以定义自己的条件 。 该规范给出了有关实施条件的详细说明,尤其是有关性能的说明。

不同类型的权限

OSGi带给Java权限模型的最后一项创新是存在不同类型的权限。

捆绑包可以指定自己的权限。 这并不意味着捆绑包可以为其授予权限,而是可以指定其运行所需的最大特权。 这些权限称为本地权限

OSGi框架确保该捆绑包永远不会拥有比本地权限更多的权限,从而实现了最小特权的原则 。

实际上,该说法并不完全准确。 每个捆绑软件都将具有在OSGi环境中运行所需的某些权限,例如能够读取org.osgi.framework.*系统属性。

这些权限被称为隐式权限 ,因为每个捆绑软件都将拥有它们,无论权限是否明确授予捆绑软件。

权限的最终类型是系统权限 。 这些是授予捆绑软件的权限。

有效权限是在运行时检查的一组权限:

effective = (local ∩ system) ∪ implicit

本地权限启用审核。 在将捆绑软件安装到OSGi环境之前,您可以检查OSGI-INF/permissions.perm捆绑软件许可资源 ,以查看捆绑软件需要哪些许可。

如果您不满意向捆绑软件授予这些权限,则可以决定不安装捆绑软件。 关键是您无需运行捆绑软件,也无需访问其源代码就可以了解所有这些信息。

集成到Java权限模型中

OSGi框架通过子类化ProtectionDomain将其扩展的权限模型集成到标准Java权限模型中。

每个捆绑软件都为此目的获得一个BundleProtectionDomainImpl

这种方法使OSGi可以利用您已经了解的标准Java权限模型,因此您可以重用该领域的大多数技能。 您唯一需要重新学习的就是如何编写策略。

权限模型比较

为了使OSGi权限模型更有效,请考虑以下比较表,该表使用了XACML规范中的术语:

权限模型 标准Java OSGi
特效 允许 允许,拒绝
目标条件 codeBase,已签名 codeBase,signedBy,自定义条件
组合算法 先申请 首先适用,本地/系统/隐式

从该表中,您可以看到OSGi模型比标准Java权限模型更具表现力,尽管不如XACML表现力强。

参考: 安全软件开发博客上来自我们JCG合作伙伴 Remon Sinnema的OSGi许可 。

翻译自: https://www.javacodegeeks.com/2012/11/permissions-in-osgi.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP简单教程

目录 HTTP简介 HTTP工作原理 HTTP消息结构 客户端请求消息服务器响应消息实例 HTTP请求方法HTTP响应头信息HTTP状态码 HTTP状态码分类HTTP状态码列表 HTTP content-type对照表 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写&…

Reversed-Z详解

在3D渲染管线中,Z这个家伙几乎无处不在,如Z-Buffer,Early-Z,Z-Cull,Z-Test,Z-Write等等,稍有接触图形学的人都会对这些术语有所耳闻。 那么Z到底是什么呢?首先Z当然可以是任意坐标系…

pyqt开发的程序模板_小程序定制开发和模板开发要多少钱?有什么区别?

到现在,小程序开发已经有了1年多的历史,已经达到百万数量级。无论是小程序商城还是小程序游戏,其开发方式不外乎两种,一种是定制开发,另一种是模板开发。对于很多初次接触小程序的客户来说,还不知道小程序的…

html 三列布局(两列自适应,一列固定宽度)

不做过多解释:主要是记录一个完整的布局样式,实现页面大致三列其中左右两列是自适应宽度,中间固定宽度效果。 不多少代码奉上: CSS样式代码: /*********************公共标签样式********************//************…

单曲循环 翻译_歌单 | 单曲循环amp;热评

December2020/12/ 写在前面的话 /本来打算在跨年的时候才更文,但是吧又觉得空出这最后一个月有点苍白,然后最近一直夜半网抑云(敏感ing)就想到可以做一期分享歌单的推文,分享一些最近听得频繁的歌曲(还不是刷抖音刷出来的)。《暧昧》// 王菲徘…

休息使用Jersey –包含JAXB,异常处理和客户端程序的完整教程

最近,我开始使用Jersey API开发一个Restful Web服务项目。 在线提供了一些教程,但是我遇到了异常处理方面的一些问题,而且在使用JaxB和提供异常处理方法的完整项目中找不到任何地方。 因此,一旦我能够使用带有异常处理和客户端程序…

【转】Java方向如何准备BAT技术面试答案(汇总版)

原文地址:http://www.jianshu.com/p/1f1d3193d9e3 这个主题的内容之前分三个篇幅分享过,导致网络上传播的比较分散,所以本篇做了一个汇总,同时对部分内容及答案做了修改,欢迎朋友们吐槽、转发。因为篇幅长度和时间的原…

numpy维度交换_“lazy”的transpose()函数——从numpy 数组的内存布局讲起

1 数组的两种内存布局方式行优先与列优先首先我们回顾一下,矩阵数据在内存中的两种布局方式:行优先(row-major):以行为优先单位,在内存中逐行存储/读取;对于多维,意味着当线性扫描内…

云耀服务器切换系统,【计算】云耀服务器-常见操作汇总指南

通过上期的介绍,相信大家对于云耀云服务器的基本知识有了一个了解。云耀云服务器是一个具备独立、完整的操作系统和网络功能,可快速搭建简单应用的新一代云服务器。接下来,本期为大家带来关于云耀云服务器使用中的一些简单方法和小技巧。1.云…

机器学习应该准备哪些数学预备知识?

转 https://www.zhihu.com/question/36324957 https://www.zhihu.com/question/36324957/answer/139408269 机器学习应该准备哪些数学预备知识? 数据分析师,工作中经常使用机器学习模型,但是以调库为主。 自己一直也在研究算法,也…

react usecontext_Vue3原理实战运用,我用40行代码把他装进了React做状态管理

前言vue-next是Vue3的源码仓库,Vue3采用lerna做package的划分,而响应式能力vue/reactivity被划分到了单独的一个package中。如果我们想把它集成到React中,可行吗?来试一试吧。使用示例话不多说,先看看怎么用的解解馋吧…

css的三个特性 背景透明设置

关于行内元素(补充一点) 行内元素只能容纳文本或其他行内元素。(a特殊a里面可以放块级元素) 例子: 关于行高tip: 选择器的嵌套层级不应大于3级,位置靠后的限定条件应尽可能的精确。 属性定义必须另起一行…

ccs安装多版本编译器离线_大数据分析:学习工具JDK,在线安装指南

hadoop是使用Java语言开发的并且Hadoop运行需要有Java环境的支持,因此在安装hadoop之前需要安装Java开发环境即JDK(Java Development Kit)。安装前首先向大家介绍以一下本文会用到的几个词:JAVA_HOME:一是为了方便引用,比如,JDK安…

asp.net尚未在web服务器上注册_最新版Web服务器项目详解 00 项目概述

点 击 关 注 上 方"两猿社"设 为"置 顶 或 星 标",干 货 第 一 时 间 送 达。互 联 网 猿 | 两 猿 社TineyWebServerLinux下C轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器…

DBMS-基本概念

文件处理系统(file-processing system)的主要弊端: 数据冗余和不一致(data redundancy and inconsistency)、数据访问困难(difficulty in accessing data)、数据孤立(data isolation…

python多大孩子可以学_孩子学编程最佳年龄是多大

儿童编程教育已经悄悄地掀起了编程低龄化的热浪。但是很多人会疑惑,到底孩子学编程最佳年龄是多少呢?下面小编就为大家解答一下。孩子学编程最佳年龄 首先,孩子的学习黄金时期是非常重要的。从6岁开始,大多数孩子都可以掌握对基本…

上传文件到华为云云服务器,上传文件到云服务器

上传文件到云服务器 内容精选换一换登录Windows操作系统的弹性云服务器时,需使用密码方式登录。因此,用户需先根据创建弹性云服务器时使用的密钥文件,获取该弹性云服务器初始安装时系统生成的管理员密码(Administrator帐户或Cloudbase-init设…

关于图片预加载的思考

引子&#xff1a; 很多时候&#xff0c;我们在写html页面的时候&#xff0c;当需要在页面中加入图片时&#xff0c;我们很自然地把图片直接用<img>标签放在了<body>里面&#xff0c;这本来是没有多大问题的。 但是当图片数量很多的时候&#xff0c;问题就来了。H…

SpringBoot03 项目热部署

1 问题 在编写springBoot项目时&#xff0c;经常需要修改代码&#xff1b;但是每次修改代码后都需重新启动&#xff0c;修改的代码才会生效 2 这么实现IDEA能够像Eclipse那样保存过后就可以自动进行刷新呢 将springBoot项目进行热部署即可 3 如何实现SpringBoot项目的热部署01 …

STM32实现流水灯

led.c #include"led.h"void Led_Init(void) {GPIO_InitTypeDef GPIO_VALUE; //???RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//???GPIO_VALUE.GPIO_ModeGPIO_Mode_Out_PP;//???? ????GPIO_VALUE.GPIO_PinGPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_…