spring security是否能解决我的问题?

sfffjhh 2009-04-19
最近一个项目,临时要加入权限管理,很烦,因为要改大量代码,于是上网看看,有什么好的解决方案,便找到了spring security,找了大量参考资料发现不适合初学者,看了一些帖子,说是spring security只能解决一些简单的问题,于是郁闷了.我想问,如果做一个权限管理,能创建用户,并分配角色,每个角色分配不同模块,每个模块再分配权限(增,删,改,查),用spring security能很好的解决吗?如果能给我个例子感激不尽..Email:sfffjhh@126.com(适合初学者的)
metadmin 2009-04-20
天哪,临时才说要加入权限管理啊。。


LZ说的可以用基于角色授权机制完成。也就是创建用户、创建角色、创建权限;然后给角色赋予权限,将角色付给用户。当用户访问某资源的时候,先判断该用户是否具有访问该资源的角色。
这也叫功能级权限控制。还有更细的数据级权限控制,楼主可能暂时没有涉及到。比如不同用户查询到的数据内容不同)


就Spring Security而言,可以提供认证,给Url,bean-method提供功能级权限认证。但创建用户、创建角色、创建权限、给角色赋予权限、给用户赋予角色,这些Spring Security可能没有提供相关服务。不知道是否提供了相关API。这个我没有深入研究
sfffjhh 2009-04-20
是啊,以前没做过的..
sfffjhh 2009-04-20
metadmin 写道
天哪,临时才说要加入权限管理啊。。


LZ说的可以用基于角色授权机制完成。也就是创建用户、创建角色、创建权限;然后给角色赋予权限,将角色付给用户。当用户访问某资源的时候,先判断该用户是否具有访问该资源的角色。
这也叫功能级权限控制。还有更细的数据级权限控制,楼主可能暂时没有涉及到。比如不同用户查询到的数据内容不同)


就Spring Security而言,可以提供认证,给Url,bean-method提供功能级权限认证。但创建用户、创建角色、创建权限、给角色赋予权限、给用户赋予角色,这些Spring Security可能没有提供相关服务。不知道是否提供了相关API。这个我没有深入研究

如果这样的话,那我创建用户以及赋权直接代码实现,至于增加,删除之类操作用Spring Security控制好了,能否给个例子,本人初学者...
metadmin 2009-04-20
看看这个,有相关认证代码呀。
http://www.iteye.com/topic/364132
bencmai 2009-05-04
metadmin 写道
天哪,临时才说要加入权限管理啊。。


LZ说的可以用基于角色授权机制完成。也就是创建用户、创建角色、创建权限;然后给角色赋予权限,将角色付给用户。当用户访问某资源的时候,先判断该用户是否具有访问该资源的角色。
这也叫功能级权限控制。还有更细的数据级权限控制,楼主可能暂时没有涉及到。比如不同用户查询到的数据内容不同)


就Spring Security而言,可以提供认证,给Url,bean-method提供功能级权限认证。但创建用户、创建角色、创建权限、给角色赋予权限、给用户赋予角色,这些Spring Security可能没有提供相关服务。不知道是否提供了相关API。这个我没有深入研究



完全可以,而且能做的非常完美 ,完全可插拔到不同的项目:lol: ,我们公司从以前的acegi一直到现在的spring security都在用,但有点建议就是,不要按官方例子去做(官方例子太烂而且某些地方有误导之嫌,还有bug 呵呵),不要用命名空间xml方式去配置,spring security是我用过的关于权限管理的最强大框架,但用好并不是易事,可以说spring security只是半成品,他的很多东西都需要自己去实现和修改才能真正发挥出他的威力,如果你们公司有一定的研发能力的话,在它的基础上做些改进,甚至可以做到字段级的权限管理粒度,我们就这么做了,效果相当的完美
metadmin 2009-05-04
哦~  真的吗? 

能否讲讲思路,指点一下?
bencmai 2009-05-16

zhanglei 你好!


 这段时间在忙找工作,今天才上来,看到你的消息,回复一下

 

 由于不是很清楚你们的系统架构,我也不好给你更具体的建议。

 

 强调一点,spring security 和spring结合是非常密切的,要想用好spring security ,你们的架构中至少要引入spring容器来管理所有需要管理权限的东西,比如数据层、服务层等,虽然按官方的声明是可以脱离spring容器独立使用spring security ,但那样实现起来相对比较耗费精力,并且需要自己去做部分权限判断。

 

