【转载】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
【转载】JavaEE权限管理分析的更多相关文章
- 【Java】JavaWeb权限管理
权限管理分析 每个网站都涉及到访问权限的控制.每个站点资源都需要被管理起来,用户只有具有访问某个资源的特定权限,才能够访问,否则拒绝访问.网站的访问权限控制,一种方法从 URI 入手,站点的每个资源都 ...
- 【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】
一.权限计算相关分析 1.如何存储权限 首先说一下权限保存的问题,一个系统中最多有多少权限呢?一个大的系统中可能有成百上千个权限需要管理.怎么保存这么多的权限?首先,我们使用一个数字中的一位保存一种权 ...
- RBAC用户权限管理数据库设计【转载】
本文转载自:https://www.kancloud.cn/martist/ma_zhao_liu/374123 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色-权 ...
- SpringMVC+Shiro权限管理(转载)
源码 http://pan.baidu.com/s/1pJzG4t1 SpringMVC+Shiro权限管理 博文目录 权限的简单描述 实例表结构及内容及POJO Shiro-pom.xml Shir ...
- NopCommerce源代码分析之用户验证和权限管理
目录 1. 介绍 2. UML 2.1 实体类UML图 2.2 业务相关UML图 3. 核心代码分析 3.1 实体类源代码 3.2 业务相关源代码 3.3 相关控制器源代码 3.4 ...
- OA系统权限管理设计(转载)
不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是 ...
- JAVAEE——BOS物流项目11:在realm中授权、shiro的方法注解权限控制、shiro的标签权限控制、总结shiro的权限控制方式、权限管理
1 学习计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 n 在spring文件中配置开启shiro注解支持 n 在Action方法上使用注解 3.★使用shiro的标签进行 ...
- MVC身份验证及权限管理(转载)
from https://www.cnblogs.com/asks/p/4372783.html MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供 ...
- JavaEE权限管理系统的搭建(五)--------RBAC权限管理中的权限菜单的显示
上一小节实现了登录的实现,本小节实现登录后根据用户名查询当前用户的角色所关联的所有权限,然后进行菜单的显示.登录成功后,如下图所示,管理设置是一级菜单,管理员列表,角色管理,权限管理是二级菜单. 先来 ...
随机推荐
- EL表达式中的“+-x/”四种运算符和条件,比较运算符等
<%@page import="cn.hncu.domain.User"%><%@ page language="java" import=& ...
- Java基础知识强化之集合框架笔记72:集合特点和数据结构总结
1. 集合 (1)Collection(单列集合) List(有序,可重复): ArrayList:底层数据结构是数组,查询块,增删慢.线程不安全,效率 ...
- position定位问题
position属性规定了元素的定位类型,默认为static.该属性还可以有下值:absolute:生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位.fixed:生成绝对定位的 ...
- HTTP请求类型详解
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务 器)请 ...
- ActiveMQ系列(1) - 使用入门
没网的日子真的不好过啊 1.背景: 对于常见业务中,数据并发是一个很头疼的问题,很多时候,会出现资源共享导致线程阻塞的问题,这时候问题就来了,,,老板也尾随来了,来 ...
- SQLServer实现split分割字符串到列
网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题. 先贴上某大牛写的sp ...
- ubuntu安装mariadb
参考网址:https://downloads.mariadb.org/mariadb/repositories/ 以ubuntu12.04安装mariadb10为例.具体其他的可以参考给出的参考网址H ...
- 跳转界面方法 (runtime实用篇一)
在开发项目中,会有这样变态的需求: 推送:根据服务端推送过来的数据规则,跳转到对应的控制器 feeds列表:不同类似的cell,可能跳转不同的控制器(嘘!产品经理是这样要求:我也不确定会跳转哪个界面哦 ...
- OC单例模式的实现
SingleClass.m #import <Foundation/Foundation.h> @class SingleClass; static SingleClass *instan ...
- 节点插入--对比jQuery和JavaScript方法(一)
二.插入元素: 1 <div> 2 <p>面朝大海,春暖花开</p> 3 </div> (一).jQuery方法 1.在节点内部插入: 方法 说明 ap ...