日期:2014-05-20  浏览次数:20700 次

通过filter判断用户权限的问题
小弟我在写一个类似framework的东西,可以集成各个已有的功能模块,并通过分配权限控制用户访问。

我把每个模块的访问权限作为一个权限,可集成成角色分给各个用户。

就权限检查这里,我的思路是这样的:

1:通过filter进行权限检查,这样每个请求就都会自动检查了

2:在filter中进行权限检查时,只能根据客户端请求的uri和该用户已拥有权限的模块uri进行匹配,如果有则为有权限,如果没有则为无权限。

但现在面临以下问题:

1)有的模块有多个页面和action,只有一个入口。这样我只能判断入口的uri用户是否具有,但其它页面就无法判断了。因为其它页面的入口并未在系统注册。

2)每个请求都进行这样的判断会不会效率太低?


我也考虑过在每个页面和action的开头写权限校验代码,但这样也很麻烦,因为角色是由管理员定义的。。。。



请高手指点一下我这种思路的错误?



------解决方案--------------------
可以的,我现在的项目就用了类似的方法。性能也可以。不过权限分配管理比较繁琐,特别是系统功能较多的时候。
------解决方案--------------------
更好一些的xml结构
XML code

<pathset>
 <path value="...路径" role="01,02,03" />
 <path value="...路径" role="*" />
...... 
</pathset>
value就是一个路径,role属性指明有哪些权限可以访问次路径,如上面第一个01,02,03的3种权限可以访问
第二个就是所有权限都可以访问
这样更清楚

------解决方案--------------------
现在应用软件用的最多的一个思路就是
利用一张菜单表,专门用于页面展现菜单的维护(菜单id,名,描述,是否可显示,连接URL等等)
然后还有人员表、用户组表、角色表、角色对应的权限表(即角色和菜单表的关系)

页面上制作维护角色和菜单的关系,在登陆验证用户属于哪个组而具有的角色,来判断该用户拥有哪些权限(菜单),这样就可以控制该用户的权限了
------解决方案--------------------
如果采用权限的话得在页面上加上权限限制,页面上加的话那得使用 taglib,在 taglib 中判断 Session 中的用户是否有这个权限, 有的话什么都不做继续解析页面,没有的话在 taglib 中重定向到登录页面。 如果采用 URL 方式通过过滤器实现的话,那得存储很多很多的 URL,我感觉不是很方便。

------解决方案--------------------
验证用SSO的逻辑可以吗?
至于每个用户的URI范围,在登录时取出来放在session里,进入每个模块去match就可以了