`
eya
  • 浏览: 41885 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Spring Security ,Apache Shiro的对比及数据级权限实现

阅读更多

如题。

 

  以前搞过一阵子的Spring security,现在看来,这个东西除了能和Spring更好的整合外,其它的没有什么太明显的优点。

 现在的SpringSecurity显得太笨重了。 一大堆的Filter层层过滤,一个简单的请求,最少得经过它的8Filter左右,让人很不爽。以及一大堆配置,虽然提供了简化配置,但是哪有完全符合自己需求的东西,最后还是得自己慢慢研究文档和源码。另外,学习曲线也不低。

 最后,它的那个ACL方案纯粹是摆设(数据过滤在查询后、提供另外的几个表来维护权限数据,当数据量很大时,不太现实),我相信很少人会把它的那个方案应用到生产环境中。实际上运用Spring MVC的拦截器就能轻松的实现它绝大部分的功能。

  InfoQ上看到一篇文章介绍了 Apache-shiro

http://www.infoq.com/cn/articles/apache-shiro

 

看上去感觉还不错,至少比Spring Security强(连Spring的官方都不用Spring Security,而用的Shiro),但是不知道如何才能实现数据级权限.有人说细粒度权限是和业务整合在一起的,无法实现通用。既然都提炼出了细粒度和权限这两个词,说明还是有共通的地方,目前国内关于Shiro的资料还很少,有了解的指导一下Shiro的学习及细粒度权限实现

 

  之前已经有人发过权限探讨的帖子了,感觉最后也没有讨论出什么结果,这个东西基本上在每个应用中都会出现的。再次发帖

分享到:
评论
25 楼 从零开始单排有人帮 2015-05-14  
细粒度的控制,我想了一个方式:
所有资源有一个唯一的uuid标识,通过用户对这个uuid拥有的权限做全套的权限判断
24 楼 jackyrong 2013-08-04  
eya 写道
dancewing 写道

在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条

不知道有没有考虑过规则很多的情况下,SQL超长的问题?



不知道楼主如何解决这个问题的?
23 楼 jackyrong 2013-08-04  
请教下,数据权限的话,你是用AOP的方法,注入权限规则的SQL么?
22 楼 alan2012 2012-04-12  
对于eya采用规则,我也觉得这是比较灵活的,但现在还些地方不知道如何处理。我认为权限是有很多种类型的,比如功能权限、数据权限、流程节点权限,我想知道配置规则如果与实例应用结合一起,对于功能权限一般只是允许或是禁止操作,对于数据权限则是要重新封装SQL了。
21 楼 a_alter 2011-05-25  

至于那些 数据级别的 业务逻辑相关的, 个人觉得还是不纳入权限 概念 ,规则引擎如何
20 楼 a_alter 2011-05-25  
springsecurity 看的有点累啊 因为没有去使用它  现在还停留在 URL 权限拦截 和 RBAC 的权限模型的冲突上 ,Shiro 没听过 可以了解下
19 楼 mmBlue 2011-05-24  
eya 写道
mmBlue 写道
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。

Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。



有没有 Shiro的详细资料和说明



http://apache.etoak.com//shiro/1.1.0/shiro-root-1.1.0-source-release.zip
解压后samples里面。

springside4:
http://springside.googlecode.com/svn/springside4/trunk/examples/mini-web


文档不是很多,除了官方外,网上找到过的:
http://www.ibm.com/developerworks/cn/opensource/os-cn-shiro/
18 楼 eya 2011-05-20  
mmBlue 写道
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。

Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。



有没有 Shiro的详细资料和说明
17 楼 mmBlue 2011-05-20  
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。

Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。
16 楼 eya 2011-05-17  
eya 写道
dancewing 写道

在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条

不知道有没有考虑过规则很多的情况下,SQL超长的问题?


1,如果是换做你硬编码的话,SQL的长度也少不了多少
2,这样做的好处在于灵活,当你权限规则变了的话,修改一下配置就可以了,如:部门经理审批金额为30万以下的
   你只需要改一下规则, 如果硬编码及团队协作的话。规则改变后,再去搞代码的话,很费劲
3,与应用解耦。权限本来就是一个独立的东西,和业务混合在一起。对开发和维护都不便
15 楼 cwx714 2011-05-17  
Spring Security已经发展了好几年了,算是Java领域中比较成熟的一个安全框架了。在项目中还是继续用Spring Security,Apache Shiro还需要观望。
14 楼 hesy_007 2011-05-17  
dancewing 写道

在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条

不知道有没有考虑过规则很多的情况下,SQL超长的问题?
13 楼 pior 2011-05-17  
各系统的业务数据都不一样``通用的框架不太好做的这么细吧```

