教学材料《Web应用开发》-第七章_第1页
教学材料《Web应用开发》-第七章_第2页
教学材料《Web应用开发》-第七章_第3页
教学材料《Web应用开发》-第七章_第4页
教学材料《Web应用开发》-第七章_第5页
已阅读5页,还剩111页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

7.1Web应用程序Web应用程序工作在B/S模式下,用户通过浏览器访问驻留在Web服务器上的多个页面。ASP.NETWeb应用程序被定义为可从Web服务器上的虚拟目录及其子目录中调用的所有文件和可执行码。其中可以包含网页(.html文件)、表单页面(.aspx文件)、Web表单用户控件(.ascx文件)、XMLWeb服务(.asmx文件)、HTTP处理程序、HTTP模块和其他文件(如图像和配置文件)。下一页返回7.1Web应用程序上一页下一页返回现在使用的所有与Microsoft.NETFramework版本相关的脚本映射也都是ASP.NET应用程序的一部分。ASP.NET应用程序必须位于IIS虚拟目录(也称为应用程序根目录)中。配置一个Web应用程序一般需要以下几步。1.设置应用程序的目录结构一个Web站点可以有多个应用程序运行,而每一个应用程序可以用唯一的URL来访问,首先应先利用IIS设置应用程序的目录为“虚拟目录”。7.1Web应用程序每个“虚拟目录”和一个物理目录相对应,各个应用程序的“虚拟目录”可以不存在任何物理上的关系。例如:应用URL:物理路径:c:\inetpub\wwwroot两者可以放置在完全不同的机器上。2.设置相应的配置文件根据应用程序的具体需要,可以设置相应的全局应用文件Global.asax和配置文件Web.Config,并且设置相应的选项。上一页下一页返回7.1Web应用程序Global.asax文件主要配置application_start、application_end、session_start、session_end

等事件。3.把应用程序所涉及的各种文件放入“虚拟目录”中把.aspx文件、.ascx文件以及各种资源文件分门别类放入应用程序虚拟目录所对应的物理目录中,把类引用所涉及的集合放入应用程序目录下的bin目录中。上一页返回7.2

全局应用文件Global.asaxGlobal.asax文件提供了一种在一个中心位置响应应用程序级或模块级事件的方法。用户可以使用这个文件实现应用程序安全性以及其他一些任务。Global.asax是一个可选文件,若存在则必须位于应用程序的根目录下。.asax文件扩展名指出它是一个应用程序文件,而不是一个使用.aspx的ASP.NET文件。Global.asax文件被配置为任何(通过URL的)直接HTTP请求都被自动拒绝,所以用户不能下载或查看其内容。ASP.NET页面框架能够自动识别出对Global.asax文件所做的任何更改。下一页返回7.2

全局应用文件Global.asax在Global.asax被更改后,ASP.NET页面框架会重新启动应用程序,包括关闭所有的浏览器会话,去除所有状态信息,并重新启动应用程序域。Global.asax文件继承自HttpApplication类,它维护一个HttpApplication对象池,并在需要时将对象池中的对象分配给应用程序。Global.asax文件包含以下事件。①Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发。对于所有的HttpApplication对象实例,它都会被调用。上一页下一页返回7.2

全局应用文件Global.asax②Application_Disposed:在应用程序被销毁之前触发。这是清除以前所用资源的理想位置。③Application_Error:当应用程序中遇到一个未处理的异常时,该事件被触发。④Application_Start:在HttpApplication类的第一个实例被创建时,该事件被触发。它允许创建可以由所有HttpApplication实例访问的对象。上一页下一页返回7.2

全局应用文件Global.asax上一页下一页返回⑤Application_End:在HttpApplication类的最后一个实例被销毁时,该事件被触发。在一个应用程序的生命周期内它只被触发一次。⑥Application_BeginRequest:在接收到一个应用程序请求时触发。对于一个请求来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。⑦Application_EndRequest:针对应用程序请求的最后一个事件。7.2

全局应用文件Global.asax上一页下一页返回⑧Application_PreRequestHandlerExecute:在ASP.NET页面框架开始执行诸如页面或Web服务之类的事件处理程序之前,该事件被触发。⑨Application_PostRequestHandlerExecute:在ASP.NET页面框架结束执行一个事件处理程序时,该事件被触发。⑩Applcation_PreSendRequestHeaders:在ASP.NET页面框架发送HTTP头给请求客户(浏览器)时,该事件被触发。

