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标准鉴权模型没能很好的解决数据权限的问题,所以权限系统长期以来,很难界定数据权限的适用范围和如何建设一个通用的数据权限模型,所以实际过程中,我们看到所谓的通用的权限系统,都没有解决这部分问题,而具体的各个实际遇到该问题的系统的解决方案,更是千差万别。此外,很多系统都没能解决一个那就是如何通过权限反向查询人的问题,因为这个会带来更大的性能消耗。
建设一个仅仅只是满足鉴权目的权限系统并不复杂,复杂在于权限系统是企业管理的一部分,甚至是很关键的一部分,随着企业管理和运营要求的不同,权限系统所面临不仅仅是技术问题,而是如何管理的问题,不断演化的企业人员组织架构和业务条线,都对权限管理提出了新的诉求和差异化的要求,而且不断的有业务模型和超过经典权限模型的数据进入权限系统的范畴,都给权限系统的设计者们增添额不少的挑战。无论如何建设一个用户量少的权限系统是一个比较容易的事情且不用太担心性能的问题,如果建设一个满足十万级、百万级用户的权限系统,是一个极富挑战的工作。
相关推荐
Java Applet技术文档是关于Java在Web环境中运行小程序的详细指南,特别适合初学者学习。...随着技术的发展,虽然Applet的使用已不如从前广泛,但了解其工作原理和历史对于理解现代Web技术的演变仍然具有重要意义。
9. **版本控制**:项目可能使用Git进行版本控制,查看Git提交历史可以帮助理解代码的演变过程和修复的问题。 10. **构建工具**:Maven或Gradle可能是项目的构建工具,它们管理依赖并自动化构建过程,如编译、打包和...
【描述】本文档详细阐述了使用Java Web技术构建一个BBS论坛的过程,涵盖了从系统分析、设计到实现的各个环节。 【标签】Java-Web 【部分内容】提及了学生成绩管理系统,使用了IIS+ASP网页编程+ACCESS数据库+SQL...
7. **版本控制**:作为源码项目,可能使用了Git进行版本控制,用户在下载源码前可以通过Git历史查看代码的演变过程。 8. **构建工具**:为了自动化构建、测试和部署,项目可能使用了Maven或Gradle,它们负责管理...
1.1 BBS历史背景:BBS(Bulletin Board System)起源于早期的计算机通信网络,是互联网上的一种信息交流方式,随着时间的发展,逐渐演变为现代的论坛形式。 1.2 BBS制作目的:创建一个便于用户互动交流的平台,提高...
在Java编程环境中,调用摄像头是一项常见的需求,特别是在开发基于Web或桌面应用...随着技术的发展,现代Web应用更多地倾向于使用HTML5的媒体API,但了解这些传统方法对于理解Java多媒体编程的历史和演变仍然很有价值。
Java VSS,全称Java Visual SourceSafe,是基于Java语言实现的一个与Microsoft Visual SourceSafe (VSS) 兼容的版本控制系统工具。本手册旨在帮助用户理解和掌握如何使用Java VSS进行版本控制,以实现代码的高效管理...
Java Applet是Java技术在早期Web开发中的一种应用方式,它允许开发者创建可以在浏览器中运行的...虽然现代Web开发中Java Applet已较少使用,但了解其工作原理对理解Web技术的历史发展和现有技术的演变具有重要意义。
文档的修订历史部分也提及了版本和作者的信息,这为了解文档的演变提供了背景。 综上所述,文档内容不仅介绍了PARANSQL和HAWQ的关联以及在数据库操作中的应用,还涉及到了PL/Java在Java和数据库之间交互的技术细节...
由于安全原因,Java Applet运行在沙箱环境中,不能访问用户的文件系统或网络,除非用户明确授予了权限。这限制了Applet的某些功能,但也保护了用户的安全。 **5. Applet的使用与局限** 随着Web技术的发展,Java ...
这个开源项目为初学者提供了了解和实践Java Web开发的机会,同时也为研究老旧技术的演变提供了宝贵的资源。 1. **Java编程语言**:作为基础,Java是这一体系结构的核心,它是一种面向对象的编程语言,具有跨平台、...
Java Applet小程序是一种基于Java技术的轻量级应用程序,它可以在Web浏览器中运行,为用户提供交互式的体验。在Web的早期,Applet是...对于学习和理解Java历史以及Web开发的演变,Java Applet仍然是一个有价值的课题。
商品销售管理系统源于传统的零售业管理方式,随着电子商务的兴起和发展,它逐步演变为集在线展示、交易处理、库存控制、订单管理等多功能于一体的集成化系统。如今,此类系统在提升运营效率、优化客户体验等方面具有...
- **Java语言的发展**:讲述Java从最初的版本到现在的演变过程。 - **Java语言的关键特点**:详细介绍Java的面向对象、简单高效、与平台无关等核心特点。 - **Java语言的主要应用方向**:概述Java在不同领域的...
在这个课程设计中,学生将利用Java EE的核心技术,如JSP(JavaServer Pages)、Servlet和JavaBean,来构建一个个人博客系统。 1. **选题背景** 在信息化时代,博客作为一种在线自我表达和知识分享的平台,深受用户...
3. **安全稳定**:Java拥有强大的安全性机制,包括沙箱模型、权限检查和类加载器系统等,确保了代码的执行安全。 4. **支持多线程**:Java内置了对多线程的支持,使得开发者可以轻松地创建并发应用程序,提高程序的...
尽管如此,理解Java Applet的运行机制及其可能出现的问题仍然是学习Java历史和技术演进的重要部分。 当"java applet运行出现异常"时,这通常意味着在尝试执行Applet的过程中遇到了错误。这种异常可能是由多种原因...
《使用Java创建Web小应用程序》 在Web开发领域,Java是一种强大的编程语言,它提供了创建...尽管现在小应用程序已不再是主流,但了解这一历史和技术可以帮助我们更好地理解Web开发的演变,以及现代Web应用的工作原理。
11. **版本控制**:项目源码可能来自Git仓库,了解Git提交历史可以帮助我们理解代码的演变过程。 通过阅读和理解易买网项目的源码,开发者可以提升Java Web开发技能,学习到如何组织和管理大型项目,以及如何优化...
- **Java的历史与发展**:虽然书中并未明确提及,但考虑到本书的编写背景,可以推测作者可能会从Java的发展历程出发,介绍其演变过程中的关键转折点,以及这些变化是如何影响到Java当前的核心特性的。 ##### 第二章...