12 楼 eya 2011-05-16  
一般的增删查改,大多数应用都是放在一个通用的基类里面,如果采用这种方法的话,只需定义好权限规则即可,不必满处都是和业务系统耦合相关的代码:如if(xxx>yy)
else ...
当业务规则调整时,只需简单更改Ruleinfo即可
  而不必到处去找到底哪些地方有判断
11 楼 eya 2011-05-16  
上面说了查询过滤。顺便说一下增删改的过滤方法
增删改时:
可以根据ruleInfo 检验此次操作的实体对象,是否匹配这个规则,运用反射及工具类很容易就实现了。




10 楼 eya 2011-05-16  
dancewing 写道

说到细粒度的权限控制,比如domain 级别的,只是控制好你读取方法的权限就行了,个人觉得不需要用ACL那些玩意,那...蛋疼。。


读取方法的权限,还是方法级别的。我想做到的是:
1、有一个Customer信息表,业务员甲能看到自己的客户,业务员乙也能看到自己的客户,部门经理能看到本部门的客户,总经理能看到全部客户。
2、有一个交易金额表,拥有甲权限的能看到金额小于1万的数据,拥有乙权限的能看到金额小于100万的数据,
。。。。

以前有一个想法:
(一),将权限表划分为
1、 用户(user) id username  password
2、 角色(role) id rolename
3、用户角色(userrole) userid roleid
4,权限(auth): id authname
5, 规则(ruleinfo): id ruleInfo ruleType
6, 权限规则(authrule): authid,ruleinfoid
  7,资源(resource) id resourcetype resource
  8 ,权限资源(authresource) authid resourceid

  和普通的权限方案最大的不同就是多了一个权限规则
系统初始化时的缓存内容:
    (1)、资源及权限的对应关系
     (2)、角色-权限规则的对应关系
     (3)、权限规则

处理流程

1,用户登录时,获取用户角色,根据角色-权限规则对应关系,把当前用户所拥有的权限规则放入每个用户的上下文中。
2、 在web下,设置一个Filter,这个filter中,可以获取到用户的访问地址(基于URL拦截),如果存在于资源权限对应中,则进行拦截
3、判断此资源所需要的权限,如果当前用户上下文的权限匹配所需要的全部权限,则放行,
4、根据资源权限关系,获取到权限,根据权限,获取到权限规则, 将此次请求的权限规则放入请求线程中,如SecurityContextHolder中
5,程序中可以根据权限规则列表动态组装SQL 及拦截

举例: /user/list.do地址显示所有的用户 需要的权限为USER_VIEW
当前用户 拥有USER_VIEW权限,及权限规则列表
   (一) ruleInfo="department_EQS" ruleType="department"(部门)
   (二)ruleInfo="age_GTI_40" ruleType="free"(自定义)
在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条件)。如果用Hibernate,非常比较方便
 
至少,比Spring Security的事后拦截比起来:第一,无需额外的几张表;二,没有太多的Filter,就一个 ,
三、速度和效率肯定比SS强,资源在初始化的时候就加载 四:调用方法时过滤处理的数据更少,已经将不符合条件的过滤掉了 五:便于分页,如果采用SS的话,每页50条,SS在调用方法返回时过滤掉若干条,返回来的页面,每页的结果总是不同

  关键是权限规则的定义和设置
JAVAEYE里面的牛人很多,给点指导意见!
9 楼 liukai 2011-05-16  
Spring side4也把权限矿建换成shiro了
等SS4正事发布的时候大家都可以看看
8 楼 liukai 2011-05-16  
Spring Security的学习曲线确是是太高了.过于厚重.
(如前面有人说的ACL).
springSecurity我感觉能自定义userdetailedservice,页面标签基本够用了

但是shiro的问题在于demo太少.
在目前中国这个环境不可能用于实际生产中.
我估计大概2年后才会出现比较多的实际应用中的讨论贴.