Application_PreSendContent:在ASP.NET页面框架发送内容给请求客户(浏览器)时,该事件被触发。7.2

全局应用文件Global.asaxApplication_AcquireRequestState:在ASP.NET页面框架得到与当前请求相关的当前状态(Session状态)时,该事件被触发。

Application_ReleaseRequestState:在ASP.NET页面框架执行完所有的事件处理程序时,该事件被触发。这将导致所有的状态模块保存它们当前的状态数据。

Application_ResolveRequestCache:在ASP.NET页面框架完成一个授权请求时,该事件被触发。它允许缓存模块从缓存中为请求提供服务,从而绕过事件处理程序的执行。上一页下一页返回7.2

全局应用文件Global.asaxApplication_UpdateRequestCache:在ASP.NET页面框架完成事件处理程序的执行时,该事件被触发,从而使缓存模块存储响应数据,以供响应后续的请求时使用。

Application_AuthenticateRequest:在安全模块建立起当前用户的有效的身份时,该事件被触发。在这个时候,用户的凭据将会被验证。

Application_AuthorizeRequest:当安全模块确认一个用户可以访问资源之后,该事件被触发。上一页下一页返回7.2

全局应用文件Global.asaxSession_Start:在一个新用户访问应用程序Web站点时,该事件被触发。

Session_End:在一个用户的会话超时、结束或它们离开应用程序Web站点时,该事件被触发。使用上面的事件时应注意它们被触发的顺序。Application_Init和Application_Start事件在应用程序第一次启动时被触发一次。上一页下一页返回7.2

全局应用文件Global.asax相似地,Application_Disposed和Application_End事件在应用程序终止时被触发一次。此外,基于会话的事件(Session_Start和Session_End)只在用户进入和离开站点时被使用。其余的事件则处理应用程序请求,这些事件被触发的顺序是:Application_BeginRequestApplication_AuthenticateRequestApplication_AuthorizeRequestApplication_ResolveRequestCacheApplication_AcquireRequestState上一页下一页返回7.2

全局应用文件Global.asaxApplication_PreRequestHandlerExecuteApplication_PreSendRequestHeadersApplication_PreSendRequestContent<<页面逻辑代码>>Application_PostRequestHandlerExecuteApplication_ReleaseRequestStateApplication_UpdateRequestCacheApplication_EndRequest上一页下一页返回7.2

全局应用文件Global.asax[例7-1]利用Global.asax文件统计网站总访问量和当前在线人数。(1)在SQLServer中建立数据库Count,并建立表Count,设置字段num类型为int。(2)启动VisualStudio.NET2005,打开网站Chapter07。(3)在“解决方案资源管理器”的根结点处右击,在弹出的快捷菜单中选择“添加新项”命令,再在弹出的对话框中选择“全局应用程序类”,就建立了Global.asax文件。上一页下一页返回7.2

