zoukankan      html  css  js  c++  java
  • ASP.NET的HTTP模块和处理程序之模块实现

    我们研究一下上面的代码

    我们是从Init函数开始的。这个函数把处理程序的AuthenticateRequest事件插入Application(应用程序)对象的事件处理程序列表中。这将导致引发AuthenticationRequest事件的时候Application调用该方法。

    我们的HTTP模块初始化之后,我们就可以调用它的AuthenticateRequest方法来鉴别客户端请求。AuthenticateRequest方法是该安全/身份认证机制的核心。在这个函数中:

    1和2行提取HttpApplication和HttpContext对象。3到7行检测是否没有给我们提供了用户id或密码。如果没有提供,就显示错误信息,请求处理过程终止。

    9到12行从HttpRequest对象中提取用户id和密码。

    14行调用一个叫做AuthenticateAndGetRoles的辅助(helper)函数。这个函数主要执行身份验证并决定用户角色。上面的代码采用了硬编码(hard-coded),只允许两个用户使用,但是我们可以扩展这个方法,并添加代码与用户数据库交互操作并检索用户的角色。

    16到19行检测是否有角色与用户关联。如果没有就意味着传递给我们的凭证没有通过验证;因此该凭证是无效的。因此,给客户端发送一个错误信息,并且请求结束了。

    20和21行非常重要,因为这两行实际上告诉ASP.NET HTTP运行时已登录用户的身份。这两行成功执行以后,我们的aspx页面就能够使用User对象访问这些信息了。

    现在我们看一看这种身份验证机制的运行情况。目前我们只允许下面两个用户登录到系统:

    · User id = Steve, Password = 15seconds, Role = Administrator

    · User id = Mansoor, Password = mas, Role = User

    注意用户id和密码是大小写敏感的(区分大小写)。

    首先试图不提供凭证登录系统,在IE中输入http://localhost/webapp2/index.aspx将看到下面的消息:

      

    现在试图使用用户id“Steve”和密码“15seconds”登录系统。输入 http://localhost/webapp2/index.aspx?userid=Steve&password=15seconds你将看到下面的欢迎消息:

     

      

    现在试图使用用户id“Mansoor”和秘码“mas”登录系统。输入http://localhost/webapp2/index.aspx?userid=Mansoor&password=mas你将看到下面的欢迎消息页面:

     

    现在试图使用错误的用户id和密码组合来登录系统。输入http://localhost/webapp2/index.aspx?userid=Mansoor&password=xyz你将看到下面的错误消息: 

     

    这表明我们的安全模块在起作用了。你可以通过在AuthenticateAndGetRoles方法中使用数据库访问代码来扩展该安全模块。

    要使所有的部分都起作用,我们必须对web.config文件进行一些修改。首先,由于我们要使用自己的身份验证,因此不需要其它的身份验证机制。为了达到这个目的,改变webapp2的web.config文件中的<authentication>节点,如下所示:

    1. <authentication mode="None"/>  

    类似地,不允许匿名用户访问我们的Web站点。给web.config文件添加下面的语句:

    1. <authorization>  
    2. <deny users="?"/>  
    3. </authorization> 

    用于至少能够匿名访问用于提供凭证的文件。在web.config文件中使用下面的配置设置信息把index.aspx作为唯一能够匿名访问的文件:

    1. <location path="index.aspx">  
    2.  <system.web>  
    3. <authorization>  
    4.  <allow users="*"/>  
    5. </authorization>  
    6.  </system.web>  
    7. </location> 
    8. 结论

      你可能已经意识到有了HTTP处理程序和模块后,ASP.NET已经给开发者提供了强大的能量。把你自己的组件插入ASP.NET请求处理管道,享受它的优点吧。

      作为练习,你应该进一步改进程序,使示例身份验证模块更加灵活,并能根据用户的需要进行调整。

  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/sunshch/p/2462330.html
Copyright © 2011-2022 走看看