¡¾·±ÌåÖÐÎÄ¡¿
¡¾ÉèΪÊ×Ò³¡¿
¡¾¼ÓÈëÊղء¿
µ±Ç°Î»Öãº.Net¼¼ÊõÊ×Ò³ >> Asp.Net¿ª·¢ >> ASP.NETÖеÄHTTPÄ£¿éºÍ´¦Àí³ÌÐò 4

ASP.NETÖеÄHTTPÄ£¿éºÍ´¦Àí³ÌÐò 4

2007-10-15 08:00:00  ×÷Õߣº  À´Ô´£º»¥ÁªÍø  ä¯ÀÀ´ÎÊý£º0  ÎÄ×Ö´óС£º¡¾´ó¡¿¡¾ÖС¿¡¾Ð¡¡¿
¼ò½é£º³ýÁËÕâЩʼþÖ®Í⣬ÎÒÃÇ»¹¿ÉÒÔʹÓÃËĸöʼþ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýʵÏÖWebÓ¦ÓóÌÐòµÄglobal.asaxÎļþÖÐһЩ·½·¨À´Ê¹ÓÃÕâЩʼþ¡£ ¡¡¡¡ÕâЩʼþÊÇ£º ¡¡¡¡· Application_OnStart ¡¡¡¡µ±µÚÒ»¸öÇëÇóµ½´ïWebÓ¦ÓóÌÐòµÄʱºòÒý·¢...

³ýÁËÕâЩʼþÖ®Í⣬ÎÒÃÇ»¹¿ÉÒÔʹÓÃËĸöʼþ¡£ÎÒÃÇ¿ÉÒÔͨ¹ýʵÏÖWebÓ¦ÓóÌÐòµÄglobal.asaxÎļþÖÐһЩ·½·¨À´Ê¹ÓÃÕâЩʼþ¡£

¡¡¡¡ÕâЩʼþÊÇ£º

¡¡¡¡· Application_OnStart

¡¡¡¡µ±µÚÒ»¸öÇëÇóµ½´ïWebÓ¦ÓóÌÐòµÄʱºòÒý·¢Õâ¸öʼþ¡£

¡¡¡¡· Application_OnEnd

¡¡¡¡×¼±¸ÖÕÖ¹Ó¦ÓóÌÐò֮ǰÒý·¢Õâ¸öʼþ¡£

¡¡¡¡· Session_OnStart

¡¡¡¡Óû§¶Ô»°µÄµÚÒ»¸öÇëÇóÒý·¢Õâ¸öʼþ¡£

¡¡¡¡· Session_OnEnd

¡¡¡¡·ÅÆú¶Ô»°»òÕß¶Ô»°³¬ÆÚµÄʱºòÒý·¢Õâ¸öʼþ¡£

¡¡¡¡ÔÚÅäÖÃÎļþÖÐ×¢²áHTTPÄ£¿é

¡¡¡¡µ±ÎÒÃǽ¨Á¢ÁËHTTPÄ£¿é²¢°ÑËü¸´ÖƵ½WebÓ¦ÓóÌÐòµÄbinĿ¼»òÕßÈ«¾Ö²¿¼þ»º³å£¨Global Assembly Cache£©Ö®ºó£¬½ÓÏÂÀ´¾ÍÓ¦¸ÃÔÚweb.config»òmachine.configÖÐ×¢²áËüÁË¡£

¡¡¡¡ÎÒÃÇ¿ÉÒÔʹÓã¼httpModules£¾ºÍ£¼add£¾½Úµã°ÑHTTPÄ£¿éÌí¼Óµ½WebÓ¦ÓóÌÐòÖС£Êµ¼ÊÉÏÄ£¿é¶¼Ê¹Óã¼add£¾½ÚµãÁоÙÔÚ£¼httpModules£¾ºÍ£¼/httpModules£¾½ÚµãÖ®ÄÚÁË¡£

¡¡¡¡ÒòΪÅäÖÃÉèÖÃÐÅÏ¢ÊÇ¿ÉÒԼ̳еģ¬ËùÒÔ×ÓĿ¼´Ó¸¸Ä¿Â¼ÄǶù¼Ì³ÐÅäÖÃÉèÖÃÐÅÏ¢¡£Æä½á¹ûÊÇ£¬×ÓĿ¼¿ÉÄܼ̳ÐÁËһЩ²»ÐèÒªµÄHTTPÄ£¿é£¨ËüÃÇÊǸ¸ÅäÖÃÐÅÏ¢µÄÒ»²¿·Ö£©£»Òò´Ë£¬ÎÒÃÇÐèÒªÒ»ÖÖɾ³ýÕâЩ²»ÐèÒªµÄÄ£¿éµÄ·½·¨¡£ÎÒÃÇ¿ÉÒÔʹÓã¼remove£¾½Úµã£»Èç¹ûÎÒÃÇÏ£Íûɾ³ý´ÓÓ¦ÓóÌÐò¼Ì³ÐµÃµ½µÄËùÓÐHTTPÄ£¿é£¬¿ÉÒÔʹÓã¼clear£¾½Úµã¡£