全局应用文件Global.asax(4)在Global.asax文件中输入如下代码:voidApplication_Start(objectsender,EventArgse){//在应用程序启动时运行的代码SqlConnectionconn=newSqlConnection("server=localhost;database=count;integratedsecurity=SSPI;");上一页下一页返回7.2

全局应用文件Global.asaxconn.Open();SqlCommandcmd=newSqlCommand("select*fromcount",conn);intcount=Convert.ToInt32(cmd.ExecuteScalar());//取出数据库中的记录conn.Close();Application[“Total”]=count;//网站总访问量上一页下一页返回7.2

全局应用文件Global.asaxApplication["Online"]=0;//当前在线人数}voidApplication_End(objectsender,EventArgse){//在应用程序关闭时运行的代码SqlConnectionconn=newSqlConnection("server=localhost;database=count;上一页下一页返回7.2

全局应用文件Global.asaxintegratedsecurity=SSPI;");conn.Open();SqlCommandcmd=newSqlCommand("updateCountsetnum="+Application["Total"].ToString(),conn);cmd.ExecuteNonQuery();//更新数据库中的记录conn.Close();}voidSession_Start(objectsender,EventArgse)上一页下一页返回7.2

全局应用文件Global.asax{//在新会话启动时运行的代码Application.Lock();Application["Total"]=(int)Application["Total"]+1;Application["Online"]=(int)Application["Online"]+1;Application.UnLock();}上一页下一页返回7.2

全局应用文件Global.asaxvoidSession_End(objectsender,EventArgse){//在会话结束时运行的代码Application.Lock();Application["Online"]=(int)Application["Online"]-1;Application.UnLock();}上一页下一页返回7.2

全局应用文件Global.asax(5)新建一个网页文件ShowCount.aspx,在窗体中拖入两个TextBoxt控件Label1和Label2,分别设置Text属性为“网站总访问量:”、“当前在线人数:”。再拖入两个TextBoxt控件,将其ID属性改为LblTotal、LblOnline。(6)在ShowCount.aspx的Page_Load事件中输入如下代码:protectedvoidPage_Load(objectsender,EventArgs)上一页下一页返回7.2

全局应用文件Global.asax{this.LblTotal.Text=Application["Total"].ToString();//网站总访问量this.LblOnline.Text=Application["Online"].ToString();//当前在线人数}(7)程序运行后的效果如图7-1所示。上一页下一页返回7.2

全局应用文件Global.asax程序说明:①在Global.asax文件使用了SQL数据库,要插入命名空间为<%@ImportNamespace="System.Data.SqlClient"%>②当网页关闭时,并不一定马上触发Session_End事件,因为Session的生存期为20分钟,所以不能及时地反映在线人数。如果要较快的触发Session_End事件,可以设置Web.Config配置文件中Session的timeout属性,如设为1分钟。③Application_End事件在正常关机时触发,因为关机的效果是服务器上的WWW服务被停止,所以要使Application_End事件发生,停止服务器上的WWW服务即可。上一页返回7.3

配置文件Web.ConfigWeb.Config文件是一个文本文件,其中包含XML格式的信息,用来储存ASP.NETWeb应用程序的配置信息,它可以出现在应用程序的任何目录中。每个Web.Config文件将配置设置应用到它所在的目录和它下面的所有虚拟子目录中。Web.Config文件的所有配置设置都会被它的子目录继承。如果想修改子目录的配置设置,可以在该子目录下新建一个Web.Config文件。它可以提供除从父目录继承的配置信息以外的配置信息,也可以重写或修改父目录中定义的设置。下一页返回7.3

配置文件Web.Config在运行时对Web.Config文件的修改不需要重启服务就可以生效(<processModel>节例外)。Web.Config文件是可以扩展的,可以自定义新配置参数并编写配置节处理程序以对它们进行处理。VisaulStudio.NET2005不会自动生成Web.Config文件,可通过以下方法创建Web.Config文件。(1)按F5键启动调试,会弹出一个对话框,保持默认选项,单击“确定”按钮,系统会添加一个Web.Config文件。上一页下一页返回7.3

配置文件Web.Config(2)在“解决方案资源管理器”的根结点处右击,从弹出的快捷菜单中选择“添加新项”命令,再在弹出的对话框中选择“Web配置文件”选项,可创建一个Web.Config文件。上一页下一页返回7.3

配置文件Web.Config7.3.1Web.Config文件的格式每个Web.Config配置文件都包含了由用于指定配置设置的XML标记和子标记组成的嵌套层次结构。因为标记必须是标准格式的XML,所以标记、子标记和属性都要区分大小写。标记和属性名都是驼峰式大小写,即标记名的第一个字符是小写,而随后的所有连接字的首字母全都是大写。属性值采用Pascal的大小写格式,即第一个字符大写,而随后的任何连接字的首字母也都大写。true和false例外,它们始终都是小写。上一页下一页返回7.3

配置文件Web.Config所有配置信息都位于<configuration>和</configuration>根元素之间。标记间的配置信息分为两大主要区域:配置节处理程序声明区域和配置节设置区域。配置节处理程序声明出现在配置文件顶部的<configSections>和</configSections>标记之间。包含在<section>标记中的每个声明都指定了提供特定的配置数据集的节名和处理该节中配置数据的.NETFramework类的名称。上一页下一页返回7.3

配置文件Web.Config配置节设置区域位于<configSections>区域后面,这部分包含了实际的配置设置。在<configSections>区域中的每个声明都有一个配置节。每个配置节都包含带有该节设置属性的子标记。配置设置在节分组标记下经常嵌套在一起。这些顶级节标记通常表示配置设置应用到的命名空间,如顶级<>标记代表网络类的设置,而<system.web>标记则代表ASP.NET类的设置。上一页下一页返回7.3

配置文件Web.ConfigWeb.Config文件格式如下:<configuration><configSections><!--置节处理程序声</configSections><><!--网络类的设置-->上一页下一页返回7.3

配置文件Web.Config</><system.web><!--ASP.NET类的设置--></system.web><configuration>上一页下一页返回7.3

配置文件Web.Config7.3.2

配置文件的标准节ASP.NET定义了一些标准节,所谓标准节就是系统已经定义好的节,可以直接使用。下面介绍常用的标准节。1.<authentication>标准节用来配置ASP.NET身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。<authentication>元素必须与<authorization>节配合使用。上一页下一页返回7.3

配置文件Web.Config[例7-2]为基于窗体(Forms)的身份验证配置站点,当没有登录的用户访问需要身份验证的网页,网页自动跳转到登录网页。<authenticationmode="Forms"><formsloginUrl="logon.aspx"name=".FormsAuthCookie"/></authentication>上一页下一页返回7.3

配置文件Web.Config说明:元素loginUrl表示登录网页的名称,name表示Cookie名称。2.<authorization>标准节控制对URL资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必须与<authentication>节配合使用。[例7-3]禁止匿名用户的访问。上一页下一页返回7.3

配置文件Web.Config<authorization><denyusers="?"/></authorization>说明:可以使用来获取已经通过验证的当前的用户名,使用web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面。上一页下一页返回7.3

配置文件Web.Config3.<compilation>标准节配置ASP.NET使用的所有编译设置。defaultLanguage属性表示应用程序的默认语言;debug属性表示应用程序能否被调试,它的值为一个布尔型。在应用程序的开发过程中,把debug属性设为True,而当应用程序一旦放到服务器上运行时,一般把debug属性设为False,即禁止调试应用程序,这样可以提高站点的安全性和程序的运行性能。上一页下一页返回7.3

配置文件Web.Config[例7-4]配置应用程序可以被调试。<compilationdefaultLanguage="c#"debug="true"/>4.<customErrors>标准节用来当应用程序发生错误时,定义错误的重定向页面的链接地址。它不适用于XMLWeb

services中发生的错误。[例7-5]当发生错误时,将网页跳转到自定义的错误页面。上一页下一页返回7.3

配置文件Web.Config<customErrorsmode="RemoteOnly"defaultRedirect="error.aspx"><errorstatusCode="404"redirect="err04page.aspx"/></customErrors>对上述代码代作以下说明。上一页下一页返回7.3

配置文件Web.Config①mode属性:具有On、Off、RemoteOnly3种状态。On表示始终显示自定义的信息;Off表示始终显示详细的ASP.NET错误信息;RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息。②defaultRedirect属性:用于出现错误时重定向的URL地址,是可选的。③statusCode属性:指明错误状态码,表明一种特定的出错状态。错误码404表示找不到资源。上一页下一页返回7.3

配置文件Web.Config④redirect属性:错误重定向的URL。5.<httpRuntime>标准节用来设置用户上载文件大小的限制。[例7-6]控制用户上传文件最大为4MB,最长时间为60秒,最多请求数为100。上一页下一页返回7.3

配置文件Web.Config<httpRuntimemaxRequestLength="4096"executionTimeout="60"appRequestQueueLimit="100"/>对上述代码作以下说明。①maxRequestLength属性:指定输入流缓冲阈值限制(以KB为单位)。此限制可用于防止拒绝服务攻击;例如,因用户向服务器发送大型文件而导致的拒绝服务攻击。默认值为4096(4MB)。上一页下一页返回7.3

配置文件Web.Config②executionTimeout属性:指定在被ASP.NET自动关闭前,允许执行请求的最大秒数。只有当compliation元素中的调试属性为False时,此超时属性才适用。若要帮助避免在调试期间关闭应用程序,应不将此超时属性设置为较大值。③appRequestQueueLimit属性:指定ASP.NET将为应用程序排队的请求的最大数目。当没有足够的自由线程来处理请求时,将对请求进行排队。上一页下一页返回7.3

配置文件Web.Config当队列超出了该属性中指定的限制时,将通过“503-服务器太忙”错误信息拒绝传入的请求。默认值为5000。6.<pages>标准节标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。[例7-7]要求页面启用缓存、会话状态、页事件与智能导航。上一页下一页返回7.3

配置文件Web.Config<pagesbuffer="true"enableSessionState="true"autoEventWireup="true"smartNavigation="true"/>对上述代码作以下说明。①buffer属性:指定URL资源是否使用响应缓冲。默认值为True。上一页下一页返回7.3

配置文件Web.Config②enableSessionState属性:为配置文件范围内的资源指定会话状态要求。默认值为True,指示会话状态已启用。False,指示会话状态已禁用。ReadOnly,表明会话状态不可写。③autoEventWireup属性:指定是否自动启用页事件。它表示系统将自动连接特定签名的方法(如page_Load)。默认值为True。上一页下一页返回7.3

配置文件Web.Config④smartNavigation属性:指定是否启用智能导航。智能导航需要MicrosoftInternet

Explorer5.5版或更高版本。启用智能导航时,有以下好处:消除导航时出现的闪烁现象,在不同页之间保持滚动位置,在不同页之间保持元素焦点,浏览器的历史记录中只保留页的最近一次状态。默认值为False。7.<sessionState>标准节上一页下一页返回7.3

配置文件Web.Config为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。[例7-8]设置会话状态。<sessionStatemode="InProc"stateConnectionString="tcpip=:42424"上一页下一页返回7.3

配置文件Web.ConfigsqlConnectionString="datasource=;Trusted_Connection=yes"cookieless="false"timeout="20"/>对上述代码作以下说明。①mode属性:分为off、Inproc、StateServer、SqlServer几种状态。上一页下一页返回7.3

配置文件Web.Configmode="Off"设置为不使用Session。mode="InProc"存储在进程中,特点:具有最佳的性能,速度最快,但不能跨多台服务器存储共享。mode="StateServer"存储在状态服务器中,特点:当需要跨服务器维护用户会话信息时,使用此方法。但是信息存储在状态服务器上,一旦状态服务器出现故障,信息将丢失。上一页下一页返回7.3

配置文件Web.Configmode="SqlServer"存储在SQLServer中,特点:工作负载会变大,但信息不会丢。②stateConnectionString属性:指定ASP.NET应用程序存储远程会话状态的服务器名,默认为本机。③sqlConnectionString属性:当用会话状态为数据库时,在这里设置连接字符串。④Cookieless属性:设置为True时,表示不使用Cookie会话状态来标识客户;设置为False时与之相反。上一页下一页返回7.3

配置文件Web.Config⑤TimeOut属性:用来定义会话状态存储的时间,超过期限,将自动终止会话。8.<trace>标准节配置ASP.NET跟踪服务,主要用来进行程序测试,判断哪里出错。[例7-9]以下为Web.Config中的默认配置。上一页下一页返回7.3

配置文件Web.Config<traceenabled="false"requestLimit="10"pageOutput="false"traceMode="SortByTime"localOnly="true"/>对上述代码作以下说明。①enabled属性:指定是否为应用程序启用跟踪。为了使用Trace.axd查看器,必须启用跟踪。默认值为False。上一页下一页返回7.3

配置文件Web.Config②requestLimit属性:指定在服务器上存储的跟踪请求的数目。如果达到限制,并且mostRecen属性为False,将自动禁用跟踪。最大请求限制为10000。如果指定了大于10000的值,ASP.NET会在不给出任何提示的情况下将它向下舍入到10000。默认值为10。③pageOutput属性:指定在每一页的结尾是否呈现跟踪输出。如果是False,则只能通过跟踪实用工具访问跟踪输出。默认值为False。上一页下一页返回7.3

配置文件Web.Config④traceMode属性:指定显示跟踪信息的顺序。值为SortByCategory,指定以处理跟踪信息的顺序来显示跟踪信息。值为SortByTime,指定根据用户定义的类别按字母顺序显示跟踪信息。默认值为SortByTime。⑤localOnly属性:指定跟踪查看器(Trace.axd)是否只用于主机Web服务器。如果是False,则跟踪查看器可用于任何计算机。默认情况下,Trace.axd查看器被添加到httpHandlers元素。默认值为True。上一页下一页返回7.3

配置文件Web.Config7.3.3配置文件的自定义节除了使用标准节之外,ASP.NET还允许创建自定义配置节。自定义配置节主要分为两个区域:配置节处理程序声明区域和配置节设置区域。配置节处理程序声明区域位于<configSection>和</configSection>标记之间,使用section元素来声明配置节处理程序,可以将这些配置节处理程序声明嵌套在sectionGroup元素中,帮助组织配置信息,如下所示:上一页下一页返回7.3

配置文件Web.Config<configSections><sectionGroupname="system.web"type="System.Web.Configuration.SystemWebSectionGroup,System.Web,Version=,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a">上一页下一页返回7.3

配置文件Web.Config<sectionname="pages"type="System.Web.Configuration.PagesSection,System.Web,Version=,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"/>…</sectionGroup>上一页下一页返回7.3

配置文件Web.Config…</configSections>上面代码说明,配置节处理程序声明区域中的每个配置节都有一个节处理程序声明,节处理程序是实现了ConfigurationSection类的.NetFramework类。节处理程序声明中包含节的名称(pages)以及用来处理该节中配置数据的节处理程序类的名称(如System.Web.Configuration,PagesSection)。上一页下一页返回7.3

配置文件Web.Config当需要自定义配置节时,应完成以下几步。(1)设计自己的配置节处理程序类,实现ConfigurationSection类,并扩展自己所需的功能。(2)在配置节处理程序声明区域中声明节处理程序类。(3)在配置节配置自定义的配置节。其中,实现自定义的配置节处理程序通常有两种方式,也就是两种实现模型,分别是声明性模型和编程模型。这里介绍的是以声明性模型来实现一个自定义配置节处理程序。上一页下一页返回7.3

配置文件Web.Config[例7-10]自定义配置节。(1)在网站Chapter07中添加新建一个类文件MySection.cs,输入如下代码:usingSystem;usingSystem.Configuration;namespaceMyConfigSection{上一页下一页返回7.3

配置文件Web.ConfigpublicclassMySection:ConfigurationSection{publicMySection(){}[ConfigurationProperty("MyAttribute")]publicStringMyAttribute上一页下一页返回7.3

配置文件Web.Config{get{return(String)this["MyAttribute"];}set{上一页下一页返回7.3

配置文件Web.Config}}}}(2)打开Web.Config文件,在ConfigSections配置节中,添加自己的配置节。代码如下:<configSections>上一页下一页返回7.3

配置文件Web.Config

<sectionGroupname="newSectionGroup"><sectionname="newSection"type="MyConfigSection.MySection"/></sectionGroup></configSections>(3)在</configSections>之后的配置节设置区域中,上一页下一页返回7.3

配置文件Web.Config使用新定义的配置节。代码如下:<newSectionGroup><newSectionMyAttribute="AttributeValue"/></newSectionGroup>(4)然后在Default.aspx页面中以编程方式访问配置数据,在Page_Load事件中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse)上一页下一页返回7.3

配置文件Web.Config{MyConfigSection.MySectionmy=(MyConfigSection.MySection)ConfigurationManager.GetSection("newSectionGroup/newSection");Response.Write("Attribute="+my.MyAttribute);}上一页下一页返回7.3

配置文件Web.Config(5)运行程序,效果如图7-2所示。程序说明:①MySection类的实现继承自ConfigurationSection类,虽然也可以通过继承IConfigurationSectionHandler创建自定义配置节,但是该接口在.NET2.0中已经被否决;②使用ConfigurationPropertyAttribute属性将自定义类的一个普通字符串属性(Property)MyAttribute设置上一页下一页返回7.3

配置文件Web.Config成为一个配置节的节属性(Attribute);③在MyAttribASP.NETgurationPropertyprop]{get;set;}protectedinternalobjectthis[stringpropertyName]{get;set;}程序中使用的该类中的第二个索引器,对配置数据进行访问;上一页下一页返回7.3

配置文件Web.Config

④[ConfigurationProperty("MyAttribute")]属性修饰与被修饰属性的两个访问器中的this["MyAttribute"],其中的字符串必须一致,因为这个字符串就代表着要操作的节属性名称,也就是在Web.Config中要使用的节属性名称;⑤通过声明性模型创建自定义配置节程序类比较简单,因为它对ASP.NET的基础配置架构进行了进一步的封装,更方便使用,同时简化了程序结构。上一页返回7.4

Web应用程序的安全配置大多数网站都需要选择性地限制对站点的某些部分的访问。可以将网站看成是美术展览馆,该展览馆对公众开放供其进来参观,但是该设施的一些特定部分(如业务办公室),只有具有特定凭证的人(如雇员)才能进入。对于大多数Web站点来说,也是如此,并不是所有页面都允许匿名访问,如下订单、访问需要付费的信息或管理站点等,通常就需要访问者提供自己的身份标识。Web安全就是为限制只有特定用户群才可以访问某些文件而设计的。ASP.NET提供了三种安全机制:身份验证机制、授权机制和模拟机制。下一页返回7.4

Web应用程序的安全配置①身份验证机制可以防止非法用户访问Web资源,身份验证明确识别应用程序的客户端,客户端包括最终用户、服务、进程和计算机。②授权机制定义在应用程序中允许那些经过身份验证的客户端查看什么和执行什么操作。③模拟机制是服务器应用程序用于代表客户端访问资源的技术。客户端的安全上下文供服务器执行访问检查使用。上一页下一页返回7.4

Web应用程序的安全配置7.4.1身份验证身份验证是从用户处获取名称和密码等标识凭证,并根据某些机构验证这些凭据的过程。如果凭据有效,则提交该凭据的实体被视为通过身份验证的标识。一旦标识通过了身份验证,则身份验证过程会确定该标识是否可以访问给定的资源。ASP.NET通过身份验证提供程序(即包含验证请求者凭据所需代码的代码模块)来实现身份验证。ASP.NET支持以下三种身份验证提供程序。上一页下一页返回7.4

Web应用程序的安全配置1)Forms身份验证Forms身份验证是要求用户在WebForm中输入用户名和密码。当用户第一次访问被保护的页面的时候,ASP.NET会把用户引导到指定的登录页,当登录成功以后,ASP.NET会记录一个Cookie,用来作为用户身份的证明,然后将用户引导回最初要求登录的页面。2)Windows身份验证上一页下一页返回7.4

