锁定老帖子 主题:权限管理最佳实践:一,登录控制
精华帖 (12) :: 良好帖 (13) :: 新手帖 (19) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-31
最后修改:2010-08-31
-------------------------------------------- 总大纲 -------------------------------------- Ralasafe开源有段时间了,大约有2个月了。根据社区的反馈,我打算围绕Ralasafe最佳实践,书写一系列BLOG。 大体内容有: 1, 登录控制: 哪些页面需要登录后才能访问,登录用户名、密码验证,登录转向页面; 2, URL权限控制:哪些页面访问需要进行角色权限验证,怎样验证最简单有效,如何处理验证失败情况; 3, 数据级权限管理方案探讨:选择中间件呢还是框架? 4, Ralasafe体系结构: 用户怎么读取,用户有哪些字段,怎样与应用基础; 5, 数据级查询权限管理: 如何给不同的人分配不同的查询数据权限,返回where条件呢,还是直接返回结果集? 6, 数据级决策权限管理: 如何给不同的人分配不同的数据操作权限,当用户不具备权限怎么办? 7, 其他细小的权限控制: 如下拉框显示内容;按钮、链接是否显示,图片是否显示等。 -------------------------------------------- ------- --------------------------------------
今天说的登录控制,内容主要有:哪些页面需要登录控制、登录验证逻辑、登录后页面转向哪里,以及权限菜单等问题。虽然本系列讲解权限管理,尤其是数据级权限管理。但严格意义来说,登录控制,并不属于权限管理内容。它属于用户身份认证内容。权限基本都与用户相关,用户首先就涉及到用户名密码验证。所以我们从这里开始说起。
需求考察仔细考察登录控制,无外乎这些需求:
分析清楚需求后,我们来考察使用什么方案,以其达到目标:将共用与个性的东西分开,而且尽可能共同,个性的东西尽可能使用配置方式。
解决方案
Ralasafe解决方案:
实例说明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主要做这些事情:
细心的朋友会问,怎样去后台验证用户名密码呢?
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
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-08-31
登陆控制,估计是最简单的了。
|
|
返回顶楼 | |
发表时间:2010-08-31
好东东,Ralasafe好样的。
|
|
返回顶楼 | |
发表时间:2010-08-31
谢谢。我们继续努力。也想多听听建议。
WOW,4个新手贴了。投手们,给给建议。OK? |
|
返回顶楼 | |
发表时间:2010-08-31
你这些功能过于简单,一般开发人员都能想到,设计上也没什么创意。
这个年头,一个java框架如果不结合spring.都有点落伍了, |
|
返回顶楼 | |
发表时间:2010-08-31
哎!权限登录需要考虑很多东西啊。这个可不是简单的东西。说简单的,要看在什么场景下设计登录。
|
|
返回顶楼 | |
发表时间:2010-08-31
最后修改:2010-08-31
我认为需要登录的页面不需要配置,我认为大可不必。不是有Session吗?通过Session是否有效,自动让用户登录不是更好吗?当然,我没有投票,欢迎交流。
|
|
返回顶楼 | |
发表时间:2010-08-31
2, URL权限控制:哪些页面访问需要进行角色权限验证
期待这一节 最近准备把现有的权限改改 |
|
返回顶楼 | |
发表时间:2010-09-01
就上面讲来说,的确比较初级。提几点:
1.配置文件最好单独弄一下,通过web.xml加载。 2.如果需要在jsp里面写java代码的,把它做成标签。 不过看了一下地址上的文件,居然19M,着实让我惊讶。 |
|
返回顶楼 | |
发表时间:2010-09-01
最后修改:2010-09-01
非常期待4/5/6/7章节
PS:章节补齐,全部精华 |
|
返回顶楼 | |