¡¡¡¡ÏÂÃæµÄ´úÂëÊÇÌí¼ÓHTTPÄ£¿éµÄÒ»¸öͨÓÃʾÀý£º

£¼httpModules£¾

£¼add type="classname, assemblyname" name="modulename" /£¾

£¼httpModules£¾

¡¡¡¡ÏÂÃæµÄ´úÂëÊÇ´ÓÓ¦ÓóÌÐòÖÐɾ³ýHTTPÄ£¿éµÄÒ»¸öͨÓÃʾÀý£º

£¼httpModules£¾

£¼remove name="modulename" /£¾

£¼httpModules£¾

¡¡¡¡ÔÚÉÏÃæµÄXMLÖУº

¡¡¡¡· TypeÊôÐÔÓÃÀàºÍ²¿¼þÃû³ÆµÄÐÎʽָ¶¨ÁËHTTPÄ£¿éµÄʵ¼ÊÀàÐÍ¡£

¡¡¡¡· NameÊôÐÔÖ¸¶¨ÁËÄ£¿éµÄÓѺÃÃû³Æ¡£ÆäËüÓ¦ÓóÌÐò¿ÉÒÔʹÓÃÕâ¸öÃû³ÆÀ´Ê¶±ðHTTPÄ£¿é¡£

¡¡¡¡ASP.NETÔËÐÐʱÈçºÎʹÓÃHTTPÄ£¿é

¡¡¡¡ASP.NETÔËÐÐʱʹÓÃHTTPÄ£¿éʵÏÖÄ³Ð©ÌØÊâµÄ¹¦ÄÜ¡£ÏÂÃæµÄƬ¶ÎÀ´×ÔÓÚmachine.configÎļþ£¬ËüÏÔʾÁËASP.NETÔËÐÐʱ°²×°µÄHTTPÄ£¿é£º

£¼httpModules£¾

¡¡£¼add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/£¾

¡¡£¼add name="Session" type="System.Web.SessionState.SessionStateModule"/£¾

¡¡£¼add name="WindowsAuthentication"

type="System.Web.Security.WindowsAuthenticationModule"/£¾

¡¡£¼add name="FormsAuthentication"

type="System.Web.Security.FormsAuthenticationModule"/£¾

¡¡£¼add name="PassportAuthentication"

type="System.Web.Security.PassportAuthenticationModule"/£¾

¡¡£¼add name="UrlAuthorization"

type="System.Web.Security.UrlAuthorizationModule"/£¾

¡¡£¼add name="FileAuthorization"

type="System.Web.Security.FileAuthorizationModule"/£¾

£¼/httpModules£¾

¡¡¡¡ASP.NETʹÓÃÉÏÃæÒ»Ð©HTTPÄ£¿éÀ´ÌṩһЩ·þÎñ£¬ÀýÈçÉí·ÝÑéÖ¤ºÍÊÚȨ¡¢¶Ô»°¹ÜÀíºÍÊä³ö»º³å¡£ÓÉÓÚÕâЩģ¿é¶¼×¢²áÔÚmachine.configÎļþÖС£

¡¡¡¡ÊµÏÖÒ»¸öÌṩ°²È«·þÎñµÄHTTPÄ£¿é

¡¡¡¡ÏÖÔÚÎÒÃÇʵÏÖÒ»¸öHTTPÄ£¿é£¬ËüΪÎÒÃǵÄWebÓ¦ÓóÌÐòÌṩ°²È«·þÎñ¡£¸ÃHTTPÄ£¿é»ù±¾ÉÏÊÇÌṩһÖÖ¶¨ÖƵÄÉí·ÝÈÏÖ¤·þÎñ¡£Ëü½«½ÓÊÕHTTPÇëÇóÖеÄÉí·Ýƾ֤£¬²¢È·¶¨¸Ãƾ֤ÊÇ·ñÓÐЧ¡£Èç¹ûÓÐЧ£¬ÓëÓû§Ïà¹ØµÄ½ÇÉ«ÊÇʲô£¿Í¨¹ýUser.Identity¶ÔÏó£¬Ëü°ÑÕâЩ½ÇÉ«Óë·ÃÎÊÎÒÃǵÄWebÓ¦ÓóÌÐòÒ³ÃæµÄÓû§µÄ±êʶ¹ØÁªÆðÀ´¡£

ÏÂÃæÊǸÃHTTPÄ£¿éµÄ´úÂ룺

using System;

using System.Web;

using System.Security.Principal;

namespace SecurityModules