Web应用程序的安全配置Windows身份验证是使用Windows的账号密码来验证用户,主要适用部署在局域网内部的网站,每个使用此网站的人都有一个可以登录网络的账户。3)Passport身份验证Passport身份验证是由Microsoft提供的集中身份验证服务,它是一个大型的用户名和密码数据库。当需要用户验证时,用户可以只创建一个登录名和密码就能登录到MicrosoftPassportNetwork站点和服务。上一页下一页返回7.4

Web应用程序的安全配置ASP.NET应用程序启用身份验证提供程序,需要在Web.Config的<authentication>中配置,其语法格式为:<configuration><system.web><authenticationmode="[Windows|Forms|Passport|None]"></authentication>上一页下一页返回7.4

Web应用程序的安全配置</system.web></configuration>格式说明:①Mode属性可设置为Windows、Forms、Passport或None四种身份验证模式之一,默认为Windows,如果将Mode设置为None,ASP.NET不会对该请求应用任何附加身份验证,当要实现自定义的身份验证方案,或只想使用匿名身份验证并想获得尽可能高的性能级别时,这是很有用的;上一页下一页返回7.4

Web应用程序的安全配置②身份验证模式不能在应用程序根目录以下的级别进行设置,其他ASP.NET模块也是如此,在URL中的子目录会继承身份验证模块,除非其被明确覆盖。本书主要介绍Forms身份验证模式和Windows身份验证模式。1.Forms身份验证模式上一页下一页返回7.4