按你所举的例子里,我不确定你们是否后台只用servlet来处理数据,请告诉我你们准确的架构。

 

spring security  的官方demo写的有点烂,甚至可以说是不值一看,尤其是它的基于Spring XML schema 的简化配置和硬编码的应用方式误导了很多想在产品化中应用它的人,严中掩盖了它本身强大的设计思想。spring security本身可以说只是一个半成品,而它的demo也是基于这个半成品将就着写出来的,当然不适合产品化的灵活应用。不过对付简单网站或入门学习还是够用的。从某中程度上来说demo只是提供了spring security  最原始的一种应用方式。

 

另一方面 spring security 是完全能应付产品化应用的:

 

  适用架构 功能 权限模式
1   提供各种认证方式  
2 B/S 基于过滤器链方式的 url 访问控制。基于ss提供的tag控制ui视图组件的 显/隐 RBAC
3 B/S、C/S 基于spring容器提供的AOP方式的切面实现          method 访问控制 RBAC
4 B/S、C/S 基于spring容器提供的AOP方式的切面实现          事后数据审查和过滤  ACL、RBAC
5 B/S、C/S 基于spring容器提供的AspectJ 方式的切面实现   对任意bean的字段控制 RBAC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其中 第4点 能实现你例子中所说的对各个单据授权,即对象(记录)级授权控制

对于你的问题,这篇文章可能比较适合你http://server.denksoft.com/wordpress/?page_id=5

( 最好用JPA方式实现,这样可以避免JDBC的一些通用性问题)

 

如果你要实现完全基于数据库的动态权限定义,安全对象资源定义、授权、角色定义、用户组、角色分层、记录级授权、字段级授权,基于分层组织架构权限等,并且使权限管理模块完全可插拔到不同的项目中,你必须完全抛弃demo的那种配置方式,并结合spring使用java代码编程式去配置。这就需要你对spring容器、面向切面编程(AOP和AspectJ)、RBAC模型、 ACL模型、都要有比较深入的理解。

 

还强调一点,spring security是我目前见到过的最强大的安全框架,几乎能实现目前企业应用中所有的权限管理需求并且可以完全和项目解耦。

 

但spring security入门相对其他框架难度要大很多,不是因为它本身就难,而是因为权限管理涉及的知识点太多。只要你琢磨透彻了,它也会给你其他框架无法比拟的好处。而且权限管理就像数据库一样重要而且基础的一块,基本上什么项目都需要。以后在任何项目中,只要修改数据库中的权限定义,就都能重用到几乎所有的项目了。

 

目前网上能找到的关于spring security 的中英文文章都不少,但大部分都比较老旧而且一般只涉及URL拦截和简单的方法拦截的垃圾文章,而对于ACL结合方法拦截或RBAC模式实现记录级授权还比较少有价值的文章,对于字段级授权实现就几乎没有。另一方面,对于spring security 和各种主流数据交换应用框架的无缝整合,如Flex(BlazeDS、LCDS),Ajax(dwr 、Extjs)等等的文章更是罕见。(可能是我没找到,开源框架很多东西得自己研究,呵呵)

 

我是spring security的忠实用户,从acegi到spring security2.0.4已经用了4年多了,在它的基础上做了很多实现和扩展,现在已经能实现到项目中spring security 完全不用一行xml配置,完全能基于任何数据库定义和管理所有权限和授权。并且支持字段级粒度授权,所有的这一切都只是数据库中的一些记录定义而已,这样就可以完全的动态定义和权限相关的一切东西了。呵呵

 

欢迎进一步交流,有兴趣的朋友请加入我的群中方便聊:9443086 J2EE项目组(拒接初哥^_^!!)

tagus 2009-05-25
看看seam 的安全框架吧,只要先搭起来个seam的框架,然后建几个表就行了,用起来特别简单
futurep_p 2009-09-26
在关于说spring security里权限控制定义到角色这一层,从而导致不能自己配置角色来控制,我想是有可以变通的方式的,下面我说下我的处理方式:
定义一个用户角色,也就是我们所说的ROLE_USER,然后与之关联一个权限。
在配置文件中填写此权限名称,从而达到登录的目的。其实核心也就在于把权限这一层提升到它原来的角色这一层,角色对它保持透明。
其他什么菜单的控制,也可以实现它的UserDetails接口,在UserService中完成信息的组装,在holder中完成信息获取,就达到了权限对菜单的控制。
至于数据细粒度的控制,本人还没深入研究过,暂不讨论。
Global site tag (gtag.js) - Google Analytics