一种基于Mybatis拦截器实现数据行权限的方法技术

技术编号:30317637 阅读:16 留言:0更新日期:2021-10-09 23:20
本发明专利技术涉及数据安全技术领域,具体是一种基于Mybatis拦截器实现数据行权限的方法,包括以下步骤:S1、在数据库设计之初加入数据权限列字段,添加创建人、标识公司ID或部门ID,在数据入库时根据当前登录用信息对这两个数据进行设值,S2、创建一个Java自定义注解,作用到方法级别,S3、创建Spring AOP切面,拦截所有请求,S4、创建Mybatis拦截器,拦截“prepare”方法,S5、获取当前用户标识和组织ID,在配置文件配置用户ID和组织ID获取的Java方法,本发明专利技术不仅能够降低SQL与项目耦合性,使得开发人员在开发过程中只关注业务实现,而且提供灵活的数据行权限配置方式,满足企业或用户的多样化需求,能够增加数据行权限,使得更精细化的控制数据的访问权限,提升数据的安全性。提升数据的安全性。提升数据的安全性。

【技术实现步骤摘要】
一种基于Mybatis拦截器实现数据行权限的方法


[0001]本专利技术涉及数据安全
,具体是一种基于Mybatis拦截器实现数据行权限的方法。

技术介绍

[0002]如何有效地保证数据的安全,实现数据的保密性,对如今的数据库系统来说是至关重要的,因为数据库中存放着大量的数据,这些数据可供拥有一定职责和权力的用户共享。但是,很难严格的限制用户只能得到一些与他们权力相当的数据。
[0003]在现有很多系统中,要实现数据行级权限控制,一般是在SQL中加入用户过滤条件,类似于userid=xxx,orgid in(xxx,xxx),由于现在项目大多采用Mybatis,在Mybatis的每个XML文件的SQL中都要去加入这个条件,这样的方式有一定的局限性,而且侵入性过大,对于已实现的功能都需要做改造,工作量也很大,在Mybatis中执行SQL的过程都能通过拦截器进行拦击,比如现有的分页是通过拦击SQL先执行COUNT,在对SQL进行重写分页参数而实现。

技术实现思路

[0004]本专利技术的目的在于提供一种基于Mybatis拦截器实现数据行权限的方法,以解决上述
技术介绍
中提出的问题。
[0005]本专利技术的技术方案是:一种基于Mybatis拦截器实现数据行权限的方法,包括以下步骤:
[0006]S1、在数据库设计之初加入数据权限列字段,添加创建人、标识公司ID或部门ID,在数据入库时根据当前登录用信息对这两个数据进行设值;
[0007]S2、创建一个Java自定义注解,作用到方法级别,在控制层的方法上加入该注解;
[0008]S3、创建Spring AOP切面,拦截所有请求,判断该请求是否在上述缓存中;
[0009]S4、创建Mybatis拦截器,拦截“prepare”方法,使其在执行SQL前对SQL重写;
[0010]S5、获取当前用户标识和组织ID,在配置文件配置用户ID和组织ID获取的Java方法。
[0011]优选的,所述步骤S3中若需要处理数据权限,则获取用户权限配置添加到当前线程中,所述当前线程包括有获取权限配置时,根据用户授权类型组装授权参数、将组装的授权信息存入Redis缓存中,使得下次使用时不需要重新查询和组装和在用户对数据权限重新配置后,获得最新的权限配置,将该缓存重新写入。
[0012]优选的,所述授权类型包括有自己、本公司、本部门、本公司及下属公司、本部门及下属部门、自定义和全部数据。
[0013]优选的,所述步骤S4中拦截器的方法包括有获取当前线程是否存在权限配置数据、检查SQL类型是否为SELECT类型、获取原始SQL,根据权限配置检查是否存在创建人或组织ID在SQL中追加WHERE条件和将重写后带有数据权限的SQL重新设置回Mybatis,使得在查
询时使用该SQL语句。
[0014]优选的,所述步骤S5中的配置用户ID和组织ID获取的Java方法为利用Java反射机制执行配置方法,获取用户标识和组织ID。
[0015]本专利技术通过改进在此提供一种基于Mybatis拦截器实现数据行权限的方法,与现有技术相比,具有如下改进及优点:
[0016]其一:本专利技术不仅能够降低SQL与项目耦合性,使得开发人员在开发过程中只关注业务实现,而且提供灵活的数据行权限配置方式,满足企业或用户的多样化需求,能够增加数据行权限,使得更精细化的控制数据的访问权限,提升数据的安全性;
[0017]其二:本专利技术不仅利用注解机制扫描和拦截请求,可控数据项配置由系统默认实现,减少人工繁琐操作,利用懒加载模式将授权信息缓存,提高系统数据处理速度,同时还能使得权限变更时及时刷新缓存,使得配置能实时生效,使用主流框架进行集成实现,降低学习成本的同时也能满足更多项目要求。
附图说明
[0018]下面结合附图和实施例对本专利技术作进一步解释:
[0019]图1是本专利技术的数据行权限的方法流程图;
[0020]图2是本专利技术的数据行权限的方法的拓扑图。
具体实施方式
[0021]下面对本专利技术进行详细说明,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0022]本专利技术通过改进在此提供一种基于Mybatis拦截器实现数据行权限的方法,本专利技术的技术方案是:
[0023]实施例一:
[0024]如图1