Web应用程序的安全配置如果Web应用程序是Internet上的某个站点,这时需要采用Forms验证模式。根据存储在Web.Config配置文件或数据库中的用户信息来验证用户的身份是否合法。在Web.Config中配置Forms验证模式代码如下:<configuration><system.web><authenticationmode="Forms"/>上一页下一页返回7.4

Web应用程序的安全配置<formsname="AutoCookie"loginUrl="login.aspx"path="/"protection="All"timeout="30"></system.web></configuration>其中Forms参数属性见表7-1。[例7-11]进入网站的主页index.aspx需先登录,登录成功可以进入主页面,登录失败则再转到登录页面login.aspx。上一页下一页返回7.4

Web应用程序的安全配置(1)启动VisualStudio.NET2005,打开网站Chapter07。(2)如果没有生成Web.Config配置文件,按F5键运行自动生成。(3)打开Web.Config配置文件,输入如下代码:上一页下一页返回7.4

Web应用程序的安全配置<authenticationmode="Forms"><formsloginUrl="Login.aspx"name="AuthCookie"><credentialspasswordFormat="Clear"><username="Mary"password="123"/><username="Tom"password="456"/></credentials>上一页下一页返回7.4

Web应用程序的安全配置</forms></authentication>(4)在authorizatio节中,创建一个deny元素,并将其users属性设置为“?”。“?”表示拒绝未通过身份验证的用户(匿名用户)访问该应用程序中的资源。代码如下:<authorization>上一页下一页返回7.4

