基于一表多用户的服务发布及访问系统的制作方法

文档序号:15694961发布日期:2018-10-19 18:53阅读:198来源:国知局
本发明涉及计算机
技术领域
:,具体来说,涉及一种基于一表多用户的服务发布及访问系统。
背景技术
::目前市场上用于服务发布及访问的产品不多,类似产品主要以挂接已经封装好的webservice服务为主,提供服务路由、服务访问负载均衡功能,能够控制服务的访问权限,记录服务访问日志。但这些产品还是存在明显的局限性:1)只提供服务挂接功能,只能够针对已经发布好的webservice提供挂接功能,不能够基于数据库中表、视图等动态发布服务。如果要针对数据库中表、视图发布服务,需要先将表、视图封装成webservice,需要专业的软件开发人员编写代码才能完成,如果找不到合适的软件开发人员那么就无法完成服务发布工作;2)只能够控制服务的访问权限,只能够控制服务访问者是否有权访问此服务,即访问者有权访问和无权访问两种状态,对于服务内部数据的访问却无法控制,比如某个服务将会提供三类数据:身份证号码、手机号码、银行卡号,这种情况下就无法控制访问者是否有权获取全部三类数据,还是只能够获取其中某几类数据;3)只能记录粗粒度的服务访问日志,对于服务访问日志可以包含如下信息:访问者信息、访问时间、所访服务信息、访问结果、访问用时、访问记录数;对于目前市场上产品的调研发现,大部分不能够记录访问数据条数,对于访问时间、访问结果的记录也不准确,比如记录访问时间会将从接到请求至返回结果这段时间记录下来,但是这其中包含了权限验证、服务路由的时间花费,不能够准确记录服务真实工作所用时间。挂接的webservice中很多服务为了运行稳定,已经将可能的异常捕获,并且在返回值中暴露这些内部异常,比如数据库连接异常、用户名密码错误、查询参数不正确、访问授权过期,如果只是挂接webservice并不能感知服务内部的异常情况,因此记录日志时这些访问都不会被记录成异常访问;4)不支持一表多用户功能,一表多用户即基于数据库中的表和视图发布服务,发布后的服务针对不同的访问用户可以设定不同的访问权限,即不同的用户访问同一个服务时将会得到不同结果;市场上现有产品并不能够支持一表多用户功能。技术实现要素:本发明的目的在于提出一种基于一表多用户的服务发布及访问系统,以克服现有技术中存在的上述不足。为实现上述技术目的,本发明的技术方案是这样实现的:一种基于一表多用户的服务发布及访问系统,所述系统包括元数据管理单元、服务发布单元和服务访问单元;所述元数据管理单元包括数据库连接模块、数据对象模块和数据属性模块,所述数据库连接模块用于以列表的方式建立起数据库与数据对象之间的连接关系,所述数据对象模块用于以列表的方式将数据对象导入数据库,以及能够自动识别数据库内存储的所有数据对象,并将这些数据对象呈现给服务发布单元,所述数据属性模块用于以列表的方式建立起数据对象的数据属性信息,所述数据属性信息随着数据对象的导入而导入,随着数据对象的导出而导出;所述服务发布单元包括服务信息模块、服务输入输出模块和服务权限模块,所述服务信息模块用于将数据对象包装成服务,所述服务权限模块用于依据用户的身份信息建立所述身份信息和服务的映射关系,所述映射关系包括用户是否能够访问所述服务以及能够访问所述服务下的哪些数据对象,所述服务输入输出模块用于将数据对象导入数据对象模块以及将授权后的服务呈现给用户;所述服务访问单元包括信息录入模块、权限验证模块和数据查询模块,所述信息录入模块用于输入用户的身份信息,并验证用户的身份信息是否正确,若正确,则将用户的身份信息发送给权限验证模块,若不正确,则输出错误信息,所述权限验证模块用于验证用户是否有权访问服务,若没有权利访问,则输出无权利访问信息,若有权利访问,则进一步验证用户能够访问所述服务下对应的数据对象,并将用户的授权情况发送给数据查询模块,所述数据查询模块依据用户的授权情况调用底层服务进行服务查询,获取查询结果,并将查询结果发送给服务输入输出模块。进一步的,所述服务访问单元还包括访问日志记录模块,所述访问日志包括请求时间、请求响应时间、请求者编号、请求者所用ip、服务编号、请求信息、请求结果和请求结果数据量中的一种或多种。进一步的,所述服务访问单元还包括数据脱敏模块,用于将授权后的服务中有敏感字段的数据对象进行数据脱敏,并将数据脱敏后的服务发送给服务输入输出模块。进一步的,所述数据脱敏模块采用混淆掩码的技术对数据进行脱敏处理。进一步的,所述身份信息包括用户的基本信息、用户访问的ip地址、用户访问的时间和用户访问的次数中的一种或多种。进一步的,所述服务信息模块包括:搭建环境模块,用于搭建shell脚本运行环境,编译项目,运行预先编写的插件,所述插件基于项目管理工具maven、版本控制工具svn、jdk和tomcat编写;代码检出模块,从svn获取最新代码;编译打包模块,使用maven对获取的所述最新代码进行编译打包,形成打包文件;发布模块,将所述打包文件发布到tomcat服务器当中进行发布。进一步的,还包括服务负载查询管理模块,所述服务负载查询管理模块包括:框架搭建模块,用于搭建springboot框架,运行springcloud中的网关组件;网关,接收权限验证模块发送的授权情况并根据查询请求控制数据查询模块选择所要请求的服务节点下负荷较小的节点分发所述查询请求。进一步的,所述网关还包括服务状态监测模块,用于查看服务是否正常,若服务下的所有节点均异常,则由断路器返回异常信息。进一步的,所述网关依据心跳机制通过注册中心实时检测各个服务节点的负载情况。进一步的,所述负载包括请求负载和数据负载中的一种或多种。本发明的有益效果:1、方便灵活的服务发布方式,基于元数据进行的服务发布,不但准确而且灵活,能够适用于大部分的应用场景,即能够进行服务发布也可以进行服务访问权限的控制,能够保证数据被最应该使用的人所使用;2、提高数据使用率,可以有效提高数据使用率,避免出现数据孤岛,方便数据互联互通,从而加大数据融合,在大数据融合的背景下也就间接的发挥了数据潜在的价值;3、安全可靠的验证机制,服务访问、数据访问双监控机制,为数据管理部门提供了全方位的数据保护,能够有效保证数据安全的保密性、可用性、可控制性;4、完善的日志记录机制,能够记录所有的服务访问情况,包括请求时间、请求响应时向请求者编号、请求者所用ip、服务编号、请求信息、请求结果(成功、失败、越权访问)、请求结果数据量,即请求者只要请求无论请求是否成功都会被记录下来,通过分析日志可以知道请求者的身份和请求者发起请求时所在的网络位置,这些都可以有效保证数据安全使用的不可抵赖性,也大大增加了数据的安全性;5、方便部署:一线运维人员不需要掌握项目部署流程和linux系统命令相关技术,只需根据操作指导书逐步进行即可,大大减少了部署流程和速度,减少了一线运维人员的部署时间和运维成本;稳定性高、封装性强:本发明对于一线运维人员来说只需调用初始命令即可,而且对于绝大多数异常情况,譬如异常断电断网等,工具会检测到断电断网异常,并且可以回滚到上一步操作;方便版本控制:由于各个现场发布的版本不统一,导致对版本的控制不好管理,所以通过本发明自动化部署,实现对版本的控制,方便统一管理、易于维护,降低维护成本;6、当一台机器出现故障时候,网关会选择其他节点分发任务,不会对整个系统产生影响,不会产生单点过热的问题;springcloud还提供了大量的组件,这些组件有助于拓展模块功能,减少项目开发量;springcloud有可插拔的组件式开发模式将模块与整体隔离开来,使后期的升级成为可能;使用网关对访问权限进行集中式控制。附图说明图1是本发明所述的基于一表多用户的服务发布及访问系统的结构示意图;图2是数据库连接信息表、数据对象表和数据属性表的实施例关系图;图3是本发明所述的服务访问流程图;图4是本发明所述的服务信息模块的结构示意图;图5是本发明的jdk环境检测流程图;图6是本发明的svn环境检测流程图;图7是本发明的编译环境检测流程图;图8是本发明的打包环境检测流程图;图9是本发明的发布环境检测流程图;图10是本发明的服务负载查询管理模块的作用结构示意图。具体实施方式下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。如图1所示,根据本发明的实施例所述的一种基于一表多用户的服务发布及访问系统,所述系统包括元数据管理单元1、服务发布单元5和服务访问单元9。所述元数据管理单元1包括数据库连接模块2、数据对象模块3和数据属性模块4,所述数据库连接模块2用于以列表的方式建立起数据库与数据对象之间的连接关系,所述数据对象模块3用于以列表的方式将数据对象导入数据库,以及能够自动识别数据库内存储的所有数据对象,并将这些数据对象呈现给服务发布单元5,所述数据属性模块4用于以列表的方式建立起数据对象的数据属性信息,所述数据属性信息随着数据对象的导入而导入,随着数据对象的导出而导出;所述服务发布单元5包括服务信息模块7、服务输入输出模块6和服务权限模块8,所述服务信息模块7用于将数据对象包装成服务,所述服务权限模块8用于依据用户的身份信息建立所述身份信息和服务的映射关系,所述映射关系包括用户是否能够访问所述服务以及能够访问所述服务下的哪些数据对象,所述服务输入输出模块6用于将数据对象导入数据对象模块3以及将授权后的服务呈现给用户。具体的,数据库不同,录入到平台中的数据库的连接信息也不相同。例如,oracle数据库单机环境和双机环境的连接信息不同;oracle数据库和hbase数据库的连接信息不同,本发明通过列表的方式将数据库与服务输入输出模块6不同的连接关系存储到平台中。连接信息录入完以后可以测试连接信息是否正确,如果测试连接成功,则说明录入的连接信息准确。测试连接信息可通过调用数据库提供的api架包进行连接测试,将录入的连接信息传递给api接口,如果没有抛出异常则说明连接成功,如果连接过程中产生异常,则说明连接信息有误。连接信息录入好并且连接测试成功以后,可以通过服务输入输出模块6将数据对象导入数据对象模块3,数据对象模块3选择已经录入好的连接信息将数据对象以列表的方式将数据对象导入数据库,此时可以勾选哪些是需要导入的数据对象,同时可以给数据对象起一个容易记住的别名(中文名称)。通常数据库不同,使用的输入端口也不同,输入端口包含在数据库连接信息中,例如mysql数据库默认端口3306作为输入端口。数据对象模块3能够根据数据库类型不同自动连接、自动识别数据库下所有数据对象,并将这些数据对象发送给服务信息模块。数据对象模块中内置了自动识别算法,不同的数据库选用不同的连接算法,比如oracle数据库,通过调用oracle提供的ojdbc6架包自动连接oracle数据库,同时会在oracle数据库中查找元数据表user_tables、all_tables等,从这些元数据库表中可以自动识别数据库下的所有数据对象。另外,在本实施例中,数据对象模块3还关联有数据属性模块4,数据属性是依附于数据对象而存在的,因此需要首先确定一个数据对象,除了hbase以外,几乎所有的数据对象与数据属性的关系都只有一层,即数据属性直接依附于数据对象,选中某个数据对象,可以直接导入其下所有数据属性信息,同时能够预览此数据对象中保存的数据属性信息。所述服务信息模块7将数据对象包装成服务。所述服务权限模块8用于依据用户的身份信息建立所述身份信息和服务的映射关系,所述映射关系包括用户是否能够访问所述服务以及能够访问所述服务下的哪些数据对象。具体的处理方式如下,设计针对性的数据库表来存储相应的信息,设计用户信息表来存储用户的身份信息;设计用户权限表来存储用户和服务的映射关系。同时将用户的访问日志存储在数据库中。在整个系统启动时内置的算法会将用户信息加载到缓存里(这里使用redis作为缓存容器),其中加载的用户信息包括用户基本信息、用户权限信息(能够访问的服务以及服务下的数据对象)、用户访问次数(通过计算日志中记录的用户访问量获得),用户基本信息会以用户唯一标示为key存储在缓存中,用户权限信息会以用户唯一标示+服务唯一标示为key存储在缓存中,系统会为每一个注册的用户分配一个token,用户在访问服务时需要提供token进行权限验证。系统在获取token后首先验证token的有效性,非法token将被拒绝访问;如果token有效,接下来会进行服务访问控制验证,根据用户信息判断用户授权时间是否过期,如果过期拒绝访问;接下来根据获取的用户访问ip地址与用户授权时的ip地址进行比较,如果不一致拒绝访问;然后根据用户唯一标示+服务唯一标示在缓存中快速匹配,如果没有匹配到则说明没有访问权限,则拒绝访问;最后根据用户的访问申请在授权信息中进行匹配,过滤掉不允许访问的数据对象,整个权限验证结束。在本实施例中,所述服务信息模块7包括:搭建环境模块701,用于搭建shell脚本运行环境,编译项目,运行预先编写的插件,所述插件基于项目管理工具maven、版本控制工具svn、jdk和tomcat编写。具体的,在部署自动化脚本前需检查相应的插件是否已安装,首先是jdk路径、版本号(推荐jdk1.7以上)和相关的配置文件;其次是svn环境、所对应的的版本号以及svn账号密码、url是否正确等;然后是maven环境、配置文件及版本号;最后则是tomcat发布环境、版本号以及相关配置文件和端口号。项目管理工具maven不仅是构建工具,它还是依赖管理工具和项目管理工具,提供了中央仓库,能够帮助我们自动下载构件,为了解决依赖的增多,版本不一致,版本冲突,依赖臃肿等问题,它通过一个坐标系统来精确地定位每一个构件,还能帮助我们分散在各个角落的的项目信息,包括项目描述,开发者列表,版本控制系统,许可证,缺陷管理系统地址,maven还为全世界的java开发者提供了一个免费的中央仓库,在其中衍生工具(nexus)我们还能对其进行快速搜索,maven对于目录结构有要求,约定优于配置,用户在项目间切换就省去了学习成本。版本控制工具svn在对版本控制方面以下几个特点:提高性能,svn不管文件是文本还是二进制类型,在内部都是以二进制差异比较算法来表示文件的更新部分,这表示所有的文件在文件库中都是以差异的形式存储,而且在网络上传输的都是较小的文件差异部分,这也使创建分支、打标签、合并等操作可以非常快的完成。方便管理组织目录,svn不光对文件做版本跟踪,也会对目录做版本跟踪,因此可以根据项目的需要,对目录结构随时进行修改,可以把现有的目录移动到新的地方。保证提交操作的完整性,svn对提交的操作的处理方式类似数据库的事务处理,要么全部成功,要么全部无效,保证了原子性。在本发明中根据这两个工具的特点来对版本控制进行优化和自动化部署。代码检出模块702,从svn获取最新代码。本发明运用了shell,java编程语言等技术,通过java反射机制自动加载文件,获取到文件的版本信息,并写入系统。svn是一种集中式文件版本管理系统,插件执行时首先自动化到svn服务器获取最新代码。编译打包模块703,使用maven对获取的所述最新代码进行编译打包,形成打包文件。发布模块704,将所述打包文件发布到tomcat服务器当中进行发布。本发明对运行环境的要求较高,必须具备相应的插件才可部署成功,否则很容易部署失败,因此,在部署的过程中必须对部署环境进行检测。具体的,如图5所示,搭建环境时对jdk环境进行相应的检查,检测jdk环境时先判断环境中是否已安装所需的jdk,若已安装则进入代码检出流程;若未安装则需安装jdk,若安装成功则进入代码检出流程;若安装失败,需重新安装。如图6所示,代码检出时对svn环境进行相应的检查,在代码检出的过程中需确保svn账号密码及url正确,当程序执行到检测svn环境时,首先会判断svn账号密码及url是否存在异常,若环境正常则执行代码编译;若环境异常,则会提示账号密码或地址异常,结束该流程检出失败。如图7所示,编译打包前对jdk环境和maven环境进行检测,在代码编译阶段中对于环境的检测有两个,一是maven环境;二是jdk环境,但在通常情况下主要还是maven环境,因为在第一阶段已经对jdk环境检测完成,所以该阶段jdk的环境一般是没有问题的,所以若在此出现问题更多的应该考虑是否是maven环境出现的异常,若jdk环境和maven环境均正常,则进行编译,若jdk环境和maven环境中至少有一个异常,则结束该流程编译失败。编译完成后进入到打包流程,如图8所示,执行打包流程时对maven环境的版本号和配置文件进行检测,若maven环境正常,则打包成功进行发布流程,若maven环境异常则结束该流程打包失败。如图9所示,发布之前判断tomcat环境是否异常,若tomcat环境正常对系统服务进行验证,若环境正常对系统服务进行验证如启动服务(servicestart)、停止服务(servicestop)、重启服务(servicerestart)、查看服务状态(servicestate),验证完成之后将项目发布到服务器中在页面进行查看;若发布失败则会提示服务器环境异常,此时应检查tomcat服务器中的配置文件或版本号是否出现问题。如图2所示,本发明实施例提供了一种数据库连接信息表、数据对象表和数据属性表的实施例关系图。其中,数据库连接信息表的主键是数据对象表的外键,数据对象表的主键是数据属性表的外键,从而使这三张表形成一个上下串联的有机整体。数据库连接信息表具体包括存储库实例主键、元数据库信息id、存储库类型id、存储库ip、储存库端口号、存储库显示名称、存储库名称、存储库编码、存储库描述、存储库版本号、是否来自本系统、是否有效、版本号、创建时间、修改时间、创建人、修改人、删除标记、配置信息、驱动类、最大连接池大小、最小连接池大小、初始连接池大小、最大空闲时间、连接工厂名、节点路径和存储类型。数据对象列表包括存储库对象id、存储库实例id、模式id、父id、对象类型id、对象名称、对象显示名称、对象别名、存储位置、对象大小、大小单位、记录数、是否有效、版本号、文件备份数、文件块大小、对应业务、备注、创建时间、修改时间、创建人、修改人、删除标记和节点路径。数据属性表具体包括存储对象属性主键、存储库对象id、属性类型id、父id、属性名称、属性显示名称、属性别名、属性长度、属性精度、能否为空、默认值、是否为主键、是否为外键、是否有效、版本号、列族名、列族别名、创建时间、修改时间、创建人、修改人、删除标记、备注、节点路径、是否索引字段、是否列族和无效原因。所述服务访问单元9包括信息录入模块10、权限验证模块11、访问日志记录模块16、数据脱敏模块17和数据查询模块12,所述信息录入模块10用于输入用户的身份信息,并验证用户的身份信息是否正确,若正确,则将用户的身份信息发送给权限验证模块11,若不正确,则输出错误信息,所述权限验证模块11用于验证用户是否有权访问服务,若没有权利访问,则输出无权利访问信息,若有权利访问,则进一步验证用户能够访问所述服务下对应的数据对象,并将用户的授权情况发送给数据查询模块12,所述数据查询模块12依据用户的授权情况调用底层服务进行服务查询,获取查询结果,并将查询结果发送给服务输入输出模块6,所述数据脱敏模块17用于将授权后的服务中有敏感字段的数据对象进行数据脱敏,并将数据脱敏后的服务发送给服务输入输出模块6。具体的,如图3所示,用户通过信息录入模块10录入用户的身份信息,信息录入模块10主要验证用户输入的账号信息是否正确,若正确,则将用户的身份信息发送给权限验证模块11,若不正确,则输出错误信息。访问日志记录模块16进行日志初始化,开始组装日志信息,比如访问的服务编号、访问日期、请求者信息(请求者账号、请求者访问ip)等。权限验证模块11首先验证用户是否有权访问服务,以用户的身份信息为索引进行查询,如果找到说明有权访问,如果没有找到说明没有权限访问。如果用户有权限访问服务,则进一步验证用户能够访问服务下的哪些数据对象。比如服务s_a有5个输出参数分别是a、b、c、d和e,请求者u_a被授权允许访问服务s_a,并且被授予了输出参数a、b和c的访问权限,我们在验证数据权限时,会过滤掉请求者没有被授权的输出参数。对于授权的数据对象,如果授权的服务中有敏感字段的配置信息,数据脱敏模块17就会对服务中敏感字段的数据采用混淆掩码的技术进行脱敏处理。利用混淆掩码的技术进行数据的脱敏类似于火车票身份信息脱敏,即将需要脱敏的数据中部分内容统一替换成设定好的掩码,例如:13812345678,脱敏为138*****678。访问日志记录模块16对上述整个过程的访问日志进行记录并保存,所述访问日志至少包括请求时间、请求响应时间、请求者编号、请求者所用ip、服务编号、请求信息、请求结果和请求结果数据量中的一种或多种。服务输入输出模块6将授权后的服务呈现给用户。具体的,在本发明技术方案不仅包含底层服务实现,还包括上层服务总线的部分功能,因此在整个流程中能够充分控制数据的使用。首先在底层服务实现层面,本发明在服务实现层中增加了日志记录功能,能够记录查询服务时一共返回数据量大小、整个查询过程是否产生异常(具体的异常信息是什么)、能够记录精确的查询用时(去除安全验证所耗费的时间)其次在服务总线层面,本申请在其中也增加日志记录功能,由于每次访问都是在服务总线中验证用户token信息,因此日志能够记录访问者信息(账号、访问所用ip)、访问时间等。在本实施例中,如图1所示,还包括服务负载查询管理模块18,所述服务负载查询管理模块包括:框架搭建模块13,用于搭建springboot框架,运行springcloud中的网关组件。注册中心15和各服务间根据心跳进行检测服务的状态状态,包括但不限于服务是否存活,网关14通过注册中心15实时检测各个节点负载情况。具体的,各个服务节点启动后,会在注册中心15中进行注册,这样注册中心中15就有了所有服务节点的信息,并且有监控页面,可以在页面中直观的看到所有注册的服务的情况。同时有心跳机制,当某个节点服务在规定时间内没有发送心跳信号时,注册中心15会从服务注册表中把这个服务节点移除,服务节点包括各个负载以及网关14等功能部件,都会维持心跳,检测对应状态。springboot是由pivotal团队提供的全新框架,其设计目的是用来简化新spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用springboot的开发风格做到一键启动和部署。spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过springboot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。在本发明中,springcloud一方面很好的解决了负载均衡问题,同时springcloud还提供了大量的组件,例如断路器等,这些组件有助于拓展模块功能,减少项目开发量,另一方面springcloud有利于项目的后期扩展,其可插拔的组件式开发模式将模块与整体隔离开来,使后期的升级成为可能。网关14,接收权限验证模块11发送的授权情况并根据查询请求控制数据查询模块12选择所要请求的服务节点下负荷较小的节点分发所述查询请求。具体的,网关14通过注册中心15检测各个服务节点的心跳频率,以此来得知各个服务节点的负载情况。所述负载包括请求负载和数据负载中的一种或多种。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1