`
metadmin
  • 浏览: 168355 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

权限管理最佳实践:一,登录控制

阅读更多

-------------------------------------------- 总大纲 --------------------------------------

Ralasafe开源有段时间了,大约有2个月了。根据社区的反馈,我打算围绕Ralasafe最佳实践,书写一系列BLOG。

 

大体内容有:

1, 登录控制: 哪些页面需要登录后才能访问,登录用户名、密码验证,登录转向页面;

2, URL权限控制:哪些页面访问需要进行角色权限验证,怎样验证最简单有效,如何处理验证失败情况;

3, 数据级权限管理方案探讨:选择中间件呢还是框架?

4, Ralasafe体系结构: 用户怎么读取,用户有哪些字段,怎样与应用基础;

5, 数据级查询权限管理: 如何给不同的人分配不同的查询数据权限,返回where条件呢,还是直接返回结果集?

6, 数据级决策权限管理: 如何给不同的人分配不同的数据操作权限,当用户不具备权限怎么办?

7, 其他细小的权限控制: 如下拉框显示内容;按钮、链接是否显示,图片是否显示等。

-------------------------------------------- ------- --------------------------------------

 

今天说的登录控制,内容主要有:哪些页面需要登录控制、登录验证逻辑、登录后页面转向哪里,以及权限菜单等问题。虽然本系列讲解权限管理,尤其是数据级权限管理。但严格意义来说,登录控制,并不属于权限管理内容。它属于用户身份认证内容。权限基本都与用户相关,用户首先就涉及到用户名密码验证。所以我们从这里开始说起。

 

需求考察

仔细考察登录控制,无外乎这些需求:

  1. 哪些页面需要登录后才能查看,而且哪些页面还需要进一步验证角色权限;
  2. 登录页面在哪里?
  3. 登录用户名、密码验证;
  4. 登录后转向哪个页面?
分析清楚需求后,我们来考察使用什么方案,以其达到目标:将共用与个性的东西分开,而且尽可能共同,个性的东西尽可能使用配置方式。

解决方案

Ralasafe解决方案:
  1. 登录界面和登录转向后页面,由开发人员编写,这属于个性化内容,有CSS、页面布局等;
  2. 哪些页面需要登录才能查看,可以通过Filter来控制:哪些页面需要控制,使用web.xml里面的url-pattern,是否登录使用Filter验证session;
  3. 哪些页面还需要进行角色权限验证,这个我们拆分出去,做为功能权限验证,以后再谈;
  4. 用户名、密码验证可以共用:就是从request中读取用户名、密码值,或许可能还要对密码进行加密,然后与数据库用户表相关字段进行比对。
  5. 登录后页面转向:通过给session添加一个gotoPage属性,验证成功后转向该页面即可。

实例说明

OK,我们套个实例说话!就拿ralasafe-demo来说,下载地址:http://ralasafe.org/zh/download/download.jsp
ralasafe/demo里面的页面需要登录后才能访问,ralasafe/demo/login.jsp页面是登录页面;ralasafe/demo/main.jsp是登录后,显示功能菜单的页面。

 

配置LoginFilter

我们先将LoginFilter配置到web.xml文件:

 

<filter>
	<filter-name>ralasafe/LoginFilter</filter-name>
	<filter-class>org.ralasafe.webFilter.LoginFilter</filter-class>
	<init-param>
		<param-name>loginPage</param-name>
		<param-value>/ralasafe/demo/login.jsp</param-value>
	</init-param>
	<init-param>
		<param-name>uniqueFieldsParams</param-name>
		<param-value>loginName</param-value>
	</init-param>
	<init-param>
		<param-name>passwordParam</param-name>
		<param-value>password</param-value>
	</init-param>
	<!--init-param>
		<param-name>encryptMethod</param-name>
		<param-value>shahex</param-value>
	</init-param-->
</filter>

 

 这里有几个属性上面没有提到。uniqueFieldsParams表示页面的哪些字段可以唯一确定用户,一般情况下只有一个参数。这里配置是loginName(Login页面的字段input name属性),那么login.jsp里面就有这样的代码:

 

<input name="loginName" type="text" class="username">

 

 如果需要多个字段确定一个用户,比如需要用户名+机构唯一确定,那么web.xml可以配置成:

 

<init-param>
	<param-name>uniqueFieldsParams</param-name>
	<param-value>loginName,unitId</param-value>
</init-param>

 passwordParam表示页面哪个字段是密码字段;encryptMethod表示密码使用什么加密方法,ralasafe提供了base64,md5hex,shahex加密方法。你也可以自行开发加密方法,详见LoginFilter javadoc

 

哪些页面需要登录验证

我们只要将需要验证的页面,安装该Filter即可。配置web.xml:

 

<filter-mapping>
	<filter-name>ralasafe/LoginFilter</filter-name>
	<url-pattern>/ralasafe/demo/*</url-pattern>
</filter-mapping>

表示ralasafe/demo下的所有URL资源都需要经过LoginFilter过滤。

验证逻辑

验证逻辑全部在LoginFilter里面。LoginFilter主要做这些事情:

 

  1. 首先判断客户端是否在请求登录页面,如果是,那么转向登录页面,以免造成死循环
  2. 然后如果是请求登录,那么读取用户名、密码(可能密码还要加密)进行验证;
  3. 如果不是请求登录,那么这时需要查看session用户是否登录了。如果没有登录,那么转到登录页面;如果已经登录继续doChain。
细心的朋友会问,怎样去后台验证用户名密码呢?
Ralasafe是通过配置元数据(详见这里),来告诉系统哪张表是用户表,哪些字段是用户唯一字段(和LoginFilter里里面的uniqueFieldsParams顺序对应上即可,无需名称相同)。
LoginFilter字段指明哪个字段是密码字段,LoginFilter还需要指明和用户表的哪个字段进行比较。也就是userPasswordField参数意义。详见:LoginFilter javadoc

登录页面转向

如果客户端在没有登录的情况下,请求/ralasafe/demo/employMng路径,那么登录成功后,系统最好直接转到该路径。LoginFilter会将该路径采集下来,以“gotoPage”属性保存到session。登陆成功后,会移除掉该属性(不占用session资源)。

此时,LoginFilter的form action是这么编写的:

 

<%
 	String gotoPage = (String) session.getAttribute("gotoPage");
 	if (StringUtil.isEmpty(gotoPage)) {
 		gotoPage = "main.jsp";
 	}
 %>
<form name="" action="<%=gotoPage%>" method="post">

 

至此,我相信一切你都明白了。 

 

------------------------分隔线----------------------------

毕竟我们搞ralasafe很多年了(04年开始的),所以很难更好地站在使用者角度(虽然,我们在努力,一直在努力),内容肯定有欠缺和错误。欢迎大家提出宝贵建议,欢迎大家努力拍砖!

我们也将继续保持开源,为大家贡献好的软件。也恳请大家支持我们!

 

注:下期讲解 2, URL权限控制:哪些页面访问需要进行角色权限验证,怎样验证最简单有效,如何处理验证失败情况;

ralasafe团队博客在javaeye/baidu/sina等空间,同步发布。ralasafe官方网站:http://www.ralasafe.org/zh

 

 

分享到:
评论
39 楼 2xusi 2011-03-10  
挺好的 看看
38 楼 liuxuejin 2011-02-16  
非常好的一个权限管理系统!已经加入我们的系统里了
37 楼 ltian 2010-09-09  
metadmin 写道
ltian 写道
我认为需要登录的页面不需要配置,我认为大可不必。不是有Session吗?通过Session是否有效,自动让用户登录不是更好吗?当然,我没有投票,欢迎交流。

没事不怕投票,主要是交流。

Ralasafe在登录方面也算是做到极致了。因为只剩下必不可少的工作需要开发者完成:开发登录页面和登录后的页面。密码验证、登录转向等都无需开发额外代码。

做到极致我认为未必,还有很多可提升的空间吧。就我看来,你们在登录方面想的过于简单!企业应用开发,需求是多方面的。我觉得如果你们认为当前是极致了,那么你们就没有进一步提升的空间了。我随便提几点关于登录的需求吧:
1.登录可能会要求密码与硬件标识结合方式进行登录。
2.  可能会限制登录的时间和登录的IP地址。
3.  是否允许同一个用户在同一个IP地址登录。
4.  企业可能有了现成的身份认证系统。

仅提几个最常见的登录需求吧。也许你们已经做到了,但是从你本文的宣传来看,把不是精华东西当成了精华,把不是最佳实践的东西当成了最佳实践。也许我说的也不对,欢迎交流。
36 楼 lzmhehe 2010-09-08  
很不错的东西
原来公司就有一个专门的产品线做安全方面的东西,(包含了资源鉴权和功能鉴权)一直为其他的项目做服务
如果你这个东西早点出来,也许那个产品线就不需要创建了

35 楼 pute 2010-09-06  
我做了一个可视化界面功能定制的功能,对不同角色进行可视化的功能集定义。
34 楼 metadmin 2010-09-04  
目前版本比较稳定的。其实我们是从原来的商业版本v2.7.6,重新改版过来的。做为对社区完全尊重,我们从rc1开始发行的。(已经有应用案例)
33 楼 angjunwen 2010-09-04  
LZ 的精神值得赞扬的,现在国内很少有人做这样的开源软件,如果这个中间件早一年出来我可能会在项目中试用下,我现在的项目还是使用的spring security.希望我当前的项目在做第二个版本的时候,你这个中间件能有一个比较稳定的版本,到时可以考虑采用。祝愿中国的IT业不要永远的踏着别人的脚步前进。。。
32 楼 ristaju 2010-09-02  
垃圾的评论都不要去鸟,LZ你归你做你想做的事情就行了,装- B的人的评论也就是装-B而已
31 楼 wolfarmy 2010-09-02  
批评,鄙视是容易的;你如果是说楼主的是小鸡脑袋,不是不可以,拿出事实的东西来辩驳。可以鄙视,但要鄙视的有技术含量,技术没啥高低之分,只低成本的解决问题就可以。貌似现在没有啥完美的数据权限解决方案,可以一起探讨。不愿意探讨的,你可以探讨你自己感兴趣的。
30 楼 GRDJE 2010-09-02  
metadmin 写道
GRDJE 写道
明显不是业界主流做法,或者说标准做法
都是自己小鸡脑袋想想的。。。。。

我非常想知道你的“大鸡”脑袋东西。。。。。

行, 你慢慢去折腾这些民工货吧,祝你好运
29 楼 lib 2010-09-02  
能将一个团队开发权限系统开源,本身就是一件好事;
而且楼主还这样细致的进行讲解,在这年头,更是难能可贵了!
那些充满不屑一顾眼神的人,有本事也拿出些干货来,让大家瞧瞧!
PS:半瓶醋的人,都喜欢在瓶子里瞎晃!
28 楼 climber2002 2010-09-02  
metadmin 写道
GRDJE 写道
明显不是业界主流做法,或者说标准做法
都是自己小鸡脑袋想想的。。。。。

我非常想知道你的“大鸡”脑袋东西。。。。。


哈哈,被楼主逗笑了,就冲这个,投你一票良好
27 楼 metadmin 2010-09-01  
我们的实例采用JSP书写的,方便大家看懂。如果我封装一下,大家又需要了解我的封装。
26 楼 lengyue333 2010-09-01  
这位兄弟 还在用JSP啊,JSP都落伍了! 因为性能太低。
25 楼 fireflyman 2010-09-01  
挨批要看有沒有道理...要這點都承受不住...很難在市場上立足...
24 楼 loess 2010-09-01  
有些人说的有些过了。我觉得楼主实在不易,做的非常不错。总会有些人说事,楼主不要被他们唬住,期待后面更精彩的内容。
23 楼 metadmin 2010-09-01  
GRDJE 写道
明显不是业界主流做法,或者说标准做法
都是自己小鸡脑袋想想的。。。。。

我非常想知道你的“大鸡”脑袋东西。。。。。
22 楼 tutu1982 2010-09-01  
GRDJE 写道
居然还冠以标题 最佳实践。。。
建议lz多看看大企业的东西...

很少回帖,也没有细看过楼主的作品,不过看楼上说的口气,很关心楼上所说的大企业的东西,能不能拉点干货出来开开眼,别尽扯水的,一扯还扯了好多条。
21 楼 GRDJE 2010-09-01  
居然还冠以标题 最佳实践。。。
建议lz多看看大企业的东西...
20 楼 GRDJE 2010-09-01  
melin 写道
你这些功能过于简单,一般开发人员都能想到,设计上也没什么创意。
这个年头,一个java框架如果不结合spring.都有点落伍了,

spring算啥, 民工标配

相关推荐

    项目管理最佳实践方法.pdf

    根据提供的文件内容,我们可以提取出以下知识点: 1. 项目管理的重要性:文档指出项目管理不仅仅是一...此外,书籍本身作为项目管理知识载体的重要性也被强调,对于理解和运用项目管理最佳实践有着重要的参考价值。

    项目管理最佳实践 pmp 培训 pdf

    《项目管理最佳实践:实现全球卓越》(第二版)是一本由Harold Kerzner博士编著、John Wiley & Sons出版社出版的专业书籍。本书深入探讨了项目管理领域的核心概念、最佳实践以及如何在全球范围内实现卓越管理。通过...

    软件配置管理最佳实践.pdf

    软件配置管理最佳实践 软件配置管理是软件开发过程中一个非常重要的环节,它可以帮助团队提高开发效率、保障软件产品质量。然而,在实施软件配置管理时,很多朋友常常感到困惑,不知从何处入手。这篇文章将介绍软件...

    IT项目管理最佳实践

    ### IT项目管理最佳实践 #### 一、项目与项目管理定义 **何谓项目?** 项目是指为了创造独特的产品、服务或成果而进行的一次性努力。这种努力具有明确的目标和限定的时间范围。 **何谓项目管理?** 项目管理是...

    DB2数据库管理最佳实践pdf

    DB2数据库管理最佳实践是IBM公司推出的一款关系型数据库管理系统,广泛应用于企业级的数据存储、管理和分析。这份PDF文档很可能是对DB2数据库在实际操作中的优化策略、配置技巧和故障排查方法的深入探讨,旨在帮助...

    微软软件开发生命周期管理最佳实践系列课程(3):报表展示

    在“微软软件开发生命周期管理最佳实践系列课程(3):报表展示”中,我们将深入探讨如何有效地利用报表工具和方法来提升软件开发过程的透明度、效率与质量。报表在软件开发中扮演着至关重要的角色,它们为决策者提供...

    数据库角色和权限管理:策略、技术与最佳实践

    通过实施最小权限原则、分离职责、定期审查、使用角色管理等策略,以及采用自动化管理、环境隔离、加密敏感数据、监控和审计等最佳实践,可以有效地控制用户对数据库的访问,保护组织的数据资产。随着技术的发展和...

    某咨询财务管理最佳实践之固定资产管理.pptx

    以下是对“某咨询财务管理最佳实践之固定资产管理”所涉及知识点的详细阐述: 一、固定资产管理目标: 1. 完整记录:确保企业所有固定资产的详细信息,包括位置、年龄、当前价值及与之相关的成本中心。 2. 准确折旧...

    深入掌握MySQL用户权限管理:安全策略与实践

    通过合理地创建用户账户、分配和撤销权限、使用角色简化权限管理,以及遵循安全最佳实践,可以有效地保护数据库不受未授权访问的威胁。本文详细介绍了MySQL用户权限管理的各个方面,并通过代码示例展示了如何实现...

    teamcenter 8 权限管理设置

    ### Teamcenter 8 权限管理设置:深入解析与实践指南 ...通过掌握其核心概念、操作流程和最佳实践,企业可以构建一个既灵活又强大的权限管理体系,支持高效的数据共享和团队协作,同时保护敏感信息免受未经授权的访问。

    单点登录系统(SSO)+权限管理

    单点登录系统(Single Sign-On,SSO)是一种网络身份验证机制,允许用户在一次登录后访问多个相互关联的应用系统,而无需再次输入凭证。在SSO系统中,用户只需要记住一套登录凭据,提高了用户体验,同时减少了密码...

    oracle ASM 最佳实践

    - **ASM权限管理**:增加了对ASM权限的更精细控制,使得安全性得到增强。 - **ASM库**:介绍了用于管理ASM实例的库,包括如何使用这些库来执行常见的管理任务。 - **磁盘管理**:涵盖了ASM如何管理磁盘,包括如何...

    基于OpenConfiguration配置管理最佳实践.pptx

    【OpenConfiguration配置管理最佳实践】 配置管理在现代IT环境中扮演着至关重要的角色,尤其是在微服务和云时代。OpenConfiguration作为一款配置管理工具,其最佳实践旨在优化配置工作流程,提高效率,确保系统的...

    IT服务管理_基于ITIL的全球最佳实践_整合

    整合IT服务管理意味着将ITIL与其他最佳实践、标准和框架(如COBIT、ISO/IEC 20000、DevOps、精益、六西格玛)相结合,以构建一个适应现代IT环境的全面服务管理体系。这种整合可以帮助组织更好地应对数字化转型的挑战...

    深入理解android telephony原理剖析与最佳实践

    根据提供的文件信息,实际内容与标题“深入理解android telephony原理剖析与最佳实践”以及描述并不相符。然而,为了满足您的需求,以下将基于标题和描述来生成相关的Android Telephony的知识点。 ### 深入理解...

    Oracle运维最佳实践-下

    "Oracle运维最佳实践-下"很可能是一本深入探讨Oracle数据库运维的专业资料,书中可能包含了运维工程师在日常工作中所需的重要技能和经验分享。下面,我们将根据这个主题,对Oracle运维的一些关键知识点进行详细的...

    Docker安全配置与最佳实践指南:隔离、镜像构建、容器管理和集群安全

    第一部分介绍了Docker的安全基础和技术手段,包括命名空间、控制组、文件系统层叠、权限控制和安全上下文等隔离机制。第二部分探讨了如何创建安全的Dockerfile,涉及选择官方基础镜像、添加安全层、最小化镜像大小和...

    互联网网关最佳实践安全策略.pdf

    首先,最佳实践互联网网关安全策略有两个核心目标:一是最大化地降低成功入侵网络的机会,二是确保所有用户通过所有端口安全地启用应用程序。传统基于端口的安全策略往往采用“一刀切”的做法,要么阻止所有可能影响...

Global site tag (gtag.js) - Google Analytics