7 楼 dancewing 2011-05-16  
现在的Spring Security 的确过于庞杂,远没有当时Acegi Security 1.0 那会简单,虽然Acegi Security 的结构简单,但是功能却一点不含糊,可扩充性也好。
至于Shiro,还是比较简单的一个权限框架,我在使用Shiro 与 Tapestry 整合的时候,也发现了一些问题,个人觉得Shiro 用起来不是很顺手
Shiro 呢,可以通过Annotation 拦截,有几个定义权限的Annotation,并定义了想对应的Hanlder,Annotation可以是Type 级别的,也可以是Method 级别的。So,如果和Spring MVC 整合,只需要写2个对应的拦截器就ok了。
说到细粒度的权限控制,比如domain 级别的,只是控制好你读取方法的权限就行了,个人觉得不需要用ACL那些玩意,那...蛋疼。。
6 楼 feiyan35488 2011-05-16  
<div class="quote_title">eya 写道</div>
<div class="quote_div">
<p> </p>
<p class="MsoNormal"><span>如题。</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>  </span></span><span>以前搞过一阵子的</span><span lang="EN-US">Spring security</span><span>,现在看来,这个东西除了能和</span><span lang="EN-US">Spring</span><span>更好的整合外,其它的没有什么太明显的优点。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span> </span></span><span>现在的</span><span lang="EN-US">SpringSecurity</span><span>显得太笨重了。</span> <span>一大堆的</span><span lang="EN-US">Filter</span><span>层层过滤,一个简单的请求,最少得经过它的</span><span lang="EN-US">8</span><span>个</span><span lang="EN-US">Filter</span><span>左右,让人很不爽。以及一大堆配置,虽然提供了简化配置,但是哪有完全符合自己需求的东西,最后还是得自己慢慢研究文档和源码。另外,学习曲线也不低。</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt;"><span lang="EN-US"><span> </span></span><span>最后,它的那个</span><span lang="EN-US">ACL</span><span>方案纯粹是摆设(数据过滤在查询后、提供另外的几个表来维护权限数据,当数据量很大时,不太现实),我相信很少人会把它的那个方案应用到生产环境中。实际上运用</span><span lang="EN-US">Spring MVC</span><span>的拦截器就能轻松的实现它绝大部分的功能。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>  </span></span><span>在</span><span lang="EN-US">InfoQ</span><span>上看到一篇文章介绍了</span>
<span lang="EN-US">Apache-shiro</span><span>:</span></p>
<p class="MsoNormal" style="text-indent: 21.0pt;"><span lang="EN-US"><a href="http://www.infoq.com/cn/articles/apache-shiro">http://www.infoq.com/cn/articles/apache-shiro</a></span></p>
<p class="MsoNormal" style="text-indent: 21.0pt;"><span lang="EN-US"> </span></p>
<p class="MsoNormal" style="text-indent: 21.0pt;"><span>看上去感觉还不错,至少比</span><span lang="EN-US">Spring Security</span><span>强(连</span><span lang="EN-US">Spring</span><span>的官方都不用</span><span lang="EN-US">Spring Security</span><span>,而用的</span><span lang="EN-US">Shiro</span><span>),但是不知道如何才能实现数据级权限</span><span lang="EN-US">.</span><span>有人说细粒度权限是和业务整合在一起的,无法实现通用。既然都提炼出了细粒度和权限这两个词,说明还是有共通的地方,目前国内关于</span><span lang="EN-US">Shiro</span><span>的资料还很少,有了解的指导一下</span><span lang="EN-US">Shiro</span><span>的学习及细粒度权限实现</span></p>
<p class="MsoNormal"><span lang="EN-US"> </span></p>
<p class="MsoNormal"><span lang="EN-US"><span>  </span></span><span>之前已经有人发过权限探讨的帖子了,感觉最后也没有讨论出什么结果,这个东西基本上在每个应用中都会出现的。再次发帖</span></p>
</div>
<p>感觉spring security的确很复杂,我看了一些源码,然后自己用它的设计思路,自己整了一个简单的security框架,够用就好。</p>

