NULL

坚持点,平和点...【My open asp.net control projects http://www.codeplex.com/aspnetControl/】

  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理 ::
  31 随笔 :: 1 文章 :: 897 评论 :: 39 Trackbacks
开篇语

    每个系统都有她的授权模块,很早就想把"授权模块"抽象出来,省得每次都做一些不必要的"机械运动":)再说,这样也可以降低系统的"偶合度".
很早其实就想到了,可以利用IHttpModule接口的验证和授权两个事件,来做点什么...
但是,后来发现在验证和授权两个事件中,压根不能使用Session,这怎么办了?放HttpApplication里吗?感觉不安全,就一值没有再想这个问题了...
后来查了一通MSDN,发现AcquireRequestState事件中,Session对象已经构成了,哎,都怪我当时太懒了...
那就把"授权过程"放在AcquireRequestState事件中吧.
理论上,应该会比放在授权事件中要慢一点,但是没关系,慢就慢点,总比放在页面运行环境中,来得快些,安全些:)

切入点

    在IHttpModule模块的AcquireRequestState事件中做"授权过程".

效果图


开始了
步骤一(new一类库,实现IHttpModule接口)
Code

步骤二(再new一普通类,具体的授权过程看情况而定)

Code

步骤三
使用方法(new一站点,在System.web节点下增加httpModules节点)

Code

 到此,配置完成

需要注意的地方
    1.虽然在授权没有通过的时候,调用了application.CompleteRequest()方法,来终结http管线中的所有事件.
但是,http管线中的最后三个事件仍然会执行,并不回终结一切事件.
请想一想,如果整个http管线中的事件都不执行了,那我们怎么会看到,"没有授权的提示呢"?

    2.千万不要在http管线的事件中有SQL查询语句,如果是这样,我宁愿不用这玩意(如果是这样,每次请求都要build database Connection,痛苦.)

    4.站点最好设置成Form验证,(这一部分我省了)

    3.虽然这是一个好想法,但是要把她实现得更加"完美",还是有一定难度的.

结尾
什么也不说了,如果觉得对您有用,请给点鼓励......
        



posted on 2008-04-21 23:06 王孟军! 阅读(2661) 评论(30)  编辑 收藏 所属分类: asp.net Controls

评论

#1楼  2008-04-21 23:47 留恋星空      
mark
  回复  引用  查看    

#2楼  2008-04-22 01:20 Microshaoft      
HttpModule Global.asax 与 HttpHandler
都会影响性能的

应该考虑使用
UserControl

AppWebFormPage 的基类

里实现
  回复  引用  查看    

#3楼  2008-04-22 07:39 侯垒      
学习一下.
  回复  引用  查看    

#4楼  2008-04-22 07:56 LanYo      
最近你的活动不少,支持
  回复  引用  查看    

#5楼 [楼主] 2008-04-22 08:17 王孟军!      
@LanYo
@侯垒
@留恋星空
thanks
:)

@Microshaoft
做成UserControl 理论上,效率会好点,但是放在runtime可能更安全...
这个世界就是这样矛盾,你要得到点什么,就得失去点什么...
  回复  引用  查看    

#6楼  2008-04-22 08:24 李战      
强烈鼓励!
  回复  引用  查看    

#7楼  2008-04-22 09:05 权限 [未注册用户]
只能处理一些简单的权限.假设,如果我只是对这个网页中的某个按钮要权限控制,就没有办法来处理.
这种处理只是页面级的,无法达到控件级.
页面中有三个按钮,提交,保存,修改.
所有用户都能进入页面,但只有一部分用户有保存,修改权限,一部分人有修改,提交权限.你这个就做不到.或都说很难做到.做到了,性能上也有很大的问题.
  回复  引用    

#8楼  2008-04-22 09:05 权限 [未注册用户]
看照片,你很像二子
  回复  引用    

membership 不是集成了这功能吗?
  回复  引用    

#10楼  2008-04-22 09:15 Dove.Net      
加油
  回复  引用  查看    