图2所示,本专利技术的技术方案是:一种基于Mybatis拦截器实现数据行权限的方法,包括以下步骤:
[0025]S1、在数据库设计之初加入数据权限列字段,添加创建人、标识公司ID或部门ID,在数据入库时根据当前登录用信息对这两个数据进行设值;
[0026]S2、创建一个Java自定义注解,作用到方法级别,在控制层的方法上加入该注解;
[0027]S3、创建Spring AOP切面,拦截所有请求,判断该请求是否在上述缓存中;
[0028]S4、创建Mybatis拦截器,拦截“prepare”方法,使其在执行SQL前对SQL重写;
[0029]S5、获取当前用户标识和组织ID,在配置文件配置用户ID和组织ID获取的Java方法。
[0030]进一步的,在上述技术方案中,所述步骤S3中若需要处理数据权限,则获取用户权限配置添加到当前线程中,所述当前线程包括有获取权限配置时,根据用户授权类型组装授权参数、将组装的授权信息存入Redis缓存中,使得下次使用时不需要重新查询和组装和在用户对数据权限重新配置后,获得最新的权限配置,将该缓存重新写入。
[0031]进一步的,在上述技术方案中,所述授权类型包括有自己、本公司、本部门、本公司及下属公司、本部门及下属部门、自定义和全部数据。
[0032]进一步的,在上述技术方案中,所述步骤S4中拦截器的方法包括有获取当前线程是否存在权限配置数据、检查SQL类型是否为SELECT类型、获取原始SQL,根据权限配置检查是否存在创建人或组织ID在SQL中追加WHERE条件和将重写后带有数据权限的SQL重新设置回Mybatis,使得在查询时使用该SQL语句。
[0033]进一步的,在上述技术方案中,所述步骤S5中的配置用户ID和组织ID获取的Java方法为利用Java反射机制执行配置方法,获取用户标识和组织ID。
[0034]工作原理:首先在数据库设计之初加入数据权限列字段,添加创建人、标识公司ID或部门ID,在数据入库时根据当前登录用信息对这两个数据进行设值,然后创建一个Java自定义注解,作用到方法级别,在控制层的方法上加入该注解,系统启动时扫描所有请求映射,将有该注解的所有访问链接缓存,便于后续使用,然后创建Spring AOP切面,拦截所有请求,判断该请求是否在如上述缓存中,若需要处理数本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Mybatis拦截器实现数据行权限的方法,其特征在于:包括以下步骤:S1、在数据库设计之初加入数据权限列字段,添加创建人、标识公司ID或部门ID,在数据入库时根据当前登录用信息对这两个数据进行设值;S2、创建一个Java自定义注解,作用到方法级别,在控制层的方法上加入该注解;S3、创建SpringAOP切面,拦截所有请求,判断该请求是否在上述缓存中;S4、创建Mybatis拦截器,拦截“prepare”方法,使其在执行SQL前对SQL重写;S5、获取当前用户标识和组织ID,在配置文件配置用户ID和组织ID获取的Java方法。2.根据权利要求1所述的一种基于Mybatis拦截器实现数据行权限的方法,其特征在于:所述步骤S3中若需要处理数据权限,则获取用户权限配置添加到当前线程中,所述当前线程包括有获取权限配置时,根据用户授权类型组装授权参数、将组装的授权信息存入Redis缓存中,使得下次使用时不需要重新查询...

【专利技术属性】
技术研发人员:杨帆徐清华肖渝
申请(专利权)人:重庆沄析工业互联网有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1