WEB应用数据权限控制
- 格式:pdf
- 大小:441.10 KB
- 文档页数:10
如何在前端项目中实现用户权限与访问控制在前端项目中实现用户权限与访问控制是一个重要且常见的需求。
通过实现权限控制,我们可以确保只有授权的用户才能访问特定的页面或执行特定的操作,提高系统的安全性和可靠性。
在本文中,我们将探讨一些常用的方法和技术,以帮助你在前端项目中有效地实现用户权限与访问控制。
1. 角色与权限的设计在开始实现用户权限与访问控制之前,首先需要设计角色与权限的模型。
角色和权限是权限控制的基本单元。
角色定义了用户在系统中的身份,而权限定义了用户可以访问的资源或执行的操作。
通常,一个用户可以拥有多个角色,而每个角色可以拥有多个权限。
根据需求,可以将角色和权限进行细分,以实现更精细化的权限控制。
2. 身份验证在用户登录时,需要对用户进行身份验证。
常用的身份验证方式包括用户名密码验证、第三方登录和单点登录。
验证用户的身份后,可以在后端生成并返回一个用于后续请求的令牌(token)。
令牌可以存储在浏览器的本地存储(如Cookie或LocalStorage)中,以便后续请求时进行验证。
3. 前端路由控制前端路由控制是实现页面级别权限控制的重要手段。
通过在路由定义中添加权限配置,可以控制特定页面或路由需要的最低权限。
在路由导航时,可以根据用户的权限和角色信息,判断是否允许访问该页面或路由,并进行相应的跳转或展示。
4. 动态菜单生成一个常见的需求是根据用户的权限动态生成菜单。
根据用户当前的角色和权限信息,可以在前端动态生成菜单,并根据权限隐藏或禁用不可访问的菜单项。
这样用户只能看到他们具备权限的菜单项,提供了更友好和安全的用户界面。
5. 列表级别的访问控制在一些需要对数据进行展示和操作的列表页面上,通常需要对列表中的每一行进行权限控制。
这意味着根据用户的权限只显示他们有权限查看或操作的数据。
通过在前端发送请求时携带角色和权限信息,后端可以根据用户权限的变化返回对应的数据。
6. 权限管理界面为了更方便地管理用户角色和权限,可以开发一个权限管理界面。
前端权限控制的方法随着互联网的不断发展,越来越多的企业和机构开始注重Web应用的开发。
在Web应用中,安全是非常重要的一环,尤其是权限控制。
前端的权限控制要求非常高,往往需要在客户端和服务端同时进行控制,以保证数据的安全和隐私。
在前端的权限控制中,最常用的方法是基于角色的访问控制(RBAC)。
RBAC是一种安全模型,通过将用户分配给角色,然后将权限分配给角色,再将角色分配给用户,来实现对系统资源的访问控制。
在Web应用中,我们可以将用户角色和权限信息存储在数据库中,通过接口来进行访问和授权。
在实现RBAC的过程中,我们可以采用以下几种方法来进行前端的权限控制:1. 前端路由控制:在前端路由中定义权限,根据用户的权限来控制路由的访问。
当用户访问没有权限的路由时,可以通过路由守卫来实现跳转。
2. 控制按钮权限:在Web应用中,按钮往往代表着某个功能的实现,如果用户没有权限访问该功能,则需要将该按钮禁用或隐藏。
3. 权限指令控制:在Vue或Angular等框架中,可以使用指令来控制页面元素的显隐或禁用。
当用户没有权限时,指令可以修改页面元素的属性,使其不可见或不可用。
4. 后端接口控制:除了前端控制以外,还可以在后端开发中对访问接口进行权限控制。
在用户访问接口时,后端可以根据用户的角色和权限来进行访问控制,只有被授权的用户才能访问相应的接口。
上述方法并不是一成不变的,开发者需要根据具体项目的需求来选取适合的方法。
在具体实现的过程中,需要注意以下几个方面:1. 需要对用户的输入进行严格的验证和过滤,以避免SQL注入和跨站脚本攻击等安全漏洞。
2. 需要对用户的身份验证进行严格的检查,确保用户的身份信息正确、有效。
3. 需要对角色、权限、用户等数据进行妥善的管理,保证数据的完整性和安全性。
4. 需要定期进行安全审计和漏洞扫描,及时发现和解决安全隐患。
总之,前端的权限控制是Web应用开发中不容忽视的一环。
只有在权限控制上下功夫,才能保证数据的安全和隐私,提高Web应用的可信度和实用性。
权限管理1.需求分析1.1 背景B/s 权限管理功能是进行B/s设计的通用模块,包含了个性化界面设计、权限管理设计、通用数据库操作设计的方面,涉及的知识有:html、javascript、java web 面向对对象程序涉及、sqlserver数据库、数据库设计。
1.2任务概述1. 主要功能● 权限主体:单位、角色、普通人员、管理人员。
单位内部门构成层级结构;每个部门下拥有不同的角色,每个角色下拥有若干的人员;每个部门下拥有若干的人员;每个单位至少拥有一名管理人员。
● 受控内容:功能构成层级结构。
功能的构成有:名称、URL、顺序号、打开方式、功能描述。
● 分配要求:1)最上级部门的管理人员拥有全部功能权限,它可以将自己拥有的功能权限分配给下级部门的管理人员,依次类推,每个部门的管理人员可以将自己拥有的权限分配给本部门的人员。
2)分配方式有:给子部门赋权限,则此部门下所有人都拥有此权限;按角色分配权限,则拥有此角色的人都拥有此权限;对具体的人分配权限,方式又有两种,一种是指定人,将功能分配给这个人;另一种是指定功能,选择具有此功能权限的人;3)有些功能是受权限控制的,而有些则不受权限控制,即任何用户都可以拥有此功能。
2. 登录管理人员和使用人员以“_”为区分,管理人员负责权限分配,而用户负责系统功能的使用。
● 以管理员登录:分别对部门、角色、人员进行维护;对功能属性进行维护。
● 使用人员:登录后,看到其所能看到的功能。
1.3运行环境规定1.设备本项目采用普通的PC 机,其上安装Windows2000 以上版本或XP 即可。
2.支持软件1、安装JDK1.52、应用服务器采用:Tomcat3、数据库采用SQLSever1.4 整体框架图2.详细设计2.1模块分为业务功能和功能管理:在此次实习中我主要完成了各个模块中的增加,删除和修改部分,以下为各个模块及功能的函数入口及函数。
1) 业务模块入口:Module.jsp分支1:FormReceiveJSP_manager_forRight.jsp、FormReceiveJSP_role_forRight.jspFormReceiveJSP_user_forRight.jsp。
Web应用中的数据隐私保护研究随着Web应用的普及,我们越来越多地使用互联网来完成各种事情,例如在线购物、社交媒体、在线支付等等。
但是,随着用户信息在互联网上传输和存储,数据泄露和隐私侵犯等问题也越来越严重。
因此,如何保护Web应用中的数据隐私成为了一个重要的研究方向。
一、Web应用中数据隐私泄露的危害隐私泄露是Web应用面临的最大威胁之一,可能会导致严重后果。
首先,泄露用户的个人信息可能导致身份盗窃。
例如,个人身份证号码、银行账户号码、信用卡信息以及其他敏感信息都有可能被黑客盗取。
其次,10年前沃尔玛出售客户购买记录给政府机构的新闻轰动全球,这表明匿名数据本身也可能会暴露出敏感信息。
最后,用户的财务情况、健康状态、工作、家人、兴趣爱好等都有可能被泄露,导致潜在的威胁和伤害。
二、Web应用中的数据隐私保护方法1. 加密技术加密是保护Web应用中隐私的最常见手段,它是对数据进行编码,以防止未经授权的使用者阅读和理解数据。
直接加密数据可以保证数据在传输和存储过程中的安全性。
但是,加密仅可减轻黑客攻击,并不是现代Web应用安全的完美解决方案。
2. 脱敏化脱敏化可以保护敏感信息,使其无法被识别出来,比如手机号码的中间四位用*代替。
但是,脱敏不仅无法完全保护隐私,而且还会破坏数据的完整性,在某些场景下使用不当会导致信息丢失。
3. 访问控制访问控制是Web应用程序的一项基本安全措施。
它通常包括身份验证和授权,以防止未经授权的用户访问敏感数据和操作系统。
但是,它也可能会有漏洞,黑客可以通过攻击职员账户或直接入侵系统进行访问。
三、Web应用数据隐私保护的未来趋势1. 隐私保护合规框架的发展如GDPR(欧洲通用数据保护条例)、CCPA(加利福尼亚消费者隐私法)等法规已经出台,Web应用开发者和服务提供商应该遵守隐私保护法规,保障消费者的数据隐私权。
2. 人工智能技术的应用人工智能技术在隐私保护中的应用正在迅速发展。
前端开发知识:Web应用安全的最佳实践和防范措施Web应用安全的最佳实践和防范措施Web应用的安全性一直是互联网开发中不可忽视的重要部分。
尽管现在有很多先进的技术和工具可用于提高Web应用程序的安全性,但是没有一项具体的技术或安全性工具可以保持Web应用程序的100%安全,因此开发者需要关注Web应用程序的安全性,并采取一些最佳实践和预防措施来降低潜在攻击的风险。
1.使用HTTPS协议HTTPS是一种加密的通信协议,可以确保Web应用程序的数据安全性。
在使用HTTPS时,数据在传输过程中被加密,保护了数据在传输时不被窃听、篡改或伪造。
因此,使用HTTPS对于所有涉及交换敏感数据的Web应用程序来说是至关重要的。
2.限制访问权限限制Web应用程序的访问权限是防范攻击的重要措施。
应尽量减少不必要的权限,并限制对敏感数据和操作的访问权限。
比如,使用角色和权限管理系统对用户进行访问控制,从而防止未授权的操作和数据访问。
3.验证用户输入Web应用程序中,用户输入数据是最常被攻击的目标之一,而且它们也是风险最大的黑客攻击途径之一。
在接收用户输入之前,应该对其进行验证和过滤,以防止注入攻击和其他恶意操作。
同时,应该对敏感信息(如密码)使用良好的加密算法,以确保数据在传输和存储过程中得到保护。
4.防范跨站点脚本攻击(XSS)XSS攻击是指攻击者将恶意脚本代码嵌入到受害者浏览器中的网页中去,从而进行攻击的一种方式。
为了防范XSS攻击,应该使用HTML 编码来过滤输入,并禁止用户插入脚本代码。
应该将所有的用户输入数据以及在网站一些特定位置输入的数据进行过滤和编码。
5.防范跨站点请求伪造(CSRF)CSRF攻击是指黑客攻击者通过操纵受害者会话向网站进行发起恶意请求的攻击手段。
为了避免这种攻击,应该使用生成并验证每次请求的唯一令牌来防范CSRF攻击。
6.定期更新和安装安全补丁在Web应用程序的开发过程中,应该及时更新和安装安全补丁,来确保Web应用程序的安全性。
Web应用安全的检测与防护技术随着互联网的快速发展,Web应用的使用和普及已经成为了我们生活中不可或缺的一部分。
然而,Web应用的安全问题也愈发凸显出来。
为了确保用户信息的安全以及系统的正常运行,Web应用安全的检测与防护技术变得尤为重要。
本文将重点探讨Web应用安全的检测与防护技术,以期提供有效的解决方案。
一、Web应用安全检测技术1. 漏洞扫描漏洞扫描是一种常用的Web应用安全检测技术,用于检测Web应用程序中可能存在的安全漏洞。
常见的漏洞包括SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
通过自动化工具对Web应用程序进行扫描,可以发现潜在的漏洞并及时修复,提升Web应用的安全性。
2. 安全代码审计安全代码审计是一种手动的安全检测技术,通过对Web应用程序源代码的详细分析,找出可能存在的安全隐患。
开发人员可以通过审计识别不安全的代码逻辑,比如未经授权的访问、缓冲区溢出等,从而及时修复漏洞,提高应用的安全性。
3. 渗透测试渗透测试是一种模拟实际攻击的技术,通过对Web应用程序进行主动的安全测试,发现可能存在的安全风险。
通过模拟黑客攻击的方式,揭示系统的漏洞,并提供修复建议。
渗透测试能够全面评估Web应用系统的安全性,帮助开发人员制定更有效的防护策略。
二、Web应用安全防护技术1. 输入验证输入验证是确保Web应用的一个基本安全措施。
通过对用户输入的数据进行验证和过滤,可以防止恶意用户利用各种攻击手段,比如SQL注入、跨站脚本攻击等。
合理的输入验证以及使用专门的输入验证函数库,能够有效地防止Web应用程序受到常见的安全威胁。
2. 访问控制访问控制是保护Web应用中敏感信息和资源的一种方式。
通过对用户身份、权限进行控制和管理,确保只有授权用户能够访问相应的数据和功能。
权限控制可以在应用层面进行,也可以在服务器端进行设置,提供了有效的安全防护。
3. 安全日志记录与监控安全日志记录与监控是Web应用安全中重要的组成部分。
数据库权限管理控制数据访问权限数据库是企业中存储和管理数据的关键工具。
为了保护敏感数据并确保数据的安全性和完整性,数据库权限管理是至关重要的。
通过合理设置和控制数据访问权限,可以防止非授权人员获取敏感信息,同时提供灵活性和便捷性给有权限的用户。
一、引言数据库权限管理是指通过设置和控制用户对数据库对象(如表、视图、存储过程等)的访问权限,以及对数据操作的权限(如读、写、更新等)。
合理的权限管理能够确保数据只被有权限的用户访问,从而提升数据的安全性和保护隐私。
二、数据库权限管理的重要性1. 数据保密性:权限管理可针对敏感数据进行限制,只允许有相应权限的用户访问,防止泄露和滥用。
2. 数据完整性:权限管理可限制用户对数据的修改,确保数据的完整性和可靠性。
3. 数据可靠性:合理的权限设置可以防止误操作或非法操作,提高数据库的稳定性和可靠性。
4. 合规要求:许多行业都有相关的合规要求,要求数据库提供严格的权限管理,以满足法律和监管部门的要求。
三、数据库权限管理的方法和策略1. 用户认证和授权:数据库管理系统允许管理员创建和管理用户账号,并为每个用户分配不同的权限。
管理员应该为每个用户设置强密码,定期更新密码,并及时删除离职员工的账号。
2. 角色权限管理:通过创建角色并为其分配权限,可以简化权限管理过程。
将用户分配到相应的角色,权限的调整只需要在角色层面进行,而不需要对每个用户进行单独设置。
3. 细粒度权限控制:除了限制对整个对象的访问权限,数据库还提供了细粒度的权限控制功能,如列级权限和行级权限。
通过限制用户对数据的具体字段或行的访问,可以更精细地管理权限。
4. 审计和监控:数据库应该记录用户的访问操作,包括登录、查询、修改等,并定期进行审计和监控,及时发现和防止非法操作或异常行为。
5. 数据备份和恢复:权限管理也要考虑数据备份和恢复操作的权限,相关操作应该仅限于授权的人员,以防止数据的损坏或丢失。
四、数据库权限管理的最佳实践1. 需求分析:在权限管理前,需要对企业的业务需求进行充分的分析和理解,明确每个用户或角色所需的权限和访问级别。
webconfig权限控制(转)今天偶然看了一篇关于Forms应用的文章收益颇多,写出来给大家分享。
说起对网站权限,记得以前做法是每个页面都进行判断,对webconfig 的使用少之又少今天说说webconfig 对网站权限的判断。
户文件夹(我们暂定user 文件夹):只有用户登录以后才能访问。
否则该访客只能访问user文件夹的登录页面(user_login.aspx)管理员文件夹(暂定admin文件夹):管理员文件夹不让任何人服务,当用户登录以后只能访问管理员登陆页(admin_login.aspx),管理员登陆后才能访问全部页面。
根目录:根目录可以让任何人访问。
目录结构如下:第一步:根目录下config 代码:<authentication mode="Forms"><forms name="UserCookies"loginUrl="Default.aspx"></forms></authentication> <authorization><allow users="*"/> </authorization> 第二部:Global.asax 头部添加<%@ Import Namespace="System.Security.Principal" %> void Application_AuthenticateRequest(object sender, EventArgs e) { if (er != null){ //如果用户通过验证,则该项不为nullif (er.Identity.IsAuthenticated){ if (er.Identity is FormsIdentity){ FormsIdentity id = (FormsIdentity)er.Identity; FormsAuthenticationTicket ticket = id.Ticket;string userData = erData;//取出角色数据string[] roles = userData.Split(',');er = new GenericPrincipal(id, roles);//重新分配角色} } } } 第三部:admin文件夹config 文件<?xml version="1.0" encoding="utf-8"?><configuration><appSettings/&g t;<connectionStrings/><locationpath="admin_login.aspx"> <system.web><authorization> <allow roles="user"/></authorization></system.web></location><system.web><authorization> <allow roles="admin"/><deny users="*"/></authorization></system.web></configuration& gt; admin_login.aspx cs 代码如下:protected voidButton1_Click(object sender, EventArgs e) { if (tbUserName.Text == "xiaomiao") { //生成验证票据,其中包括用户名、生效时间、过期时间、是否永久保存和用户数据等。
WEB应用数据权限控制轻量级解决方案aliang2012-3-2目录1前言 (3)2方案目标 (4)3设计思路 (4)4逻辑流程图 (6)5数据库表设计 (7)6关键技术点 (7)7方案应用 (8)8总结 (9)1前言很早就想把自己关于WEB应用中数据权限控制的思考写出来同大家分享,一直没有抽出时间,今天总算把此码成文字,以便能给对此感兴趣的朋友提供一种思路。
在许多应用开发中我们都会涉及到权限管理,当然,权限管理主要分两部分,即功能权限和数据访问权限。
针对功能权限的控制,想必很多朋友都有很成熟的方案,在此不再废话。
本文档主要探讨在WEB应用开发中的数据权限控制。
现在,许多的软件公司开发WEB应用都是利用开源框架S(Struts)S(Spring)H(Hibernate)或S(Struts)S(Spring)I(ibatis)来进行WEB应用开发的。
关于数据权限的控制一般都是在代码开发时对访问数据库数据的SQL语句添加涉及数据权限控制的WHERE条件来实现。
这样做的弊端就是在开发时就要详细分析哪些数据需要加入权限控制,并且这些关于数据权限控制的代码散布到整个应用中。
一旦需要调整时就要对许多的SQL语句扒拉一边进行修改,很是耗费精力。
在做项目时,我也同样经受过这样的痛苦,于是我就想,能否把WEB应用的数据权限控制独立出来,就象Spring和切面编程一样,做到代码侵入度最低,灵活方便的添加数据权限控制。
于是就有了我下面的思考和验证。
许多成熟的开发平台都有自己的一套关于数据权限控制的方案,这些控制都是依托数据集来完成的,通过把数据访问的规则加到数据集上来实现对数据访问的控制。
但在WEB应用开发中,这些开源框架中都没有数据集的概念或展现,准确的说是很难在开发或运行状态下获取到有哪些数据集及数据项。
其实数据集的本质就是SQL语句返回的结果集(从XML或表格文件等形成的数据集不在此讨论范围),对数据集加入数据访问控制就是对SQL语句加入数据过滤条件。
既然开源框架中没有数据集可用,那我们是否可以把数据访问控制直接应用到数据库表或视图上来达到目的呢?经过思考和验证完全可以做到。
2方案目标做到代码低侵入度,在开发时不需要太多关注数据权限控制,可以在应用开发完成后,通过对表和视图定义权限控制策略,然后绑定到登录用户或功能URI 上来进行数据权限控制。
数据访问控制需要调整时,只需要修改定义的权限策略即可。
3设计思路数据权限控制需要解决的主要问题就是谁能访问哪些数据。
只要搞定谁正在访问哪些表或视图,即可在运行时根据定义的数据访问策略加入数据权限控制。
如何找到访问数据库表和视图的访问者是个问题。
WEB应用开发中一般登录人员的信息都是保存在Session中,但Session中保存的信息只能Struts的Action 或Servlet能够访问,Server层和ORM层都是不能访问Session中存储的登录者信息的,而最终访问数据库的SQL语句也只有在Datasource层才是最完全的,登录者信息不能通过调用对象方法时以参数方式传递,否则代码的改动和侵入度就太高了。
要找到一种方法和一个点,即能获取到访问者信息又能获取到执行的SQL语句即可完成数据权限控制。
1、对需要进行数据权限控制的表和视图定义访问策略。
定义数据访问策略实际上就是定义要添加到表的Where条件。
但同一个数据访问策略条件,不同的登录者访问将具有不同的结果。
这就要求添加到Where 条件中要含有访问者信息。
比如登录者只能看到自己所属机构的数据,那定义的访问策略条件中就要含有登录者所属机构号。
要做到这点就要事先定义系统参数项,例如定义@LOGIN_ORG_ID代表登录者所属机构,在运行时添加数据访问权限(定义的数据访问策略)时,把定义的的数据访问策略中的@LOGIN_ORG_ID 替换为登录者所属机构号即可实现目的。
当然这些定义的访问策略是要保存到数据库内。
表的设计也很简单,只需要两个字段,一个BOJECT_NAME字段(存储表名或者视图名),一个SQL WHERE字段(存储用户访问控制的WHERE条件语句)。
而且要开发一个定义这些策略的WEB功能。
一般常用的系统参数项有://当前请求地址的系统参数ID:"@REQUEST_URI";//当前登录用户的IP的系统参数ID:"@LOGIN_IP";//当前登录用户的系统ID的系统参数ID:"@LOGIN_USER_ID";//当前登录用户的姓名的系统参数ID:"@LOGIN_USER_NAME";//用户口令:"@DLOGIN_PASSWORD";//当前登录用户的登录时间点的系统参数ID:"@LOGIN_DATETIME";//当前登录用户的登录帐号的系统参数ID:"@LOGIN_USER_LOGID";//当前登录用户的所属机构ID的系统参数ID:"@LOGIN_ORG_ID";//当前登录用户的所属机构名称的系统参数ID:"@LOGIN_ORG_NAME";//当前登录用户的所属部门ID的系统参数ID:"@LOGIN_DEPT_ID";//当前登录用户的所属部门名称的系统参数ID:"@LOGIN_DEPT_NAME";//当前登录用户的所属岗位ID的系统参数ID: "@LOGIN_STATION_ID";//当前登录用户的所属岗位名称的系统参数ID:"@LOGIN_STATION_NAME";2、开发一个为用户或角色和URI分配数据访问策略的WEB功能页面。
定义的数据访问策略不仅可以绑定到用户或角色,而且可以绑定到请求URI 上。
为每一个登录用户在内存中维护一套数据访问策略数据,确实会占用一些内存资源,大部分访问数据的URI对每一个登录用户使用相同的数据策略,针对不同登录用户只是策略语句中需要替换的参数值不同而已,这样倒可以把数据访问策略绑定到URI请求上,那么对于系统URI的策略只需要维护一份数据即可。
所以两种绑定方法(绑定到用户或URI)应该结合使用。
3、在登录验证功能中,当登录验证通过时初始化好定义的系统参数项值,同时获取绑定到此用户的数据访问策略,一并保存到Session内。
对于系统定义的参数项值,每一个登录用户的值都是不一样的,这就要为每个登录用户维护一套系统参数项值,其实也就是登录用户的属性信息,可以添加到MAP中并保存到此登录用户的Session中,以MAP表的键值对(map的key 就是定义的参数项)形式存储的目的就是为了替换数据策略条件中的参数项时方便获取,直接调用map的get(key)即可获取键值对应的值。
4、添加一个filter,在每次提交页面请求时把登录用户的信息放到线程内。
每次页面的URI请求,从请求开始到处理到最后的Response返回就是一个线程。
我们把登录用户的信息存贮到线程内(包括本次请求的URI),在datasoure 提交SQL语句前取出线程内的登录用户信息,并根据定义的数据权限策略改写SQL语句添加数据访问条件,然后再提交给数据库执行改写后的SQL语句即可。
5、实现一个分析SQL语句并根据数据访问策略定义添加数据权限的过程。
从SQL语句中分析出所访问的表和视图确实是个比较复杂的过程,虽然繁琐但也不是不可为。
利用正则表达式匹配我们可以完美做到对SELELECT、DELETE、UPDATE、INSERT语句进行分析,甚至包括语句中的子查询或者使用了表别名都没问题,难度不太大的一个主要原因就是此分析仅仅只需要获取访问的表或视图。
当然我提供的分析过程只验证了ORACLE数据库语法。
其他数据库的验证如果有问题可以在进行修正。
不过关键的语法都是通用的,差别较大的只是各数据库的函数而已,应该问题不大。
6、实现DataSource的代理。
需要代理类有:DataSource、CallableStatement、PolicyStatement、Statement,这样做的目的就是全面接管DataSource及DataSource创建的对象,主要目的还是在提交SQL语句前改写SQL语句。
4逻辑流程图此数据权限控制方案只需要在前端添加一个filter过滤器和后端添加一个DataSource代理,以及登录代码中获取绑定的数据策略(在登录代码中获取相关用户属性和绑定的数据策略保存到Session中是为了不用每次页面提交请求时都去访问数据库),此对现有的系统代码侵入度应该是比较低的。
添加或去除此数据控制方案也比较容易。
5数据库表设计功能URI登记表和角色表此处就不再列出。
6关键技术点1、Filter如何把用户信息和绑定的数据策略放入到本线程内Java提供了一个ThreadLocal类,可以在一个类中定义一个静态的ThreadLocal,在系统第一次加载类时创建一个实例:private static ThreadLocal threadLocalSession = new ThreadLocal();此类同时提供set和get方法操作此对象threadLocalSession,每个线程直接把自己需要的信息(登录用户信息和绑定到用户/角色的数据策略)整合成一个MAP对象set到threadLocalSession内,在使用时调用get方法获取即可。
不同的线程不会覆盖别的线程set到threadLocalSession的对象。
本人提供的DataPolicyEngine.java类中包含有相关代码。
2、在源SQL中添加绑定的数据策略在Datasource代理层获取到执行的SQL语句,然后分析出SQL中所访问的数据库表或视图。
再根据绑定到URI或访问用户上的数据策略来改写执行的SQL 语句,同时替换数据策略中使用的系统参数。
本人提供的DataPolicyEngine.java 类中包含有相关代码。
Datasource代理层捕获到执行的SQL语句后调用DataPolicyEngine 类中提供的方法(方法所完成的工作是分析SQL语句同时添加数据访问策略并替换策略中的系统参数)。
3、Datasoruce代理配置所提供的示例代码中Datasoruce代理是运用Spring的对象注入方式,其配置代码在applicationContext-resources.xml内。
7方案应用本次提供的部分代码没有涉及同URI绑定数据策略的代码,其实同URI绑定数据策略与用户绑定策略的方法类似,可以把同URI绑定的数据策略存储在静态类中实现。