ASP.NET编程:ASP.NET 2.0中包管使用程序的平安
我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。asp.net|平安|程序<P> 成员和脚色办理器供应程序--如今ASP.NET2.0包括了内建的成员和脚色办理服务。因为这些服务都是供应程序驱动的(provider-driven),你能够容易地变动它,大概用自界说完成来取代它。登录控件--新的登录控件为站点的基于认证和受权的UI(比方登录窗体、创立用户窗体、暗码取回、已登任命户或脚色的定制UI)供应了基础模块。这些控件使用ASP.NET2.0中的内建的成员和脚色服务与站点所界说的用户和脚色信息交互操纵。
年夜多半Web使用程序的一个主要的部分是分辨用户并把持资本的会见权。检测哀求的实体(entity)身份的操纵就是认证(authentication)。一般,为了举行认证,用户必需供应凭据,比方帐号/暗码。一旦认证过的身份是无效的,就必需检测该身份是不是可以会见指定的资本,这个历程就是受权(authorization)。ASP.NET与IIS一同为使用程序供应认证和受权服务。
COM工具的一个主要特征就是,它可以把持那些运转COM工具代码的身份。当COM工具用哀求的实体身份运转代码的时分,就称为仿照(impersonation)。ASP.NET框架组件使用程序能够选择仿照哀求。
有些使用程序还但愿依据哀求的身份大概依据哀求的身份所属的脚色来静态地定制内容。ASP.NET框架组件使用程序能够静态地检测以后哀求的身份是不是属于某种脚色。比方,使用程序大概但愿检测以后用户是不是属于办理员脚色,以便为办理员有前提地天生内容。
ASP.NET2.0的成员特征使你创立和办理用户加倍简单了。成员特征一样平常与别的一个叫做脚色办理器的新特征一同运作。脚色办理器为创立脚色和给脚色指定用户供应了上层布局。当做员、脚色办理器特征和窗体认证一同事情的时分,ASP.NET2.0就能够为创立、认证和受权用户供应端对真个撑持。
成员和脚色办理器都是用基于供应程序的模子计划的。供应程序从特征所表露的类和营业逻辑中提取特征的物理数据存储。成员和脚色办理器特征都带有MicrosoftSQLServer供应程序。成员特征还带有一个用于处置举动目次和举动目次使用程序形式(ADAM)的供应程序。脚色办理器特征带有一个能使用WindowsServer2003受权办理特征的供应程序。你能够创建自界说的供应程序,并设置它与成员和脚色办理器特征一同利用。利用自界说供应程序的时分,使用成员和脚色办理器特征的页面仍旧会持续事情,毫无改动。
登录控件是一组自界说的服务器控件,它为认证和受权事件供应了公用的用户界面。登录控件使用了成员、脚色办理器和窗体认证特征中的功效。
认证和受权
ASP.NET与IIS一同撑持利用基础的、Digest和Windows认证。ASP.NET撑持微软Passport认证服务,它撑持单点登录服务和用户设置服务。ASP.NET还撑持一种利用基于窗体认证的壮大的服务。基于窗体的认证利用Cookie来认证用户,并同意使用程序实行本人的凭据考证历程。
我们要熟悉到,ASP.NET认证服务是遭到IIS供应的认证服务制约的。比方,为了在IIS使用程序中利用基础认证,你就必需利用Internet服务办理工具来设置使用程序以利用基础认证。
ASP.NET供应了两种受权服务:
・反省ACL(会见把持列表)或资本权限,看某个认证过的用户是不是可以会见该资本。
・URL受权,它同意一个身份利用必定的Web空间。
为了演示它们的不同,我们来看一个例子,假定某个使用程序同意匿名用户利用IUSR_MYMACHINE帐号会见。当某个ASP.NET页面(比方"/default.aspx")的哀求经由过程认证以后,就会根据该文件(比方"c:inetpubwwwrootdefault.aspx")的ACL举行反省,看IUSR_MYMACHINE帐号是不是有权限读取这个文件。假如有权限,就对会见举行受权。假如Web内容位于NTFS卷中,而且已设置了假造目次利用Windows认证,文件的受权就会主动地实行。
关于URL受权来讲,会根据ASP.NET使用程序的设置数据来举行反省。假如同意会见被哀求的URL,哀求就取得受权了。在例子中,ASP.NET反省匿名用户是不是有会见/Default.aspx的权限(也就是说,反省历程是根据URL自己的,没有根据URL终极剖析成的文件)。
这类不同看起来很渺小,可是它让使用程序可以利用相似基于窗体的认证或Passport认证,在这些认证形式顶用户不必要与盘算机或域帐号绝对应。它还同意你举行假造资本的受权(在资本下方并没有物理文件)。比方,使用程序能够把一切对.stk文件的哀求映照给一个处置程序,它依据查询字符串中的变量来举行证券报价。在这类情形下,没有物理的.stk文件可供ACL反省,因而利用URL受权来把持假造资本的会见权。
文件受权一般依附IIS供应的经由过程认证的帐号来实行。假如同意匿名会见,它就是设置的匿名帐号。不然,就是NT帐号。它的事情体例跟ASP是一样的。
在资本办理器属性页面的"平安"选项卡中能够设置文件或目次的ACL(会见把持列表)。URL受权被设置为ASP.NET框架组件使用程序的一部分,在"受权用户和脚色"部分有完全的解说。
为了激活ASP.NET的认证服务,你必需在使用程序的设置文件中设置<authentication>元素。这个元素能够包括下表枚举的任何值。
值形貌None没有激活的ASP.NET认证服务。请注重IIS认证服务仍旧存在。WindowsASP.NET认证服务给以后哀求附加上WindowsPrincipal(System.Security.Principal.WindowsPrincipal),以包管依据NT用户或组举行受权。FormsASP.NET认证服务办理cookie并把未认证的用户重定向到登录页面。它一般在IIS同意匿名会见使用程序的时分利用。PassportASP.NET认证服务供应了PassportSDK(你必需安装)的一个便利的包装。
比方,上面的设置文件同意使用程序利用基于窗体(cookie)的认证:
<configuration>
<system.web>
<authenticationmode="Forms"/>
</system.web>
</configuration>
<P> 利用登录控件
上面的例子演示了在使用程序中怎样利用登录控件。
创立和登任命户
在例子中我们会看到站点的主页,它包括了一个LoginStatus控件,该控件提醒用户登录站点。这个页面上的LoginStatus控件反省用户以后是不是经由过程了认证,并向用户显现一个登录链接。用户点击这个链接就能够看到默许的login.aspx页面,在web.config中已把这个页面设置为窗体认证。Login控件显现在Login.aspx页面上(请注重,在默许的登录页面上登录控件的VisibleWhenLoggedIn属性会被疏忽)。在例子中,登录控件设置了分外的属性,显现了"创立用户"链接,点击这个链接会会见别的一个页面,谁人页面利用了CreateUserWizard控件。在默许情形下,CreateUserWizard控件包括两个步骤,在第一步顶用户输出需要的信息,当他们点击"创立用户"按钮的时分,控件把这些信息传送给成员API。假如成员API不克不及创建该用户,在控件中会显现得当的毛病信息;假如用户创立乐成,控件就载进导游的第二步。在例子中,ContinueDestinationPageUrl属性被设置为在用户创立乐成以后前往主页。在默许情形下,当用户被乐成创立以后,CreateUserWizard会认证并登任命户。当用户前往到主页的时分,他们会注重到LoginStatus被删除,他们已经由过程了认证,并显现了一个登出链接。点击登录链接会引发用户认证单子(ticket)被扫除,并显现登录链接。这时候用户能够点击登录链接,因为他们已创立了用户帐号,以是能够在login.aspx上输出用户名和暗码来登录网站。你大概注重到Login控件显现了一个"记着帐号(rememberme)"反省框。选中这个框并乐成登录以后,会向用户的盘算机上写进一个cookie,该cookie默许的存续期是50年。你能够经由过程把Login控件的DisplayRememberMe和RememberMeSet属性设置为false来禁用这个选项。检察示例的代码,你能够发明这项事件并没有任何代码,只设置了少量的几个属性。这些控件的款式属性都是站点使用的款式表设置的。
Login.aspx
<%@PageLanguage="VB"MasterPageFile="~/Site.master"%>
<asp:ContentID="Content1"ContentPlaceHolderId="MainBody"runat="server">
<asp:loginID="Login1"runat="server"createuserurl="CreateUser.aspx"createusertext="CreateaNewAccount"/>
</asp:Content>
CreateUser.aspx
<%@PageLanguage="VB"MasterPageFile="~/Site.master"%>
<asp:ContentID="Content1"ContentPlaceHolderId="MainBody"runat="server">
<asp:CreateUserWizardID="CreateUserWizard1"runat="server"continuedestinationpageurl="Home.aspx"/><br/>
<ahref="Home.aspx">ReturntoDefaultHomePage</a><br/>
<ahref="HomeLoginView.aspx">ReturntoLoginViewHomePage</a><br/>
<ahref="HomeChangePassword.aspx">ReturntoChangePasswordHomePage</a><br/>
</asp:Content>
向认证用户显现分歧的内容
上面的例子演示了利用LoginView控件为认证过的用户和匿名用户显现分歧的内容。只管例子中没有显现甚么,可是LoginView控件撑持基于用户脚色来显现分歧内容。LoginView控件中的AnonymousTemplate模板包括了一个登录控件,LoggedInTemplate模板包括了LoginName控件。LoginName控件使用格局化字符串属性来显现接待和用户姓名。请利用上一个例子中创立的帐号或从头创立一个帐号来登录站点,并点击页面上方的登出链接。
<%@PageLanguage="VB"MasterPageFile="~/Site.master"%>
<asp:ContentID="Content1"ContentPlaceHolderId="MainBody"runat="server">
<asp:loginviewID="LoginView1"runat="server">
<loggedintemplate>
<h1>
<asp:loginnameid="LoginName1"runat="server"formatstring="Welcome{0}"/>
</h1>
</loggedintemplate>
<anonymoustemplate>
<h1>WelcometoLoginControls</h1>
<asp:loginID="Login1"runat="server"createuserurl="CreateUser.aspx"createusertext="CreateaNewAccount"/>
</anonymoustemplate>
</asp:LoginView>
</asp:Content>
修正暗码
在默许情形下,ChangePassword控件请求用户经由过程了站点的认证才干变动他们的暗码。可是,鄙人面的例子中,我们把DisplayUserName属性设置为真,其了局是用户在改动本人的暗码之前,能够由ChangePassword控件举行认证,大概经由过程站点认证的用户输出分歧的帐号来改动暗码。例子还链接到了创立用户页面,使你可以创立无效的用户并测试示例。
<%@PageLanguage="VB"MasterPageFile="~/Site.master"%>
<asp:ContentID="Content1"ContentPlaceHolderId="MainBody"runat="server">
<asp:ChangePasswordID="ChangePassword1"runat="server"createuserurl="CreateUser.aspx"createusertext="CreateaNewAccount"canceldestinationpageurl="HomeChangePassword.aspx"displayusername="true"continuedestinationpageurl="HomeChangePassword.aspx"/>
</asp:Content>
利用成员和脚色办理器API
成员
成员特征是环绕两个中心类构建的:Membership和MembershipUser。Membership类供应创立用户(MembershipUser类处置)的办法,和通用的办理用户的办法。用Membership类创建的用户是经由过程ASP.NET使用程序认证的身份。
Membership类实行的通用事件包含:
・创立新的MembershipUser
・当用户试图登录的时分考证用户名-暗码组合。接上去你可使用窗体认证来天生一个cookie,标明用户登录了站点。
・检索MembershipUser实例
・更新MembershipUser实例
・依据分歧的前提搜刮用户
・猎取以后在线的经由过程认证的用户
・在不必要用户的时分从体系中删除它
一旦你猎取了MembershipUser实例,就能够间接利用MembershipUser类实行上面的事件:
・会见使用程序中的MembershipUser类的属性
・检索用户的暗码(只要把成员特征设置为同意暗码检索才可使用)
・改动或重置用户的暗码
・改动用户的暗码发问和谜底(假如成员特征被设置为在检索或更新暗码之前,提醒用户暗码成绩和谜底)
・解锁那些由于暗码毛病或暗码谜底毛病而被锁定的用户
脚色办理器
脚色办理器的中心类是Roles类。Roles为创立脚色和把用户指定给脚色供应办法。它也供应了用于办理脚色信息的办法。
利用Roles类能够实行的通用事件包含:
・创立新脚色
・删除已有的脚色
・把用户指定给脚色
・从脚色中删除用户
・检测某个用户是不是取得了特定脚色的受权
・搜刮特定脚色中的用户,检索脚色中的一切用户
・猎取特定用户的脚色信息
脚色办理器特征也包括了HttpModule。这个模块卖力检索用户分派的脚色并把这些信息存储在RolePrincipal内,而它存在于页面的HttpContext中。HttpContext中存在RolePrincipal使你可以使用<authorization>元从来回护页面和目次。根据RolePrincipal中存储的脚色信息,用户只能取得站点内特定页面和目次的会见权。
<P> 示例
上面的例子演示了在使用程序中怎样利用成员API。
创立新用户
上面的例子演示了怎样创建新的MembershipUser。示例利用了Membership.CreateUser重载,它前往一个形态参数。别的的重载也能够利用,他们会抛出非常而不是前往形态代码。请注重,在默许情形下,成员特征请求暗码最少有7个字符长度,而且暗码最少包括一个非数字字符。
<scriptrunat="server">
SubbtnCreate_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
DimuserNameAsString=txtUserId.Text
这个值式加密的或散列过,不会显现
DimpasswordAsString=txtPassword.Text
DimemailAsString=txtEmail.Text
DimpasswordQuestionAsString=ddlPasswordQuestion.SelectedValue
这个值式加密的或散列过,不会显现
DimpasswordAnswerAsString=txtPasswordAnswer.Text
DimresultAsMembershipCreateStatus
Membership.CreateUser(userName,password,email,passwordQuestion,passwordAnswer,True,result)
lblResults.Visible=True
SelectCaseresult
CaseMembershipCreateStatus.Success
txtUserId.Text=Nothing
txtPassword.Text=Nothing
txtEmail.Text=Nothing
ddlPasswordQuestion.SelectedIndex=-1
txtPasswordAnswer.Text=Nothing
lblResults.Text="Usersuccessfullycreated!"
CaseMembershipCreateStatus.InvalidUserName
lblResults.Text="Theusernameformatwasinvalid.Pleaseenteradifferentusername."
CaseMembershipCreateStatus.InvalidPassword
lblResults.Text="Thepasswordwasinvalid:Apasswordcannotbeanemptystringandmustalsomeetthepaswordstrengthrequirementsoftheconfiguredprovider.Pleaseenteranewpassword."
CaseMembershipCreateStatus.InvalidEmail
lblResults.Text="Theemailformatwasinvalid.Pleaseenteradifferentusername."
CaseMembershipCreateStatus.InvalidQuestion
lblResults.Text="Thepasswordquestionformatwasinvalid.Pleaseenteradifferentquestion."
CaseMembershipCreateStatus.InvalidAnswer
lblResults.Text="Thepasswordanswerformatwasinvalid.Pleaseenteradifferentanswer."
CaseMembershipCreateStatus.DuplicateUsername
lblResults.Text="Theusernameisalreadyinuse.Pleaseenteranewusername."
CaseMembershipCreateStatus.DuplicateEmail
lblResults.Text="Theemailaddressisalreadyinuse.Pleaseenteradifferentemailaddress."
CaseElse
lblResults.Text="Anerroroccurredwhilecreatingtheuser."
EndSelect
EndSub
</script>
用户登录和会见用户属性
上面的例子演示了用户利用Membership.ValidateUser办法登录。它还演示了在登任命户的时分怎样同时利用窗体认证和成员特征。在下面的例子中创立用户以后,请在登录页面上输出凭据。一旦你登录了,你会被重定向到一个页面,该页面使用Membership.GetUser来检索与登任命户绝对应的MembershipUser实例。同时请注重,这个页面还显现了目次上设置的用户属性,这些内容只要经由过程认证的用户才干会见。点击页面底部的登出链接能够加入站点。
<scriptrunat="server">
ProtectedmemUserAsMembershipUser
SubPage_Load(ByValsenderAsObject,ByValeAsSystem.EventArgs)
memUser=Membership.GetUser()
EndSub
SublinkLogout_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
FormsAuthentication.SignOut()
Roles.DeleteCookie()
FormsAuthentication.RedirectToLoginPage()
EndSub
</script>
UserName/ID:<%=Server.HtmlEncode(memUser.Username)%>
Email:<%=Server.HtmlEncode(memUser.Email)%>
更新用户属性
请用后面创建的用户凭据登录。页面会用ASP.NET2.0中新的DetailsView控件显现用户属性。DetailsView控件与一个数据源控件通信。在例子中,ObjectDataSource控件检索MembershipUser实例的内容。你能够点击页面底部的"编纂"链接使DetailsView进进编纂形式。MembershipUser的电子邮件和正文都能够修正。点击"更新"链接能够把新值保留到数据库。请注重,在代码中页面完成了ItemUpdating事务,该事务是由ObjectDataSource激发的。如许做是需要的,MembershipUser类没有参数化机关函数,它请求利用ObjectDataSource的双向数据绑定。点击登出链接能够加入。
SubDetailsView1_ItemUpdating(ByValsenderAsObject,ByValeasDetailsViewUpdateEventArgs)
必需手动处置更新操纵,由于MembershipUser没有参数化的机关函数
DimmemUserasMembershipUser=Membership.GetUser()
memUser.Email=CStr(e.NewValues(0))
memUser.Comment=CStr(e.NewValues(1))
Try
Membership.UpdateUser(memUser)
e.Cancel=true
DetailsView1.ChangeMode(DetailsViewMode.ReadOnly)
CatchexasException
Response.Write("<div>Thefollowingerroroccurred:<fontcolor=red>"+ex.Message+"</font></div>")
e.Cancel=true
EndTry
EndSub
<P> 帐号锁定
Membership特征主动地跟踪用户重试暗码的次数。在检索暗码或重置暗码的时分,它也跟踪暗码重试的次数。上面的例子演示了主动的帐号锁定才能,和怎样作废帐号锁定。起首利用后面的"创建新用户"示例创立一个新帐号。接着,点击下方的按钮运转"帐号登出"示例。登录页面显现了显现了为了锁定帐号必要重试的失利次数。在登录页面上,利用你创建的第一个帐号并输出毛病的暗码。请注重,在重试的失利次数到了以后,假如你利用了准确的暗码,也不克不及登录了--这是由于在重试失利的次数到了必定的数目以后,Membership特征主动地锁定的帐号。为懂得除该帐号的锁定,请利用你创建的第二个帐号登录。显现的页面与后面的显现用户属性的例子很类似。可是,这个页面同意你在页面底部输出恣意的用户称号。请输出被锁定的帐号并回车。DetailsView控件会革新并显现该用户的信息。请注重,标识锁定形态的反省框IsLockedOut是选中的。LastLockoutDate也被更新了,它显现了用户被锁定的日期。点击页面底部的"解锁"按钮来排除以后显现的用户的锁。它挪用了MembershipUser实例的UnlockUser办法,排除了用户的锁。在排除用户的锁以后,IsLockedOut反省框被扫除了,LastLockoutDate属性也被重置了。点击页面底部的登出链接。如今实验用第一个帐号登录。如今能够再次乐成登录了。
SubbtnUnlockUser_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
DimmemUserasMembershipUser=Membership.GetUser(txtUserName.Text)
If(NotmemUserisNothingAndmemUser.IsLockedOut=true)
memUser.UnlockUser()
EndIf
革新被选顶用户的信息
DetailsView1.DataBind()
EndSub
删除用户
你可使用Membership.DeleteUser办法删除用户。上面的例子演示了怎样利用窗体认证删除以后登录的用户并让该用户登出。
<scriptrunat="server">
SubbtnDeleteCurrentUser_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
If(Membership.DeleteUser(User.Identity.Name))Then
FormsAuthentication.SignOut()
Roles.DeleteCookie()
Response.Redirect("~/CreatingUsers.aspx")
Else
lblResult.Visible=True
lblResult.Text="TheMembershipuserwasnotdeleted."
EndIf
EndSub
</script>
<P> 办理脚色
上面的例子演示了认证用户怎样利用脚色办理器特征。一切的示例页面都回绝匿名用户会见。在默许情形下,ASP.NET中是没有激活脚色办理器特征的。可是,上面的例子中利用的web.config显式地激活了脚色办理器特征。
增加和删除脚色
上面的例子演示了怎样利用Roles.CreateRole和Roles.DeleteRole办法创建和删除脚色。在你创建脚色或删除已有脚色以后,页面利用Roles.GetAllRoles办法显现体系中的一切可用脚色。Roles.GetAllRoles的前往值能够容易地绑定就任何撑持数据绑定的控件。你最少必要创建一个叫做"Administrators"的脚色。
在你创建和删除脚色的时分,请注重脚色办理器特征不同意你创建反复的脚色。同时还要注重,在默许情形下,脚色办理器不同意你删除添补过的脚色。
SubbtnCreateRole_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
DimroleNameAsString=txtCreateRole.Text
Try
Roles.CreateRole(roleName)
lblResults.Text=Nothing
lblResults.Visible=False
txtCreateRole.Text=Nothing
CatchexAsException
lblResults.Text="Couldnotcreatetherole:"+Server.HtmlEncode(ex.Message)
lblResults.Visible=True
EndTry
EndSub
SubbtnDeleteRole_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
If(lbxAvailableRoles.SelectedIndex<>-1)Then
Try
Roles.DeleteRole(lbxAvailableRoles.SelectedValue)
lblResults.Text=Nothing
lblResults.Visible=False
CatchexAsException
lblResults.Text="Couldnotdeletetherole:"+Server.HtmlEncode(ex.Message)
lblResults.Visible=True
EndTry
EndIf
EndSub
向脚色中增加用户和从脚色中删除用户
上面的例子利用了后面例子中创建的脚色,它演示了怎样向脚色增加用户和从脚色中删除用户。利用Roles.AddUserToRole办法向脚色中增加用户,利用Roles.RemoveUserFromRole办法从脚色中删除用户。在给脚色增加用户之前,先反省该用户是不是已是该脚色的成员。这类反省是需要的,由于假如你试图给脚色屡次增加统一个用户,脚色办理器会抛出非常。在后面的例子中,脚色信息和脚色的成员都显现在数据绑定控件中。用户所属的脚色列表经由过程Roles.GetRolesForUser办法猎取。要运转上面的例子,就要确保把你本人到场"Administrators"脚色。
SubbtnAddUserToRole_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
If(lbxAvailableRoles.SelectedIndex<>-1)Then
DimselectedRoleAsString=lbxAvailableRoles.SelectedValue
IfNotRoles.IsUserInRole(selectedRole)Then
Try
Roles.AddUserToRole(User.Identity.Name,selectedRole)
RefreshCurrentRolesListBox()
CatchexAsException
lblResults.Text="Couldnotaddtheusertotherole:"+Server.HtmlEncode(ex.Message)
lblResults.Visible=True
EndTry
Else
lbxAvailableRoles.SelectedIndex=-1
EndIf
EndIf
EndSub
SubbtnDeleteUserFromRole_Click(ByValsenderAsObject,ByValeAsSystem.EventArgs)
DimselectedRoleAsString=lbxUserRoles.SelectedValue
If(lbxUserRoles.SelectedIndex<>-1)Then
Try
Roles.RemoveUserFromRole(User.Identity.Name,selectedRole)
RefreshCurrentRolesListBox()
CatchexAsException
lblResults.Text="Couldnotremovetheuserfromtherole:"+Server.HtmlEncode(ex.Message)
lblResults.Visible=True
EndTry
EndIf
EndSub
<P> 用脚色办理器对页面举行受权会见
这个例子的web.config文件包括了<authorization>元素,它限定了示例只能让"Administrators"脚色的成员会见。请确保你已创建了"Administrators"脚色并把本人增加到了这个脚色中。一旦你称为"Administrators"脚色的成员,就能够会见示例页面了。ASP.NET供应了一个脚色办理器HttpModule,它主动地把RolePrincipal附加到以后哀求的HttpContext上。假如你是"Administrators"脚色的成员,当URL受权历程依据RolePrincipal实行IsInRole反省(URL受权历程挪用RolePrincipal.IsInRole)的时分,该会见反省会前往true,你就能够会见页面了。请注重,你能够经由过程挪用Page.User并把了局转换RolePrincipal来援用页面中的RolePrincipal。
<locationpath="administrators_role">
<system.web>
<authorization>
<allowroles="Administrators"/>
<denyusers="*"/>
</authorization>
</system.web>
</location>
编程反省受权
因为脚色办理器特征把RolePrincipal附加到HttpContext上,你也能够编写代码依据RolePrincipal实行会见反省。你先创建两个脚色"RegularUsers"和"PowerUsers",把本人增加到这两个脚色中。当你运转示例的时分,页面利用多种手艺实行IsInRole反省。有些会见反省利用了User.IsInRole。它申明了利用一般的Page.User语法的时分,RolePrincipal也是可用的。这个页面还演示了怎样把Page.User转换为RolePrincipal援用,接着间接在RolePrincipal上挪用IsInRole。
<asp:LabelID="Label1"runat="server"Text=<%#User.IsInRole("Administrators")%>/>
<asp:LabelID="Label2"runat="server"Text=<%#Roles.IsUserInRole("RegularUsers")%>/>
<asp:LabelID="Label3"runat="server"Text=<%#(CType(User,RolePrincipal)).IsInRole("PowerUsers")%>/>
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。 ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境! 最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
页:
[1]