【转载】JavaEE权限管理分析
JavaEE权限管理分析
一.背景
在 Web 应用开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。如果在应用开发的后期才考虑安全的问题,就可能陷入一个两难的境地:一方面,应用存在严重的安全漏洞,无法满足用户的要求,并可能造成用户的隐私数据被攻击者窃取;另一方面,应用的基本架构已经确定,要修复安全漏洞,可能需要对系统的架构做出比较重大的调整,因而需要更多的开发时间,影响应用的发布进程。因此,从应用开发的第一天就应该把安全相关的因素考虑进来,并应用在整个应用的开发过程中。
二.权限管理需求
1.权限管理应该拥有的功能
(1)管理权限:可以灵活地管理角色、分配权限,并将角色赋予系统相关用户以及认证、授权。并为系统其他模块提供授权信息支持。
(2)功能级权限管理:不同角色的用户访问相应权限的内容或数据。
(3)数据级权限管理:对系统数据进行增、删、改、查必须在相应权限范围内.
2.权限管理模块的期望
(1)简单、易操作,满足系统权限需求,可以跟现有系统无缝整合
(2)应对需求变更能力强
(3)既能提供功能级权限又能提供数据级权限。
(4)有相关界面,比如权限管理界面、角色管理界面,角色和权限关系维护界面,用户和角色关系维护界面。
三.主流权限管理中间件或者框架
1.Spring security
简介:
前身是Acegi,Acegi成为Spring子项目后改名为Spring Security。Spring Security 为基于J2EE企业应用软件提供了全面安全服务。特别是使用领先的J2EE解决方案-Spring框架开发的企业软件项目。
原理:
利用filter和session机制,为当前用户认证并授权,将授权信息存放于session中,以便在系统中随时调用。
主要功能点:
(1)url访问控制,支持正则表达式匹配和通配符
(2)资源权限可配(需要自行实现)
(3)Md5加密和盐值加密
(4)系统任意地方获取当前认证用户信息
(5)管理session,保证同一用户不能同时在两个地方登录
(6)基于cas (Center Authentication Service)的单点登录
(7)支持无状态客户端的验证,比如HttpInvoker或者Web Service的认证
(8)支持指定http和https
(9)自动登录
(10)防御session伪造
(11)支持ldap获取用户信息
(12)支持标签库
(13)支持aop以及annotation方式实现对方法或bean使用权的认证
优点:
比较成熟(业界老大),提供了完整的权限控制框架,自由度较高,对功能级别的控制能力较强,便于管理,可以跟使用了spring框架的项目进行无缝集成,可扩展能力较强,支持各种认证方式,为以后的业务扩展有一定的帮助。
缺点:
比较笨重,对数据级别的权限控制能力较弱,配置信息较复杂,学习难度大。可以说是一个半成品,需要根据系统情况,对其功能进行完善。(可以实现很多很多强大的功能)
2.Shiro
简介:
前身是J-security ,是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。
Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:
认证 - 用户身份识别,常被称为用户“登录”;
授权 - 访问控制;
密码加密 - 保护或隐藏数据防止被偷窥;
会话管理 - 每用户相关的时间敏感的状态。
原理:
Shiro对web系统的权限管理也类似于spring security,使用过滤器来创建上下文,认证、授权。
主要特点:
(1)易于理解的 Java Security API;
(2)简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
(3)对角色的简单的签权(访问控制),支持细粒度的签权;
(4)支持一级缓存,以提升应用程序的性能;
(5)内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
(6)异构客户端会话访问;
(7)非常简单的加密 API;
(8)不跟任何的框架或者容器捆绑,可以独立运行。
优点:
易于使用 - 易用性是这个项目的最终目标。
广泛性 - 没有其他安全框架可以达到Apache Shiro宣称的广度,它可以为你的安全需求提供“一站式”服务。
灵活性 - Apache Shiro可以工作在任何应用环境中。虽然它工作在Web、EJB和IoC环境中,但它并不依赖这些环境。Shiro既不强加任何规范,也无需过多依赖。
Web能力 - Apache Shiro对Web应用的支持很神奇,允许你基于应用URL和Web协议(如REST)创建灵活的安全策略,同时还提供了一套控制页面输出的JSP标签库。
可插拔 - Shiro干净的API和设计模式使它可以方便地与许多的其他框架和应用进行集成。你将看到Shiro可以与诸如Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin这类第三方框架无缝集成。
支持 - Apache Shiro是Apache软件基金会成员,这是一个公认为了社区利益最大化而行动的组织。
缺点:
只支持系统级别的访问权限控制,不涉及业务层面的权限控制。而且学习文档较少,不容易深入挖掘。
3.Ralafafe
介绍:
Ralasafe 是用Java编写的开源(MIT协议)访问控制中间件。它能够轻松处理登录控制、URL权限控制和(业务级)数据级权限管理,实现权限与业务分离。Ralasafe是一款开箱即用的中间件,XML配置和JAVA编程工作量非常少,基本都使用图形化操作方式。非常简单易用,开发经验不丰富,也能很快学会。
原理:
权限管理与业务逻辑分离,通过制定策略模式,实现对业务逻辑以及数据层面的权限管理控制。提供api或者webservice接口供系统调用来判断权限。
优点:
(1)现成的权限配置界面
(2)可以与系统部署在不同server上
(3)精细到数据级权限分配管理力度。
缺点:
由第三方开源组织提供支持,使用范围不是很广,参考文档较少。偏重于数据级别的权限管理。
原文出处:http://www.sunnyhui.com/post/2012-08-23/40037163504