#11楼  2008-04-22 09:19 生鱼片      
支持
  回复  引用  查看    

#12楼  2008-04-22 09:32 Leepy      
挺不错的!加油!
  回复  引用  查看    

#13楼 [楼主] 2008-04-22 09:43 王孟军!      
@Dove.Net
@生鱼片
@Leepy

thanks
:)

  回复  引用  查看    

#14楼  2008-04-22 10:15 Clark Zheng      
@justforkim——
同意,请博主解释一下为什么不用membership的这项功能呢?
  回复  引用  查看    

#15楼 [楼主] 2008-04-22 10:20 王孟军!      
@Clark Zheng
@justforkim——

哈哈
有人喜欢直接 到菜市场 买菜
有人喜欢,自己整块地,自己种菜...
虽然,自己种菜,累,毕竟环保些,还能锻炼身体呢...
适当运动,有益身体
:)
  回复  引用  查看    

这个asp.net不是内置了么?<location>里配置访问权限,
可以通过<customErrors>
<error statusCode =""/>
</customErrors> 来配置具体status的展现页面。
  回复  引用    

#17楼  2008-04-22 12:42 非空      
每次看楼主头像,我都要心灵震撼一下!
  回复  引用  查看    

#18楼  2008-04-22 13:11 rosanshao      
为什么使用了
HttpModule Global.asax 与 HttpHandler
都会影响性能的

使用HttpHandler 是提高性能还是影响性能?我看到的是提高性能哦

  回复  引用  查看    

#19楼 [楼主] 2008-04-22 13:21 王孟军!      
@rosanshao

不能一概而论,要看你怎么用



  回复  引用  查看    

#20楼  2008-04-22 13:38 不告诉 [未注册用户]
我还是继续支持楼主,期待新作品出现!!!!


不过,楼主,你本人真的有那么胖吗?


我怀疑少林寺的找失散多年的师兄会找上你哦!!
  回复  引用    

#21楼  2008-04-22 14:26 孙孟      
每次看到楼主的照片 我就能联想到监狱 ^_^
  回复  引用  查看    

#22楼  2008-04-22 15:56 预备役中尉      
关于这个授权控件,我们是单独继承实现原控件,增加相关属性.比如ResourceId等,然后在单独的权限系统对其设置.
  回复  引用  查看    

#23楼  2008-04-27 10:20 高强 [未注册用户]
不错,值得收藏!
  回复  引用    

#24楼  2008-05-04 20:33 netgods [未注册用户]
如你所说,不能对页面中的按钮实现权限控制.
另外, string strFileName = url.Substring(url.LastIndexOf('/')+1).Trim();
虚拟目录根目录下的index.aspx与根目录下随便某一目录下的index.aspx页面的strFileName 都是相同的.而该用户可能对根目录下的index.aspx有权限,而某目录下的该页面是无权的.
你认为呢?
  回复  引用    

#25楼  2008-05-05 08:52 wmj [未注册用户]
@netgods
没错
不同目录下,index.aspx的FileName是相同的,所以如果有同名的文件,这中方式就应付不了
谢谢,你想得很细

  回复  引用    

#26楼  2008-05-08 13:43 wilbur      
不错,支持一个
  回复  引用  查看    

#27楼  2008-05-09 17:37 w i n s o n      
嗯,这种做法不错,呵

不过想问一下,你的 CanUseModule 方法里的判断语句是不是写错了?

if (userName == "wmj" || url=="index.aspx")

应该改为

if (userName == "wmj" && url=="index.aspx")

吧,否则只要是地址对了即可进来了?都不需考虑用户名了,呵呵

  回复  引用  查看    

#28楼 [楼主] 2008-05-09 17:47 王孟军!      
@w i n s o n
不好意思,写快了
用这种 实现还是有一定难道的,
你弄好了,我们交流交流

  回复  引用  查看    

#29楼  2008-06-02 13:12 风不平      
为什么不使用FormsAuthentication类呢
  回复  引用  查看