{

¡¡/// Class1µÄ×ÜÌåÃèÊö¡£

¡¡public class CustomAuthenticationModule : IHttpModule

¡¡{

¡¡¡¡public CustomAuthenticationModule()

¡¡¡¡{

¡¡¡¡}

¡¡¡¡public void Init(HttpApplication r_objApplication)

¡¡¡¡{

¡¡¡¡¡¡// ÏòApplication ¶ÔÏó×¢²áʼþ´¦Àí³ÌÐò¡£

¡¡¡¡¡¡r_objApplication.AuthenticateRequest +=

new EventHandler(this.AuthenticateRequest) ;

¡¡¡¡}

¡¡¡¡public void Dispose()

¡¡¡¡{

¡¡¡¡¡¡// ´Ë´¦¿Õ³ö£¬ÒòΪÎÒÃDz»ÐèÒª×öʲô²Ù×÷¡£

¡¡¡¡}

¡¡¡¡private void AuthenticateRequest(object r_objSender,EventArgs r_objEventArgs)

¡¡¡¡{

¡¡¡¡¡¡// ¼ø±ðÓû§µÄƾ֤£¬²¢ÕÒ³öÓû§½ÇÉ«¡£¡£

¡¡¡¡¡¡1. HttpApplication objApp = (HttpApplication) r_objSender ;

¡¡¡¡¡¡2. HttpContext objContext = (HttpContext) objApp.Context ;

¡¡¡¡¡¡3. if ( (objApp.Request["userid"] == null) ||

¡¡¡¡¡¡4.¡¡ (objApp.Request["password"] == null) )

¡¡¡¡¡¡5.¡¡ {

¡¡¡¡¡¡6.¡¡¡¡ objContext.Response.Write("£¼H1£¾Credentials not provided£¼/H1£¾") ;

¡¡¡¡¡¡7.¡¡¡¡ objContext.Response.End() ;

¡¡¡¡¡¡8. ¡¡}

¡¡¡¡¡¡9. string userid = "" ;

¡¡¡¡¡¡10. userid = objApp.Request["userid"].ToString() ;

¡¡¡¡¡¡11. string password = "" ;

¡¡¡¡¡¡12. password = objApp.Request["password"].ToString() ;

¡¡

¡¡¡¡¡¡13. string[] strRoles ;

¡¡¡¡¡¡14. strRoles = AuthenticateAndGetRoles(userid, password) ;

¡¡¡¡¡¡15. if ((strRoles == null) || (strRoles.GetLength(0) == 0))

¡¡¡¡¡¡16. {

¡¡¡¡¡¡17.¡¡ objContext.Response.Write("£¼H1£¾We are sorry but we could not

find this user id and password in our database£¼/H1£¾") ;

¡¡¡¡¡¡18.¡¡ objApp.CompleteRequest() ;

¡¡¡¡¡¡19. }

¡¡¡¡¡¡20. GenericIdentity objIdentity = new GenericIdentity(userid,

"CustomAuthentication") ;

¡¡¡¡¡¡21. objContext.User = new GenericPrincipal(objIdentity, strRoles) ;

¡¡¡¡}

¡¡¡¡private string[] AuthenticateAndGetRoles(string r_strUserID,string r_strPassword)

¡¡¡¡{

¡¡¡¡¡¡string[] strRoles = null ;

¡¡¡¡¡¡if ((r_strUserID.Equals("Steve")) && (r_strPassword.Equals("15seconds")))

¡¡¡¡¡¡{

¡¡¡¡¡¡¡¡strRoles = new String[1] ;

¡¡¡¡¡¡¡¡strRoles[0] = "Administrator" ;

¡¡¡¡¡¡}

¡¡¡¡¡¡else if ((r_strUserID.Equals("Mansoor")) && (r_strPassword.Equals("mas")))

¡¡¡¡¡¡{

¡¡¡¡¡¡¡¡strRoles = new string[1] ;

¡¡¡¡¡¡¡¡strRoles[0] = "User" ;

¡¡¡¡¡¡}

¡¡¡¡¡¡return strRoles ;

¡¡¡¡}

¡¡}

}

¡¡¡¡ÎÒÃÇÑо¿Ò»ÏÂÉÏÃæµÄ´úÂë¡£

¡¡¡¡ÎÒÃÇÊÇ´Ó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Ðзdz£ÖØÒª£¬ÒòΪÕâÁ½ÐÐʵ¼ÊÉϸæËß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½«¿´µ½ÏÂÃæµÄÏûÏ¢£º

×öÈËÒªºñµÀ£¬Çë×¢Ã÷ת×Ô¿áÍø¶¯Á¦(www.ASPCOOL.COM)¡£

ÔðÈα༭£ºadmin
±¾ÎÄÒýÓõØÖ·£º http://www.3pcode.com/net/2007/10/91349.htm
Ïà¹ØÎÄÕÂ