Web应用程序的安全配置<denyusers="?"/></authorization>(5)新建一个登录页面login.aspx,设计布局如图7-3所示。页面中的复选框被选中时,将用户的登录凭据保存下来。在“登录”按钮中输入如下代码:protectedvoidButton1_Click(objectsender,EventArgse)上一页下一页返回7.4

Web应用程序的安全配置{if(FormsAuthentication.Authenticate(UserName.Text,UserPass.Text)){//将用户重定向到最初所请求的页,同时传递用户名和复选框的布尔值,该值指示是否将//身份验证票证保存为Cookie上一页下一页返回7.4

Web应用程序的安全配置FormsAuthentication.RedirectFromLoginPage(UserName.Text,Persist.Checked);}else{Response.Write("不合法用户,请重试!");}}上一页下一页返回7.4

Web应用程序的安全配置(6)新建一个主页index.aspx,页面放入一个TextBox控件命名为“Welcome”。在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){Welcome.Text="Hello,"+User.Identity.Name;}上一页下一页返回7.4

Web应用程序的安全配置(7)运行网站主页index.aspx时,会先定向到login.aspx页面(如图7-4所示)要求用户登录,当登录失败会再次定位到登录页面,并提示错误(如图7-5所示),当登录成功后,才会进入主页(如图7-6所示)。2.Windows身份验证模式Windows验证模式中,用户是通过本地网络访问Web应用程序,使用内置的MicrosoftWindows身份验证来识别用户,只有具有有效的Windows用户名和密码才能访问Web应用程序。上一页下一页返回7.4

