java权限系统的技术演变历史

简介:

      JAVA的权限管控在平台化和企业化得过程中大体经过了如下的阶段:

 

       权限系统功能上分为两部分:认证+鉴权。

 

      1. 标准JAAS时代。在最早的时候,J2ee时代,Java提出了标准的鉴权服务,即jaas。tomcat,jboss,weblogic等容器都支持这一标准,只是配置略有不同。通过简单的容器配置和文件配置,通过一个LDAP(可以用数据库,只是效率不高),就可以提供一个极为高效便捷的权限管控服务。这个模式不仅支持页面管控,还支持ejb服务接口管控。非常高效。其鉴权因为ldap的数倍于数据库的查询效率而无需任何缓存,速度很快。业务系统的代码,没有任何入侵,当你仅仅只是想有有个简单和通用的鉴权模型,且各个系统互相隔离,甚至没有SSO,独立部署,并且并发量大,这种模式是最完美的。但是问题来了,第一,当应用的数量无限度增长,这种散落在各个容器的配置给容灾和修改,都带来了极大的挑战。其二,ldap的可读化差,修改和编辑极为不便,当需求一旦个性化超过了树能够表达的模型便很难在适应,也就是一旦超过过经典权限模型的范畴,便很难适应。其三,当ldap的数据爆炸式增长,且呈现28规律时(数据冷热不均),或者如果需要频繁的写ldap,查询效率会陡然下降。所以这种模式今天已经不是很流行了。但是在大量使用标准中间件产品的公司,包括银行都还大量部署这种模式的权限管控。实际上我们看到后来的SpringSecurity也是支持了这个标准的,只是不是基于容器,而是基于Spring的配置。
      2.统一登录(SSO)+接口鉴权时代。既然分散的登录认证不能解决问题,那么很自然的就是统一登录,SSO,单点登录。权限系统通过引导将需要鉴权的系统引导到统一的登录中心,进行登录。那么问题就来了,这就需要权限系统能够保证登录风暴的压力。此外超过了经典权限模型的数据类型,必须要放弃LDAP转回到数据库,那么因为放弃了标准的jaas鉴权,那么权限系统就需要提供接口鉴权服务,或者依赖统一的分布式session,将权限在登录时注入进去。所以在去除jaas方式的ldap后,因为失去了ldap天然的高效检索能力(耗时约为数据库的百分之一),在经典的RBSC(基于角色的鉴权模型)下,如何最终将数据库格式化、规正化的权限数据,聚合和散列到:人-权限,就尤为重要。采取NOSQL或者各种这类扁平化的模型,使得鉴权服务能够一步拿到最终权限数据,是一种通俗的做法。但是,当无法解决数据散列和聚合问题的时候,如果存在登录风暴和海量鉴权诉求时,采用接口鉴权将有灾难性的后果。
    3.统一登录(分布式Session)+接口鉴权时代。在回到分布式session:基于SSO的系统,因为没有共享session,所以系统间的跳转,都需要一次接口鉴权,而分布式session很好的共享和缓存了用户的权限信息。这是一个双刃剑,这是以牺牲用户权限的实时性,作为替代。同时,一旦分布式session出现技术问题,如果垮掉,后果不堪设想。此外分布式session比较适合经典的权限模型,一旦超出了这个领域,实际上就没法再预先注入所以数据,必须要提供鉴权接口。即:统一登录+接口鉴权。
   此外,java标准鉴权模型没能很好的解决数据权限的问题,所以权限系统长期以来,很难界定数据权限的适用范围和如何建设一个通用的数据权限模型,所以实际过程中,我们看到所谓的通用的权限系统,都没有解决这部分问题,而具体的各个实际遇到该问题的系统的解决方案,更是千差万别。此外,很多系统都没能解决一个那就是如何通过权限反向查询人的问题,因为这个会带来更大的性能消耗。
    建设一个仅仅只是满足鉴权目的权限系统并不复杂,复杂在于权限系统是企业管理的一部分,甚至是很关键的一部分,随着企业管理和运营要求的不同,权限系统所面临不仅仅是技术问题,而是如何管理的问题,不断演化的企业人员组织架构和业务条线,都对权限管理提出了新的诉求和差异化的要求,而且不断的有业务模型和超过经典权限模型的数据进入权限系统的范畴,都给权限系统的设计者们增添额不少的挑战。无论如何建设一个用户量少的权限系统是一个比较容易的事情且不用太担心性能的问题,如果建设一个满足十万级、百万级用户的权限系统,是一个极富挑战的工作。

目录
相关文章
|
6天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
33 11
|
15天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
50 7
|
15天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
1月前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
45 1
|
1月前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
34 7
|
1月前
|
移动开发 前端开发 Java
过时的Java技术盘点:避免在这些领域浪费时间
【10月更文挑战第14天】 在快速发展的Java生态系统中,新技术层出不穷,而一些旧技术则逐渐被淘汰。对于Java开发者来说,了解哪些技术已经过时是至关重要的,这可以帮助他们避免在这些领域浪费时间,并将精力集中在更有前景的技术上。本文将盘点一些已经或即将被淘汰的Java技术,为开发者提供指导。
108 7
|
1月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
53 3
|
1月前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
19 2
|
1月前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
31 4
下一篇
DataWorks