• 【C#.NET】保护你的ASP.NET应用程序(三)安全性相关的控件


    15.6  安全性相关的控件

    15.6.1  ASP.NET登录控件概述

    使用ASP.NET 2.0提供的这些控件,我们只需要进行简单的设置而无需写一行代码就能提供“注册”、“登录”、“修改密码”和“取回密码”等与账户密切相关的一些操作。

    如图15-26所示,可以看到IDE工具箱中的一套登录控件。

    图15-26  ASP.NET登录控件

    15.6.2  登录控件

    首先添加一个Login.aspx,在页面上放入一个Login控件,然后使用属性窗口对控件进行配置。

    <asp:Login ID="Login1" runat="server" CreateUserText="没有注册?"

    CreateUserUrl="Register.aspx" PasswordRecoveryText="忘记密码?"

    PasswordRecoveryUrl="PasswordRecovery.aspx"/>

    CreateUserText属性表示创建用户链接的字符串,CreateUserUrl属性表示创建用户的链接地址,PasswordRecoveryText属性表示取回密码链接的字符串,PasswordRecoveryUrl表示取回密码的链接地址。

    然后浏览Login.aspx,界面如图15-27所示。

    文本框:  
图15-27  Login控件

15.6.3  创建用户向导控件

    在创建登录页面的时候,我们配置了注册链接的地址为Register.aspx,因此需要创建一个Register.aspx页面用于注册操作。在页面上放置一个CreateUserWizard控件。

    <asp:CreateUserWizard ID="CreateUserWizard1" runat="server"

    ContinueDestinationPageUrl="Default.aspx" />

    在这里,ContinueDestinationPageUrl属性表示注册完成后转向的页面地址。之后,我们会创建Default.aspx来显示登录名和登录状态等信息。

    浏览Default.aspx效果,如图15-28所示。

    文本框:  
 
图15-28  CreateUserWizard控件

注意以下几点。

    1.在注册后,系统会自动为用户登录。

    2.默认情况下密码需要有一定的强度(最短长度为7位,且必须包含1个非字母数字字符),我们可以通过修改Web.config文件来改变这个设定,比如下面的配置段为成员资格指定了一个MyAspNetSqlProvider的Provider,并设定密码最短长度为6位,不需要包含任何非字母数字字符(<system.web>节点下)。

    <membership defaultProvider="MyAspNetSqlProvider">

      <providers>

        <add name="MyAspNetSqlProvider" type="System.Web.Security.

        SqlMembershipProvider" connectionStringName="LocalSqlServer"

        minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0"

        applicationName="/"/>

      </providers>

    </membership>

    当然,也别忘记指定用于成员资格服务的数据库连接字符串(<configuration>节点下)。

    <connectionStrings>

      <add name="LocalSqlServer" connectionString="data source=."SQLEXPRESS;Integrated

      Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"

      providerName="System.Data.SqlClient" />

    </connectionStrings>

    注意:其他有关成员资格的配置请回顾15.5.1节。

    15.6.4  密码恢复控件

    按照Login控件的PasswordRecoveryUrl属性,新建一个用于密码恢复(取回密码)操作的页面PasswordRecovery.aspx。在页面上放入一个PasswordRecovery控件。整个密码恢复的过程如下。

    1.输入用户名。

    2.输入该用户密码问题的答案。

    3.如果答案正确,那么系统会把新的密码发送到用户的邮箱中。

    因此,我们需要在Web.config文件的<configuration>节点下新增SMTP邮件服务器的配置。

    <system.net>

      <mailSettings>

       <smtp from="发件人的邮件地址">

        <network host="SMTP邮件服务器名" port="端口(默认25)" password="" userName="" />

       </smtp>

      </mailSettings>

     </system.net>

    浏览PasswordRecovery.aspx进行密码找回操作,然后你会收到如图15-29所示的一封邮件:

    文本框:  
图15-29  系统发送的密码恢复邮件

15.6.5  修改密码控件

    用户在登录后可能还会希望进行密码修改操作,现在就来创建一个ChangePassword.aspx页面,然后在页面上放入一个ChangePassword控件。

    <asp:ChangePassword ID="ChangePassword1" runat="server" ContinueDestinationPageUrl=

    "Default.aspx"/>

    在这里,我们设置ContinueDestinationPageUrl属性为Default.aspx,表示在修改密码后让系统转到Default.aspx。修改密码界面如图15-30所示。

    文本框:  
图15-30  ChangePassword控件

15.6.6  其他控件

    最后,来完成Default.aspx。除了注册、登录和密码操作外,很多时候我们还有一些其他需求,比如下面的操作。

    ·      为没有登录的用户提供登录操作,为已经登录的用户提供退出操作。

    ·      显示已经登录的用户名。

    ·      为已登录和未登录的用户显示不同的信息。

    要实现这三个要求同样不需要写任何代码,我们可以分别使用LoginStatus、LoginName和LoginView控件来完成。

    ·      LoginStatus控件会自动根据用户是否登录来显示登录“链接”或者退出“链接”。当然,你也可以把文字换成图片。

    ·      LoginName控件可以按照一定的格式来显示登录的用户名。

    ·      LoginView控件提供了LoggedInTemplate和AnonymousTemplate等模板,LoggedInTemplate模板中的内容会在登录后显示,而AnonymousTemplate模板中的内容会在未登录时显示。

    下面,就在页面上添加这三个控件,并做一定的设置。

    <asp:LoginStatus ID="LoginStatus1" runat="server" />

    <asp:LoginName ID="LoginName1" runat="server" FormatString="您好:{0}"/>

    <asp:LoginView ID="LoginView1" runat="server">

        <LoggedInTemplate>

            <a href="ChangePassword.aspx">修改密码</a>

        </LoggedInTemplate>

        <AnonymousTemplate>

            <a href="PasswordRecovery.aspx">恢复密码</a>

        </AnonymousTemplate>

    </asp:LoginView>

    页面效果如图15-31所示。

    登录前:

    登录后:

    图15-31  LoginStatus、LoginName和LoginView控件


  • 相关阅读:
    ByteBuffer的mark、position、limit、flip、reset,get方法介绍ok
    java.nio.ByteBuffer的flip、rewind和compact几个方法的区分使用
    maven之一:maven安装和eclipse集成
    Java 8 函数式接口
    Lambda 表达式
    jdk8十大新的特性
    阿里巴巴73款开源产品列表,值得收藏
    【Java】java.util.Objects 工具类方法研究
    ARIMA 模型简单介绍
    python 二维数组取值
  • 原文地址:https://www.cnblogs.com/cuishao1985/p/1574157.html
Copyright © 2020-2023  润新知