Web应用程序的安全配置用户身份可以在“计算机管理”中的“本地用户和组”中添加和管理,这样可以有效地避免外来用户对Web应用程序的攻击,从而保障Web的安全性。在Web.Config中配置Windows验证模式代码如下:<configuration><system.web>上一页下一页返回7.4

Web应用程序的安全配置<authenticationmode="Windows"/></system.web></configuration>[例7-12]Windows验证模式实例。(1)启动VisualStudio.NET2005,打开Chapter07项目。(2)如果没有生成Web.Config配置文件,按F5键运行自动生成。上一页下一页返回7.4

Web应用程序的安全配置

(3)打开Web.Config配置文件,输入如下代码:<authenticationmode="Windows"/>(4)打开Default.aspx文件,在Page_Load中输入如下代码:protectedvoidPage_Load(objectsender,EventArgse){上一页下一页返回7.4

Web应用程序的安全配置

Response.Write("当前的用户是:"+User.Identity.Name);}(5)运行程序,效果如图7-7所示。上一页下一页返回7.4

Web应用程序的安全配置7.4.2授权前面介绍的身份验证是根据用户的证件识别其身份,而授权是确定通过验证的用户可以访问哪些资源。ASP.NET提供了以下两种授权方式。1)文件授权文件授权由FileAuthorizationModule执行,且当使用Windows身份验证时,文件授权处于活动状态。它对.aspx或.asmx处理程序文件进行访问控制列表(ACL)的检查,以确定用户是否应具有访问权。上一页下一页返回7.4

