CN105159668A - PaaS系统中的类加载实现方法及装置 - Google Patents

PaaS系统中的类加载实现方法及装置 Download PDF

Info

Publication number
CN105159668A
CN105159668A CN201510490247.0A CN201510490247A CN105159668A CN 105159668 A CN105159668 A CN 105159668A CN 201510490247 A CN201510490247 A CN 201510490247A CN 105159668 A CN105159668 A CN 105159668A
Authority
CN
China
Prior art keywords
class
loaded
rank
code
classloader
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201510490247.0A
Other languages
English (en)
Other versions
CN105159668B (zh
Inventor
王阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sina Technology China Co Ltd
Original Assignee
Sina Technology China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sina Technology China Co Ltd filed Critical Sina Technology China Co Ltd
Priority to CN201510490247.0A priority Critical patent/CN105159668B/zh
Publication of CN105159668A publication Critical patent/CN105159668A/zh
Application granted granted Critical
Publication of CN105159668B publication Critical patent/CN105159668B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

本发明实施例提供一种PaaS系统中的类加载实现方法及装置,该方法包括:获取待加载类的代码描述信息;根据所述代码描述信息确定待加载类的级别;当确定所述待加载类的级别高于用户级别时,加载所述待加载类;当确定所述待加载类的级别为用户级别时,从加载所述待加载类的类加载器中获取保护域的权限集合,根据获取的权限集合创建所述待加载类对应的保护域。该方法既能实现类加载的自定义、具有较好的易用性,又能保证安全性。

Description

PaaS系统中的类加载实现方法及装置
技术领域
本发明属于计算机技术领域,尤其涉及一种PaaS系统中的类加载实现方法及装置。
背景技术
随着网络的不断发展,为用户提供服务的方法已经由软件即服务(SoftwareasaService,SaaS)的方式转变为平台即服务(PlatformasaService,PaaS)的方式。
PaaS系统的Java语言中自带了一套安全管理工具,可以对指定路径下的代码赋予各种类型的访问权限,包括访问网络、访问本地磁盘、对java虚拟机运行环境访问、访问系统属性等。在PaaS系统的web服务器开启安全管理器后就可以对用户的代码做访问限制了。此外,Java语言拥有众多的开源工具,其中一些常用的开源框架会访问网络,虚拟机运行环境等,如果开启了安全管理器,会对这些框架访问的资源做限制。
Java中的安全管理器的触发是在Java语言程序开发工具包(JavaDevelopmentKit,JDK)的应用程序编程接口(ApplicationProgrammingInterface,API)中写死的,比如当调用API读取磁盘中的文件时会触发所配置的代码,在配置了安全管理器时会执行对规定权限的检查,例如读取权限,写入权限等;如果没有配置安全管理器就不会检查。而像一些集合类它们的代码中是没有安全管理器这些逻辑的,所以无论配没配置安全管理器集合类相关的API都不会进行相关的权限检查。
PaaS系统的Java语言中有一个很独特的类加载器(classloader),所有的类都是通过classloader加载的,而classloader本身也是一个Java类,所以classloader也需要别人去加载。Java中的类加载器根据层次结构包括加载JDK核心类代码的核心级别的类加载器、加载JDK扩展代码的服务器级别的类加载器和加载应用级别代码的用户级别的类加载器。其中核心级别和服务器级别的类加载器加载的类通常都是安全的,而用户级别的类加载器加载的应用层面的类可能存在不安全因素。
比如可以赋予用户创建自己的classloader的权限,这个权限设置后会带来一定的危险,如图1所示是一系列classloader的加载顺序,在应用classloader下,创建一个自定义的classloader,赋予自定义的classloader新权限,从而在执行时可能用这个classloader去加载一些危险的类,这些类中调用了一些危险的操作,比如删除操作系统上特定的核心文件,读取指定路径下的文件。本来这些操作对于安全管理器来说会被禁用掉的。但是一个classloader可以对新加载的类赋予新的权限,比如可以新类赋予ALL权限执行任意操作,这些新全权限不是之前在policy文件中定义的权限,完全是用户自己新加的权限,这样就绕过了上层的安全管理器。
为了保证类加载的安全性,可以简单的将这个权限去掉,这样用户就不能创建自定义的classloader了,也就不会出现上面的那些危险操作了,但这样就降低了类加载过程中的代码加载的易用性。
实际应用中,为了代码的易用性,通常应当尽量赋予用户代码和使用的框架更多的权限,如果能将所有的权限都赋予用户和框架,那么这些框架在使用时就不会有任何限制,实际使用时尽量要做到满足全部权限检查(ALL)。同时,一些流行的框架可能就需要创建自定义的classloader,这些框架当然不会做危险操作,因此,从易用性来说也应当放开这个权限让更多的用户使用这些流行的框架。可见,现有的类加载实现方法不能很好的兼顾安全性和易用性。
发明内容
有鉴于此,本发明的一个目的是提供一种PaaS系统中的类加载实现方法及装置,用以解决现有技术中java类加载时存在的不能兼顾安全性和易用性的问题。为了对披露的实施例的一些方面有一个基本的理解,下面给出了简单的概括。该概括部分不是泛泛评述,也不是要确定关键/重要组成元素或描绘这些实施例的保护范围。其唯一目的是用简单的形式呈现一些概念,以此作为后面的详细说明的序言。
本发明实施例提供一种PaaS系统中的类加载实现方法,包括:
获取待加载类的代码描述信息;
根据所述代码描述信息确定待加载类的级别;
当确定所述待加载类的级别高于用户级别时,加载所述待加载类;
当确定所述待加载类的级别为用户级别时,从加载所述待加载类的类加载器中获取保护域的权限集合,根据获取的权限集合创建所述待加载类对应的保护域。
在一些可选的实施例中,确定所述待加载类高于用户级别,具体包括确定所述待加载类为核心级别或服务器级别。
在一些可选的实施例中,所述代码描述信息包括待加载类的代码位置路径;
所述确定待加载类的级别,具体包括:
当所述代码位置路径的起始位置为空时,确定所述待加载类的级别为核心级别;
当所述代码位置路径的起始位置指向设定的服务器级别代码存储目录时,确定所述待加载类的级别为服务器级别;
当所述代码位置路径的起始位置指向设定的用户级别代码存储目录时,确定所述待加载类的级别为用户级别。
在一些可选的实施例中,根据获取的权限集合创建所述待加载类对应的保护域,包括:
创建一个新的保护域,将获取的加载所述待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域;
将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
在一些可选的实施例中,上述方法还包括:
在调用所述待加载类执行权限操作时,创建所述权限操作对应的权限对象;
检查所述权限对象是否在所述待加载类对应的保护域的权限集合中出现;若出现,则检查通过,否则抛错。
本发明实施例还提供一种PaaS系统中的类加载实现装置,包括:
获取模块,用于获取待加载类的代码描述信息;
判断模块,用于根据所述代码描述信息,确定待加载类的级别;
执行模块,用于当确定所述待加载类的级别高于用户级别时,加载所述待加载类;当确定所述待加载类的级别为用户级别时,从加载所述待加载类的类加载器中获取保护域的权限集合,根据获取的权限集合创建所述待加载类对应的保护域。
在一些可选的实施例中,所述执行模块,具体用于确定所述待加载类的级别为核心级别或服务器级别时,确认所述待加载类高于用户级别。
在一些可选的实施例中,所述获取模块,具体用于:
获取待加载类的代码位置路径作,得到待加载类的代码描述信息;
所述判断模块,具体用于:
当所述代码位置路径的起始位置为空时,确定所述待加载类为核心级别;
当所述代码位置路径的起始位置指向设定的服务器级别代码存储目录时,确定所述待加载类为服务器级别;
当所述代码位置路径的起始位置指向设定的用户级别代码存储目录时,确定所述待加载类为用户级别。
在一些可选的实施例中,所述执行模块,具体用于:
创建一个新的保护域,将获取的加载所述待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域;
将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
在一些可选的实施例中,上述装置还包括:
调用模块,用于在调用所述待加载类执行权限操作时,创建所述权限操作对应的权限对象;
检查模块,用于检查所述权限对象是否在所述待加载类对应的保护域的权限集合中出现;若出现,则检查通过,否则抛错。
本发明实施例提供的PaaS系统中的类加载实现方法及装置,根据待加载类的代码描述信息,确定待加载类的级别,当待加载类的级别是核心级别或服务器级别这种高于用户级别、能够确保安全的待加载类时,直接加载,当待加载类为用户级别时,根据待加载类对应的类加载器创建新的保护域,从而定义出待加载类的权限集合,实现权限自定义,保证类加载的易用性的同时,能够保证类加载的安全性。
为了上述以及相关的目的,一个或多个实施例包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明某些示例性方面,并且其指示的仅仅是各个实施例的原则可以利用的各种方式中的一些方式。其它的益处和新颖性特征将随着下面的详细说明结合附图考虑而变得明显,所公开的实施例是要包括所有这些方面以及它们的等同。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明实施例中一系列classloader的加载顺序示意图;
图2是本发明实施例中Java中的类加载器的层次结构示意图;
图3是本发明实施例中web服务器相关的类加载器层次结构示意图;
图4是本发明实施例一中PaaS系统中的类加载实现方法的流程图;
图5是本发明实施例二中PaaS系统中的类加载实现方法的流程图;
图6是本发明实施例三中PaaS系统中的类加载实现方法的流程图;
图7是本发明实施例中类加载顺序示意图;
图8是本发明实施例中类的各级别权限示意图;
图9是本发明实施例中用户级别的类权限示意图;
图10是本发明实施例中PaaS系统中的类加载实现装置的结构示意图。
具体实施方式
以下描述和附图充分地示出本发明的具体实施方案,以使本领域的技术人员能够实践它们。其他实施方案可以包括结构的、逻辑的、电气的、过程的以及其他的改变。实施例仅代表可能的变化。除非明确要求,否则单独的组件和功能是可选的,并且操作的顺序可以变化。一些实施方案的部分和特征可以被包括在或替换其他实施方案的部分和特征。本发明的实施方案的范围包括权利要求书的整个范围,以及权利要求书的所有可获得的等同物。在本文中,本发明的这些实施方案可以被单独地或总地用术语“发明”来表示,这仅仅是为了方便,并且如果事实上公开了超过一个的发明,不是要自动地限制该应用的范围为任何单个发明或发明构思。
为了解决现有技术中存在Java类加载时不能兼顾安全性和易用性的问题,本发明实施例提供一种PaaS系统中的类加载实现方法,通过重新创建待加载的用户级别的类的保护域,实现权限控制,从而能够实现检查并保证待加载类的安全,同时允许自定义待加载类的权限,兼顾易用性。
Java中的类加载器(classloader)的层次结构可以如图2所示.最顶层的叫做根类加载器(rootclassloader),加载的都是JDK自己的核心级别的类,rootclassloader会加载扩展类加载器(extclassloader),extclassloader加载的是一些JDK扩展的类,之后extclassloader会加载应用类加载器(appclassloader),appclassloader加载的就是一些应用级别的类了。如果是写了一个简单的问候语(helloworld),那么这个helloworld就是由appclassloader去加载的。
如图2所示的JDK自己的classloader层次结构图,每个classloader会加载不同的资源。箭头指向比较继承关系,也就是上面的classloader是下面的父亲,由父亲加载了自己,每个层次的classloader都会加载到自己特定的资源(也就是Class,java类),但是父classloader不可以使用子classloader加载的类。而子classloader可以使用父classloader加载的类。比如root类加载器是最上层的类,加载了JDK核心API,而app类加载器是最低级别的,加载应用的代码,从继承关系来看,JDK核心的API就不能调用到用户的代码,而用户的代码可以调用JDK核心代码。
Web服务器本身也是用Java写的,也算一个Java应用,加载web服务器相关类的是JDKclassloader,web服务器一般会有自己的classloader,同时对每个应用再创建不同的classloader。
如图3所示为web服务器相关的classloader层次图,不同的应用classloader加载不同的应用,箭头指向表示继承关系,例如:应用classloaderA加载应用A,应用classloaderB加载应用B,应用classloaderC加载应用C等等。Web服务器classloader加载web服务资源,其上层是JDKclassloader,JDKclassloader有时候也可以被称为Appclassloader,全称是sun.misc.Launcher$AppClassLoader。
Java中的安全管理器能够对类加载器进行权限控制,安全管理器会读取.policy结尾的文件,可以有多个这样的文件,当web服务器启动时会读取这些policy文件,然后加载这些文件。当程序需要访问某些资源,比如网络,磁盘,时就会触发这些验证规则。
假设有一个sample.policy文件
这段文件的作用是限制/data0/test/sample.jar这个jar包,jar包是若干java编译后的class文件的归档。
当这个jar包中的类需要访问网络时会触发安全管理器,如果访问的是www.google.com则放行,如果访问www.bing.com则抛错。同理,如果对/data0/test/hello.log这个文件做读取操作则通过,但不允许写和删除这个文件。
假设还有一个global.policy
这里的grant后面没有东西了,就表示大括号内的赋值语句将应用到所有的代码上,这里表示对任意代码都可以读取com.sina.sae.myconfi这个系统属性,但是不允许更改这个属性。
JDK自带的三个classloader和web服务器的两种classloader可以认为都是安全的classloader。这两类classloader都是加载一些指定的类,他们给加载的类赋予的权限都是在policy列表中指定的权限,所以加载的类不会绕过安全管理器,可以认为这两类都是安全的。
真正出现问题的地方是加载第一个应用代码的里的classloader时,应用代码里的classloader可能是框架的classloader,这也是安全的,也可能是用户定义的正常需求的classloder,这个也是安全的,还有可能是恶意用户定义的classloader,这个是不安全的。
下面通过具体的实施例进行详细说明。
实施例一
本发明实施例一提供的PaaS系统中的类加载实现方法,其流程如图4所示,包括如下步骤:
步骤S101:获取待加载类的代码描述信息。
Java中每个类都有一个保护域(ProtectionDomain)当创建一个类时,会由classloader赋予这个类相关的保护域。每个保护域都有一个代码描述信息(CodeSource),CodeSource包含了类或者jar包(也是一个类)的签名信息和代码位置路径,根据这个代码位置路径可以判断当前的类是服务器级别的还是应用级别的。
因此,为了判断待加载类的级别,先获取待加载类的代码描述信息,其中,代码描述信息包括待加载类的代码位置路径。
步骤S102:根据待加载类的代码描述信息,确定待加载类的级别。
比如web服务器可能存放在/usr/local/sae/webserver这个目录下,用户部署的应用可能存放在/data1/userapp/app-name/这个目录下。也就是说,不同的待加载类可以有不同用的代码位置路径。
可以简单的通过代码位置路径的起始位置指向来判断待加载类的级别,例如:/data1/就是用户级别的,/usr/local/就是服务器级别的。对于/data1开头的代码位置路径,强制这个文件下的所有类,包含classloader,以及clssloader的子classloader都必须使用已经定义好的policy中的权限。
步骤S103:当确定待加载类的级别高于用户级别时,加载待加载类。
当确定待加载类为JDK核心级别或服务器级别时,认为是高于用户级别的待加载类,则加载待加载类。
当代码位置路径为空时,确定待加载类的级别为核心级别。
当代码位置路径的起始位置指向设定的服务器级别代码存储目录时,确定待加载类的级别为服务器级别。
修改java.lang.Classloader的构造函数,实现类加载过程中的级别判定。
如果CodeSource的URL为空(null)则说明该待加载类为核心级别的。如果不为null,则可能是服务器级别或用户级别的。
如果URL起始位置是/usr/local则为web服务器级别的。当然可选的,指向服务器级别代码存储目录的也可以是除起始位置为/usr/local之外的其他指定的存储目录。
步骤S104:当确定待加载类的级别为用户级别时,从加载待加载类的类加载器中获取保护域的权限集合。
当代码位置路径的起始位置指向设定的用户级别代码存储目录时,确定待加载类的级别为用户级别。
如果URL起始位置是/data1/,则为用户级别的。
步骤S105:根据获取的权限集合创建待加载类对应的保护域。
创建一个新的保护域,将获取的加载待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域;将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
每个保护域都有一个权限集合(PermissionCollection),当程序调用这个类执行某个权限操作时,会对个操作创建一个权限对象,然后检查这个权限对象是否在类的权限集合中出现,如果出现则通过检查否则抛错。
如果是用户级别的待加载类,则获取classloader本身的保护域(classloader也是一个类),获取当前classloader的权限集合,并新创建一个保护域,将CodeSource和权限集合等属性赋给这个新创建的保护域,将保护域保存在新增的内部类中,同时标记当前的类是需要强制替换权限的类。
修改java.lang.Classloader的defineClass()函数,这个函数用来加载一个类。如果当前标记了强制替换,将内部类中的保护域取出重新赋给需要加载的类执行后续的逻辑(JDK原生的执行逻辑)。
实施例二
本发明实施例而提供的PaaS系统中的类加载实现方法,为类加载的一个具体实现过程示例,其流程如图5所示,包括如下步骤:
步骤S201:获取待加载类的代码位置路径。
参见步骤S101的描述。
步骤S202:判断待加载类的代码位置路径是否为空(null)。
若是,执行步骤S203;否则执行步骤S204。
步骤S203:确定待加载类的级别为核心级别,加载待加载类。
当代码位置路径为空时,确定待加载类为核心级别,直接加载待加载类。
步骤S204:判断待加载类的代码位置路径起始位置是否指向设定的服务器级别代码存储目录。
若是,执行步骤S205;否则执行步骤S206。
步骤S205:确定待加载类的级别为服务器级别,加载待加载类。
例如:如果待加载类的代码位置路径起始位置指向是/usr/local,则为服务器级别的,直接加载待加载类。
步骤S206:判断待加载类的代码位置路径起始位置是否指向设定的用户级别代码存储目录。
若是,执行步骤S207;否则执行步骤S210。
例如:如果待加载类的代码位置路径起始位置指向是/data1/,则为用户级别的,当确定待加载类的级别为用户级别时,从加载待加载类的类加载器中获取保护域的权限集合,以创建对应于待加载类的新的保护域。
步骤S207:从加载待加载类的类加载器中获取保护域的权限集合。
步骤S208:创建一个新的保护域,将获取的加载待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域。
步骤S209:将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
上述步骤S207-步骤S209实现了根据获取的权限集合创建待加载类对应的保护域。
步骤S210:结束。
实施例三
本发明实施例三提供的PaaS系统中的类加载实现方法,在实施例一和实施例二根据获取的权限集合创建待加载类对应的保护域步骤之后,还包括调用待加载类之后的操作过程,其流程如图6所示,包括如下步骤:
步骤S301:在调用待加载类执行权限操作时,创建权限操作对应的权限对象。
步骤S302:检查权限对象是否在待加载类对应的保护域的权限集合中出现。
若出现,执行步骤S303;否则执行步骤S304。
当程序调用这个类执行某个权限操作时,会对个操作创建一个权限对象,然后检查这个权限对象是否在类的权限集合中出现,如果出现则通过检查否则抛错。
类的权限集合是从policy文件中读取的。例如:如果有一个类的权限集合中定义了对/data0/test/hello.log这个文件的读操作。当这个类对此文件执行读操作时候,安全管理器会创建一个权限对象用来做检查,然后判断这个权限对象是否出现在类的权限集合中。如果在则通过否则抛错。
步骤S303:检查通过。
步骤S304:抛错。
如图7所示是一个类加载顺序示意图,箭头执行表示由上面的classloader加载了下面的类,classloader也是一个类。其中web服务器classloader加载应用classloaderA和应用classloaderB,应用classloaderA下面可以加载自定义classloaderA、框架classloader,自定义classloaderA下面还可以加载自定义classloaderB。其中两个自定义的classloader和框架classloader都是应用classloader加载的,所以出问题的地方就在这里,对于从应用classloader开始加载的所有类都强制将这些新加载的类都使用固定的policy,而不允许他们重新定义新权限。
当安装web服务器、JDK以及部署用户自己应用时,这些不同放入代码和文件时存放在不同代码位置路径上的,比如web服务器可能存放在/usr/local/sae/webserver这个目录下,用户部署的应用可能存放在/data1/userapp/app-name/这个目录下。
可以简单的通过目录起始位置来判断,/data1/就是用户级别的,/usr/local/就是web服务器级别的。对于/data1开头的目录强制这个文件下的所有类,包含classloader,以及clssloader的子classloader都必须使用已经定义好的policy中的权限。各级别的权限示意如图8所示
需要注意,只有第一个用户级别的classloader可能会出现问题,这个classloader可能是恶意的也可能是框架classloader。由于classloader也是一个类,所以这个classloader类本身也定义了相关的权限,这个用户级别的classloader是web服务器的classloader加载的。
如如9所示为自定义一些用户级别的类的权限的示意图。其中应用classloader1下面可以依次定义:自定义classloaderA、自定义classloaderB、自定义classloaderC等等,这些都是调用普通类的。
基于同一发明构思,本发明实施例还提供一种PaaS系统中的类加载实现装置,该装置如图10所示,包括:获取模块101、判断模块102和执行模块103。
获取模块101,用于获取待加载类的代码描述信息。
判断模块102,用于根据获取的代码描述信息,确定待加载类的级别。
执行模块103,用于当确定待加载类的级别高于用户级别时,加载所述待加载类;当确定待加载类的级别为用户级别时,从加载待加载类的类加载器中获取保护域的权限集合,根据获取的权限集合创建待加载类对应的保护域。
优选的,执行模块103,具体用于确定待加载类的级别为核心级别或服务器级别时,确认待加载类的级别高于用户级别。
优选的,上述获取模块101,具体用于获取待加载类的代码位置路径作,得到待加载类的代码描述信息。
上述判断模块102,具体用于当代码位置路径为空时,确定待加载类的级别为核心级别;当代码位置路径的起始位置指向设定的服务器级别代码存储目录时,确定待加载类的级别为服务器级别;当代码位置路径的起始位置指向设定的用户级别代码存储目录时,确定待加载类的级别为用户级别。
优选的,上述执行模块103,具体用于创建一个新的保护域,将获取的加载待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域;将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
优选的,上述PaaS系统中的类加载实现装置还包括:调用模块104和检查模块105。
调用模块104,用于在调用待加载类执行权限操作时,创建权限操作对应的权限对象。
检查模块105,用于检查权限对象是否在所述待加载类对应的保护域的权限集合中出现;若出现,则检查通过,否则抛错。
本发明实施例提供的PaaS系统中的类加载实现方法及装置,在满足用户的易用性可以使用这些流行框架同时,又能保证PaaS系统类加载的安全性。通过修改JDK的classloader代码,实现上述兼顾用户对各种框架的易用性和系统安全性的技术方案。
需要说明的是一些其他修改有,反射是java语言的一个特性,可以通过这种反射调用到一个类的私有变量和函数,因为很多框架都需要使用反射,动态创建出一些类,所以反射这种权限不能去掉。由于classloader本身也是一个Class,所以需要修改java.lang.Class,将反射相关的地方做修改,凡是通过反射获取到的函数都要做过滤,将返回的函数列表中过滤掉defineClass,loadLibary,findBootstrapClass。
其中,defineClass实现将一个二进制数组中的内容转换成java中的类(此二进制数组必须满足java类的格式,如不满足则执行抛错)。
loadLibary用于加载c和c++函数。
findBootstrapClass用于查找并返回最核心的类加载器。
此外,生成Class的过程是将一个满足java语言规范的二进制文件变成java内部的对象,这个二进制是按照特定格式生成的,将这个二进制文件解析是由JDK内置的函数去实现了,它调用了C++去完成的,如果在java语言中允许用户使用自己的C和C++库,理论上也可以完成这种解析过程,所以应该禁止用户调用本地代码,也就是C和C++代码,由于极少有框架有这种需求,所以做了这种禁用之后不会对用户易用性造成影响。
除非另外具体陈述,术语比如处理、计算、运算、确定、显示等等可以指一个或更多个处理或者计算系统、或类似设备的动作和/或过程,所述动作和/或过程将表示为处理系统的寄存器或存储器内的物理(如电子)量的数据操作和转换成为类似地表示为处理系统的存储器、寄存器或者其他此类信息存储、发射或者显示设备内的物理量的其他数据。信息和信号可以使用多种不同的技术和方法中的任何一种来表示。例如,在贯穿上面的描述中提及的数据、指令、命令、信息、信号、比特、符号和码片可以用电压、电流、电磁波、磁场或粒子、光场或粒子或者其任意组合来表示。
应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。
在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要比清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。
本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。
用于执行本申请所述功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑、分立硬件组件或者其任意组合,可以实现或执行结合本文的实施例所描述的各种说明性的逻辑框图、模块和电路。通用处理器可以是微处理器,或者,该处理器也可以是任何常规的处理器、控制器、微控制器或者状态机。处理器也可能实现为计算设备的组合,例如,DSP和微处理器的组合、多个微处理器、一个或多个微处理器与DSP内核的结合,或者任何其它此种结构。
结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动磁盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。该ASIC可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。
为使本领域内的任何技术人员能够实现或者使用本发明,上面对所公开实施例进行了描述。对于本领域技术人员来说;这些实施例的各种修改方式都是显而易见的,并且本文定义的一般原理也可以在不脱离本公开的精神和保护范围的基础上适用于其它实施例。因此,本公开并不限于本文给出的实施例,而是与本申请公开的原理和新颖性特征的最广范围相一致。
对于软件实现,本申请中描述的技术可用执行本申请所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。
而且,本文所述的各个方面或特征可以作为使用标准的程序设计和/或工程技术的方法、装置或制品来实现。本文所使用的术语“制品”是要包括可以从任何计算机可读的设备、载波或介质来访问的计算机程序。例如,计算机可读的介质可以包括但不限于磁存储设备(例如,硬盘、软盘、磁带等)、光盘(例如,紧凑光盘(CD)、数字通用光盘(DVD)等)、智能卡以及闪速存储设备(例如,EPROM、卡、棒、钥匙驱动器等)。此外,本文描述的各种存储介质表示为用于存储信息的一个或多个设备和/或其它机器可读介质。术语“机器可读介质”包括但不限于能够存储、包含和/或携带指令和/或数据的无线信道和各种其它介质。
上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

Claims (10)

1.一种平台即服务PaaS系统中的类加载实现方法,其特征在于,包括:
获取待加载类的代码描述信息;
根据所述代码描述信息确定待加载类的级别;
当确定所述待加载类的级别高于用户级别时,加载所述待加载类;
当确定所述待加载类的级别为用户级别时,从加载所述待加载类的类加载器中获取保护域的权限集合,根据获取的权限集合创建所述待加载类对应的保护域。
2.如权利要求1所述的方法,其特征在于,确定所述待加载类的级别高于用户级别,具体包括确定所述待加载类的级别为核心级别或服务器级别。
3.如权利要求2所述的方法,其特征在于,所述代码描述信息包括待加载类的代码位置路径;
所述确定待加载类的级别,具体包括:
当所述代码位置路径为空时,确定所述待加载类的级别为核心级别;
当所述代码位置路径的起始位置指向设定的服务器级别代码存储目录时,确定所述待加载类的级别为服务器级别;
当所述代码位置路径的起始位置指向设定的用户级别代码存储目录时,确定所述待加载类的级别为用户级别。
4.如权利要求1所述的方法,其特征在于,根据获取的权限集合创建所述待加载类对应的保护域,包括:
创建一个新的保护域,将获取的加载所述待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域;
将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
5.如权利要求1-4任一所述的方法,其特征在于,还包括:
在调用所述待加载类执行权限操作时,创建所述权限操作对应的权限对象;
检查所述权限对象是否在所述待加载类对应的保护域的权限集合中出现;若出现,则检查通过,否则抛错。
6.一种平台即服务PaaS系统中的类加载实现装置,其特征在于,包括:
获取模块,用于获取待加载类的代码描述信息;
判断模块,用于根据所述代码描述信息,确定待加载类的级别;
执行模块,用于当确定所述待加载类的级别高于用户级别时,加载所述待加载类;当确定所述待加载类的级别为用户级别时,从加载所述待加载类的类加载器中获取保护域的权限集合,根据获取的权限集合创建所述待加载类对应的保护域。
7.如权利要求6所述的方法,其特征在于,所述执行模块,具体用于确定所述待加载类的级别为核心级别或服务器级别时,确认所述待加载类的级别高于用户级别。
8.如权利要求7所述的装置,其特征在于,所述获取模块,具体用于:
获取待加载类的代码位置路径作,得到待加载类的代码描述信息;
所述判断模块,具体用于:
当所述代码位置路径为空时,确定所述待加载类的级别为核心级别;
当所述代码位置路径的起始位置指向设定的服务器级别代码存储目录时,确定所述待加载类的级别为服务器级别;
当所述代码位置路径的起始位置指向设定的用户级别代码存储目录时,确定所述待加载类的级别为用户级别。
9.如权利要求6所述的装置,其特征在于,所述执行模块,具体用于:
创建一个新的保护域,将获取的加载所述待加载类的类加载器的代码描述信息和权限集合,赋予给创建的新的保护域;
将创建的新的保护域保存到新增内部类中,并标记为需要强制替换权限。
10.如权利要求6-9任一所述的装置,其特征在于,还包括:
调用模块,用于在调用所述待加载类执行权限操作时,创建所述权限操作对应的权限对象;
检查模块,用于检查所述权限对象是否在所述待加载类对应的保护域的权限集合中出现;若出现,则检查通过,否则抛错。
CN201510490247.0A 2015-08-11 2015-08-11 PaaS系统中的类加载实现方法及装置 Active CN105159668B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510490247.0A CN105159668B (zh) 2015-08-11 2015-08-11 PaaS系统中的类加载实现方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510490247.0A CN105159668B (zh) 2015-08-11 2015-08-11 PaaS系统中的类加载实现方法及装置

Publications (2)

Publication Number Publication Date
CN105159668A true CN105159668A (zh) 2015-12-16
CN105159668B CN105159668B (zh) 2019-01-18

Family

ID=54800535

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510490247.0A Active CN105159668B (zh) 2015-08-11 2015-08-11 PaaS系统中的类加载实现方法及装置

Country Status (1)

Country Link
CN (1) CN105159668B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106055356A (zh) * 2016-05-25 2016-10-26 东软集团股份有限公司 控制资源访问的方法及装置
CN109271756A (zh) * 2017-07-14 2019-01-25 迈普通信技术股份有限公司 权限控制方法、装置及服务器
CN110096315A (zh) * 2019-03-22 2019-08-06 华为技术有限公司 一种组件加载方法和装置
CN110286913A (zh) * 2019-06-06 2019-09-27 口碑(上海)信息技术有限公司 核对代码包部署方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044467A (en) * 1997-12-11 2000-03-28 Sun Microsystems, Inc. Secure class resolution, loading and definition
CN102955915A (zh) * 2011-08-23 2013-03-06 中国移动通信集团公司 一种Java应用安全访问控制方法及其装置
CN103065081A (zh) * 2013-01-11 2013-04-24 北京搜狐新媒体信息技术有限公司 一种PaaS平台的安全运行方法和PaaS平台

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6044467A (en) * 1997-12-11 2000-03-28 Sun Microsystems, Inc. Secure class resolution, loading and definition
CN102955915A (zh) * 2011-08-23 2013-03-06 中国移动通信集团公司 一种Java应用安全访问控制方法及其装置
CN103065081A (zh) * 2013-01-11 2013-04-24 北京搜狐新媒体信息技术有限公司 一种PaaS平台的安全运行方法和PaaS平台

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
杨莎莎 等: "基于Java安全体系结构的托管PaaS平台安全容器", 《电子技术应用》 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106055356A (zh) * 2016-05-25 2016-10-26 东软集团股份有限公司 控制资源访问的方法及装置
CN109271756A (zh) * 2017-07-14 2019-01-25 迈普通信技术股份有限公司 权限控制方法、装置及服务器
CN110096315A (zh) * 2019-03-22 2019-08-06 华为技术有限公司 一种组件加载方法和装置
CN110286913A (zh) * 2019-06-06 2019-09-27 口碑(上海)信息技术有限公司 核对代码包部署方法及装置
CN110286913B (zh) * 2019-06-06 2020-06-09 口碑(上海)信息技术有限公司 核对代码包部署方法及装置

Also Published As

Publication number Publication date
CN105159668B (zh) 2019-01-18

Similar Documents

Publication Publication Date Title
US6983460B1 (en) Method for loading applications into a multiapplication embedded system equipped with data processing resources, corresponding embedded system and execution method
CN100470440C (zh) 具有多进程结构的用于运行插件程序代码模块的计算装置
CN111782300B (zh) 一种数据处理方法、装置、设备及系统
CN109032825B (zh) 一种故障注入方法、装置及设备
CN105159668A (zh) PaaS系统中的类加载实现方法及装置
CN110022311B (zh) 一种基于攻击图的云外包服务数据泄露安全测试用例自动化生成方法
US10089371B2 (en) Extensible extract, transform and load (ETL) framework
US20070169065A1 (en) Computer program with metadata management function
CN108614702B (zh) 字节码优化方法及装置
CN102902911A (zh) 一种在Java虚拟机中安全运行第三方代码的方法
CN105094878A (zh) 一种集成系统库文件的方法和装置
CN103092660A (zh) 一种嵌入式设备出厂配置与生产配置的安全快速切换方法
US10223526B2 (en) Generating packages for managed applications
KR102459774B1 (ko) Dll 파일 암호화 방법, 이를 수행하는 dll 파일 암호화 시스템, 및 이를 저장하는 기록매체
CN108763924A (zh) 一种安卓应用程序中不可信第三方库访问权限控制方法
CN107636667B (zh) 在设备中创建多个工作空间的系统及方法
KR101477050B1 (ko) 메모리 덤프 기법을 이용한 어플리케이션의 실행코드 추출 방법
CN101950339A (zh) 一种电脑安全防护方法和系统
CN111324357B (zh) 应用程序接入风控平台的方法及相关设备
US6792596B2 (en) Method and system for protecting resource central programs
CN105760164B (zh) 一种用户空间文件系统中acl权限的实现方法
US11562094B2 (en) Geography aware file dissemination
CN110633210B (zh) 文件执行方法、装置、存储介质和电子设备
CN107368738A (zh) 一种智能设备的防Root方法及装置
Lachmund Auto-generating access control policies for applications by static analysis with user input recognition

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20230424

Address after: Room 501-502, 5/F, Sina Headquarters Scientific Research Building, Block N-1 and N-2, Zhongguancun Software Park, Dongbei Wangxi Road, Haidian District, Beijing, 100193

Patentee after: Sina Technology (China) Co.,Ltd.

Address before: 100080, International Building, No. 58 West Fourth Ring Road, Haidian District, Beijing, 20 floor

Patentee before: Sina.com Technology (China) Co.,Ltd.

TR01 Transfer of patent right