相关推荐

    Spring Security和Shiro的相同点与不同点整理

    Spring Security和Apache Shiro都是Java领域中广泛使用的安全框架,它们为应用程序提供了强大的身份验证、授权和会话管理功能。虽然两者在很多方面有相似之处,但也有各自的特点和适用场景。 **相同点:** 1. **...

    spring boot+shiro 权限认证管理案例

    Spring Boot 和 Apache Shiro 的整合是企业级应用中常见的权限认证和安全管理方案。Spring Boot 提供了简化 Java 应用程序开发的框架,而 Shiro 是一个轻量级的安全框架,专注于身份验证、授权、会话管理和加密。...

    springsecurity,shiro

    Spring Security和Apache Shiro都是Java领域内的主流安全框架,它们提供了一整套解决方案来保护应用程序免受未经授权的访问和攻击。让我们详细探讨这两个框架的核心概念、功能以及它们如何帮助开发者实现安全性。 ...

    spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

    Spring Security可以作为Spring Boot的安全模块,但在这里我们选择了Apache Shiro来处理权限控制。 **Apache Shiro** Apache Shiro是一个轻量级的安全框架,它专注于认证、授权(权限)和会话管理。在本项目中,...

    SpringSecurity与shiro的使用

    Shiro数据来源 Shiro的数据来源有三种: 1. 数据库:从数据库中获取用户信息。 2. 静态ini文件:从静态ini文件中获取用户信息。 3. 会话:从当前会话中获取用户信息。 Shiro运行流程 Shiro的运行流程如下: 1. ...

    权限管理shiro学习总结

    3. 实现授权:通过配置Shiro的Realm,关联数据源,实现权限的获取和校验,可以精确到具体的操作权限。 七、粗粒度与细粒度权限管理 1. 粗粒度权限管理:主要关注资源类型,如角色可以访问哪些模块或页面。 2. 细...

    Shiro+Spring Security学习文档

    在IT安全领域,Apache Shiro和Spring Security是两个非常重要的框架,它们主要用于应用程序的安全管理,包括身份验证、授权、会话管理和加密等。本学习文档集合了这两个框架的相关知识,旨在帮助开发者深入理解和...

    Spring Boot与Shiro实现权限管理

    Spring Boot和Apache Shiro是两个常用的技术框架,它们可以很好地协同工作,实现用户认证和授权功能。下面将详细介绍如何利用这两个工具来搭建一个强大的权限管理系统。 **Spring Boot** Spring Boot是Spring框架的...

    spring+shiro 增删改查权限控制

    当我们谈论“spring+shiro 增删改查权限控制”时,我们实际上是在讨论如何利用这两个框架实现对应用程序数据操作的权限管理和用户认证。 首先,Spring框架提供了模型-视图-控制器(MVC)架构模式,使得开发者可以更...

    spring boot 集成 shiro

    Realm 是 Shiro 认证和授权的核心组件,用于连接应用数据源并处理用户身份验证和权限检查。你需要自定义 Realm 类,继承 `AuthorizingRealm` 并实现其中的 `doGetAuthenticationInfo` 和 `doGetAuthorizationInfo` ...

    Spring Boot+Apache Shiro+Spring MVC+MyBatis+Quartz+Druid DEMO

    这是一个基于Spring Boot、Apache Shiro、Spring MVC、MyBatis、Quartz和Druid的数据源管理框架的示例项目,名为"renren-security"。这个DEMO提供了完整的权限管理和任务调度解决方案,下面是这些技术栈的核心知识点...

    apache shiro 实例

    Apache Shiro 是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。本实例将深入探讨 Apache Shiro 的核心概念和常见用法。 1. **认证**:Shiro 提供了用户身份...

    Spring整合Shiro做权限控制模块详细案例分析

    在本文中,我们将深入探讨如何将Spring框架与Apache Shiro安全框架整合,以实现一个强大的权限控制模块。Spring是企业级应用开发的事实标准,而Shiro则是一个轻量级的安全框架,提供了身份验证、授权、会话管理和...

    spring boot shiro demo项目

    Spring Boot Shiro Demo项目是一个基于Spring Boot框架与Apache Shiro实现的权限管理示例,旨在帮助开发者快速理解和应用Shiro进行权限控制。相比Spring Security,Shiro通常被认为更易于理解和使用,更适合小型到...

    spring-shiro.rar

    本文将深入探讨"spring-shiro.rar"这个压缩包中的入门示例,帮助开发者理解如何在Spring项目中集成Shiro,实现用户身份验证和权限控制。 一、Spring与Shiro概述 1. Spring框架:Spring是Java企业级应用开发的事实...

    Spring boot shiro

    Apache Shiro 是一个轻量级的安全框架,它提供认证、授权、加密和会话管理功能,适用于Web和非Web应用。Shiro的设计简单,易于理解和集成,使得开发者可以快速添加安全特性到项目中。 **三、Spring Boot 集成Shiro*...

    Spring Boot整合Shiro.zip

    - **Shiro与Spring的集成**:Shiro可以与Spring的AOP结合,实现方法级别的权限控制;还可以通过Spring的事件监听机制处理用户登录登出事件。 - **安全过滤器链**:根据应用需求,定制过滤器链,配置合适的过滤规则...

    Spring Boot-Shiro-Vue的权限管理思路.前后端都加以控制

    尽管最新版本已经移除了Shiro,但类似的权限管理功能可以通过Spring Security等其他安全框架实现,基本思路仍然相同。总的来说,Spring Boot负责后端逻辑处理和权限验证,Vue.js负责前端界面的动态展示和权限控制,...

    springMVC+hibernate+spring+shiro整合例子

    Apache Shiro是一个轻量级的安全框架,主要用于身份认证、授权(权限控制)和会话管理。Shiro可以轻松地在任何Java应用中集成,为应用提供强大的安全控制,包括登录验证、权限分配、会话管理等。相比Spring Security...

    spring-shiro-demo

    【标题】"spring-shiro-demo" 是一个基于Spring和Apache Shiro框架的示例项目,旨在展示如何在Java Web应用中整合这两个强大的安全框架来实现用户认证和授权。 【描述】"spring-shiro-demo" 提供了实际操作的代码,...

Global site tag (gtag.js) - Google Analytics