Web应用程序的安全配置2)URL授权URL授权由URLAuthorizationModule类执行,该类会将用户和角色映射到URL名称空间的各个部分中。该模块可以实现肯定和否定的授权,也就是说,可以使用该模块选择性地允许或拒绝特定的集合、用户以及角色对URL名称空间中任意部分的访问。下面主要介绍URL授权方法。上一页下一页返回7.4

Web应用程序的安全配置URL授权要在Web.Config配置文件的<authorization>中配置,其语法格式为<authorization><[allow|deny]usersrolesverbs/></authorization>对上述代码作以下说明。(1)allow或deny元素是必需的。<allow>和<deny>上一页下一页返回7.4

Web应用程序的安全配置

分别指授予和撤销访问权限。(2)users和roles属性必须包含其一,verbs属性为可选。①users属性:指此元素的目标身份(用户账户)。用问号(?)标识匿名用户,用星号(*)指定所有经过身份验证的用户。②roles属性:指为被允许或被拒绝访问资源的当前请求标识一个角色(RolePrincipal对象)。上一页下一页返回7.4

Web应用程序的安全配置③verbs属性:定义操作所要应用到的HTTP谓词,如GET、HEAD和POST。默认值为“*”,它指定了所有谓词。[例7-13]将访问权限授予用户Kim、Terry和Admins角色的成员,同时拒绝John和所有匿名用户的访问。在Web.Config配置文件中,输入如下代码:<authorization>上一页下一页返回7.4

Web应用程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论