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

【转载】JavaEE权限管理分析的更多相关文章

  1. 【Java】JavaWeb权限管理

    权限管理分析 每个网站都涉及到访问权限的控制.每个站点资源都需要被管理起来,用户只有具有访问某个资源的特定权限,才能够访问,否则拒绝访问.网站的访问权限控制,一种方法从 URI 入手,站点的每个资源都 ...

  2. 【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】

    一.权限计算相关分析 1.如何存储权限 首先说一下权限保存的问题,一个系统中最多有多少权限呢?一个大的系统中可能有成百上千个权限需要管理.怎么保存这么多的权限?首先,我们使用一个数字中的一位保存一种权 ...

  3. RBAC用户权限管理数据库设计【转载】

    本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...

  4. SpringMVC+Shiro权限管理(转载)

    源码 http://pan.baidu.com/s/1pJzG4t1 SpringMVC+Shiro权限管理 博文目录 权限的简单描述 实例表结构及内容及POJO Shiro-pom.xml Shir ...

  5. NopCommerce源代码分析之用户验证和权限管理

    目录 1.  介绍 2.  UML 2.1  实体类UML图 2.2  业务相关UML图 3.  核心代码分析 3.1  实体类源代码 3.2  业务相关源代码 3.3  相关控制器源代码 3.4  ...

  6. OA系统权限管理设计(转载)

    不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是 ...

  7. JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理

    1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...

  8. MVC身份验证及权限管理(转载)

    from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...

  9. JavaEE权限管理系统的搭建(五)--------RBAC权限管理中的权限菜单的显示

    上一小节实现了登录的实现,本小节实现登录后根据用户名查询当前用户的角色所关联的所有权限,然后进行菜单的显示.登录成功后,如下图所示,管理设置是一级菜单,管理员列表,角色管理,权限管理是二级菜单. 先来 ...

随机推荐

  1. Servlet中的请求包含

    public class SrcIncludeServlet extends HttpServlet { public void doGet(HttpServletRequest request, H ...

  2. JDK 动态代理分析

    Java的代理有两种:静态代理和动态代理,动态代理又分为 基于jdk的动态代理 和 基于cglib的动态代理 ,两者都是通过动态生成代理类的方法实现的,但是基于jdk的动态代理需要委托类实现接口,基于 ...

  3. Linux启动遇到的问题

    双系统装的Ubuntu,在一次意外关机后无法进入图形界面,每次输入完密码进入桌面后又会退到密码输入界面.使用命令行df -hl查看发现根目录使用率达到100%.推测是因为意外关机导致的,但是找不到应该 ...

  4. .net+easyui系列--Pagination 分页

    使用 JS 创建分页 <div id="pat" style="background:#efefef;border:1px solid #ccc;"> ...

  5. overflow:hiddden与绝对定位的应用场景的事例

    做一个点击查看显示详细信息的效果. 说一下问题描述,最外面的父元素overflow-parent设置了overflow:hidden, 然后子元素overflow-child没有设置overflow, ...

  6. jQuery Validation Plugin学习

    http://blog.csdn.net/violet_day/article/details/14109261 jQuery Validation Plugin Demo 一.默认校验规则 (1)r ...

  7. ACM——完数

    完数 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:1930            测试通过:413 描述 自然数中,完数寥若晨 ...

  8. Flie类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. js的变量作用域

    js不支持块级变量作用域,而是包含它们的函数的作用域, 例如: function query() { ; ; i < ; i++) { var b = i; } return b + a; } ...

  10. SQL语句一点小心得

    在Sqlserver中 if 语句后面的语句加begin end 括起来 问题:执行速度问题,在存储过程中没有加begin end 执行速度很慢,加了begin end执行速度加快 ALTER PRO ...