成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ASP.NET的HTTP模塊和處理程序之模塊實現

開發 后端
為了實現擴充或擴展Web服務器的功能,ASP.NET提供了HttpHandler(HTTP處理程序)和HttpModule(HTTP模塊),這里,筆者將帶各位深入了解這些組件的詳細信息。這篇文章,筆者將向大家實現一個提供安全服務的HTTP模塊。

  實現一個提供安全服務的HTTP模塊

  現在我們實現一個HTTP模塊,它為我們的Web應用程序提供安全服務。該HTTP模塊基本上是提供一種定制的身份認證服務。它將接收HTTP請求中的身份憑證,并確定該憑證是否有效。如果有效,與用戶相關的角色是什么?通過User.Identity對象,它把這些角色與訪問我們的Web應用程序頁面的用戶的標識關聯起來。

  下面是該HTTP模塊的代碼:

  1. using System;  
  2. using System.Web;  
  3. using System.Security.Principal;  
  4.  
  5. namespace SecurityModules  
  6. {  
  7.  /// Class1的總體描述。  
  8.  
  9.  public class CustomAuthenticationModule : IHttpModule  
  10.  {  
  11.   public CustomAuthenticationModule()  
  12.   {  
  13.   }  
  14.   public void Init(HttpApplication r_objApplication)  
  15.   {  
  16.    // 向Application 對象注冊事件處理程序。  
  17.    r_objApplication.AuthenticateRequest +=   
  18. new EventHandler(this.AuthenticateRequest) ;  
  19.   }  
  20.  
  21.   public void Dispose()  
  22.   {  
  23.    // 此處空出,因為我們不需要做什么操作。  
  24.   }  
  25.  
  26.   private void AuthenticateRequest(object r_objSender,EventArgs r_objEventArgs)  
  27.   {  
  28.    // 鑒別用戶的憑證,并找出用戶角色。。  
  29.    1. HttpApplication objApp = (HttpApplication) r_objSender ;  
  30.    2. HttpContext objContext = (HttpContext) objApp.Context ;  
  31.    3. if ( (objApp.Request["userid"] == null) ||  
  32.    4.  (objApp.Request["password"] == null) )  
  33.    5.  {  
  34.    6.   objContext.Response.Write("<H1>Credentials not provided</H1>") ;  
  35.    7.   objContext.Response.End() ;  
  36.    8.  }  
  37.  
  38.    9. string userid = "" ;  
  39.    10. userid = objApp.Request["userid"].ToString() ;  
  40.    11. string password = "" ;  
  41.    12. password = objApp.Request["password"].ToString() ;  
  42.    
  43.    13. string[] strRoles ;  
  44.    14. strRoles = AuthenticateAndGetRoles(userid, password) ;  
  45.    15. if ((strRoles == null) || (strRoles.GetLength(0) == 0))  
  46.    16. {  
  47.    17.  objContext.Response.Write("<H1>We are sorry but we could not  
  48. find this user id and password in our database</H1>") ;  
  49.    18.  objApp.CompleteRequest() ;  
  50.    19. }  
  51.  
  52.    20. GenericIdentity objIdentity = new GenericIdentity(userid,  
  53. "CustomAuthentication") ;  
  54.    21. objContext.User = new GenericPrincipal(objIdentity, strRoles) ;  
  55.   }  
  56.  
  57.   private string[] AuthenticateAndGetRoles(string r_strUserID,string r_strPassword)  
  58.   {  
  59.    string[] strRoles = null ;  
  60.    if ((r_strUserID.Equals("Steve")) && (r_strPassword.Equals("15seconds")))  
  61.    {  
  62.     strRoles = new String[1] ;  
  63.     strRoles[0] = "Administrator" ;  
  64.    }  
  65.    else if ((r_strUserID.Equals("Mansoor")) && (r_strPassword.Equals("mas")))  
  66.    {  
  67.     strRoles = new string[1] ;  
  68.     strRoles[0] = "User" ;   
  69.    }  
  70.    return strRoles ;  
  71.   }  
  72.  }  

#p#

  我們研究一下上面的代碼

  我們是從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> 

#p#

  結論

  你可能已經意識到有了HTTP處理程序和模塊后,ASP.NET已經給開發者提供了強大的能量。把你自己的組件插入ASP.NET請求處理管道,享受它的優點吧。

  作為練習,你應該進一步改進程序,使示例身份驗證模塊更加靈活,并能根據用戶的需要進行調整。

【編輯推薦】

  1. ASP.NET的HTTP模塊和處理程序
  2. ASP.NET的HTTP模塊和處理程序之請求的處理過程
  3. ASP.NET的HTTP模塊和處理程序之處理程序的執行
  4. ASP.NET的HTTP模塊和處理程序之對話狀態
  5. ASP.NET的HTTP模塊和處理程序之HTTP模塊的注冊和使用
責任編輯:韓亞珊 來源: 天極網
相關推薦

2011-04-13 15:18:10

.htmHTTP請求處理

2011-04-13 16:49:26

HTTPASP.NET

2011-04-13 16:35:47

HTTPASP.NET

2011-04-13 16:27:48

HTTPASP.NET

2011-04-13 15:50:49

.htmHTTP請求處理

2023-07-04 08:26:15

2009-07-20 16:23:01

ASP.NET授權模塊

2009-07-28 15:29:03

實現HTTP請求ASP.NET

2023-07-03 08:48:40

Web模塊化設計

2009-07-28 17:17:19

ASP.NET概述

2009-07-27 13:25:15

Postback程序處ASP.NET

2009-08-03 11:21:47

ASP.NET編程模型

2023-06-30 14:03:00

ASP.NET模塊化設計

2009-07-23 16:20:48

HTTP協議ASP.NET

2012-08-20 10:24:15

ASP.NET

2009-07-27 12:22:03

ASP.NET和ASPASP.NET入門教程

2009-07-29 16:08:07

ASP和ASP.NET

2009-08-10 13:32:15

ASP.NET TimASP.NET組件設計

2009-08-03 13:38:18

ASP.NET編程模型

2009-07-29 10:52:09

數據采集程序ASP.NET技巧
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区91精品张津瑜 | 99精品亚洲国产精品久久不卡 | 国产精品欧美一区二区 | 毛片网站在线观看视频 | 欧美激情精品久久久久久 | 国产精品日韩欧美一区二区 | 国产精品久久一区 | 在线观看国产www | 久久久久久久久综合 | 久久久久国产精品 | 在线看免费 | 午夜小电影| 国产成人99久久亚洲综合精品 | 欧美激情欧美激情在线五月 | 香蕉一区 | 国产精品久久国产精品 | 亚洲天堂久久 | 欧美一区二区三区在线观看 | 欧美日韩一区二区在线观看 | 午夜在线免费观看 | 中文字幕日韩一区 | 国产 日韩 欧美 在线 | 成年人免费在线视频 | 精品91av | 亚洲视频在线播放 | 成人在线一级片 | 国产网站在线 | 91精品国产色综合久久 | 亚洲一区视频 | 不卡在线视频 | 久热精品在线播放 | 亚洲iv一区二区三区 | 一区二区三区四区在线视频 | 精品一区二区观看 | 看羞羞视频 | 久久久久国产精品 | 欧美电影免费观看 | 日韩精彩视频 | 一区二区视频在线 | 午夜国产一级片 | 色天天综合 |