ASP.NET基于Forms身份权限验证

1、创建一个网站,结构如下:

网站根目录

Admin目录 ----> 管理员目录

Manager.aspx ----> 管理员可以访问的页面

Users目录 ----> 注册用户目录

Welcome.aspx ----> 注册用户可以访问的页面

Error目录 ----> 错误提示目录

AccessError.htm ----> 访问错误的提示页面

default.aspx ----> 网站默认页面

login.aspx ----> 网站登录页面

web.config ----> 网站配置文件

 

2、配置web.config如下:

<configuration>

<system.web>

<!--设置Forms身份验证-->

                 <authentication mode="Forms">

                    <forms loginUrl="Login.aspx"name="MyWebApp.APSXAUTH" path="/"protection="All" timeout="30"/>

                 </authentication>

                 <authorization>

                    <allow users="*"/>

                 </authorization>

</system.web>

</configuration>

<!--设置Admin目录的访问权限-->

<location path="Admin">

        <system.web>

               <authorization>

                        <allowroles="Admin"/>

                        <denyusers="?"/>

               </authorization>

        </system.web>

</location>

<!--设置Users目录的访问权限-->

<location path="Users">

        <system.web>

                <authorization>

                        <allowroles="User"/>

                        <denyusers="?"/>

               </authorization>

        </system.web>

</location>

 

3、在login.aspx页面的登录部分代码如下:

protected void btnLogin_Click(object sender, EventArgs e)

{

        //Forms身份验证初始化

       FormsAuthentication.Initialize();

        //验证用户输入并得到登录用户,txtName是用户名称,txtPassword是登录密码

        UserModel um =ValidUser(txtName.Text.Trim(),txtPassword.Text.Trim());

        if (um != null)

        {

                //创建身份验证票据

               FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,

                um.Name,

                DateTime.Now,

               DateTime.Now.AddMinutes(30),

                true,

                um.Roles,//用户所属的角色字符串

               FormsAuthentication.FormsCookiePath);

                //加密身份验证票据

                string hash =FormsAuthentication.Encrypt(ticket);

                //创建要发送到客户端的cookie

                HttpCookie  cookie  = 

New HttpCookie(FormsAuthentication.FormsCookieName, hash);

                if(ticket.IsPersistent)

                {

                       cookie.Expires = ticket.Expiration;

                }

                //把准备好的cookie加入到响应流中

                Response.Cookies.Add(cookie);

                //转发到请求的页面

               Response.Redirect(FormsAuthentication.GetRedirectUrl(um.Name,false));

        }

        else

        {

                ClientScriptManagercsm = this.Page.ClientScript;

                csm.RegisterStartupScript(this.GetType(),"error_tip", "alert('用户名或密码错误!身份验证失败!');", true);

        }

}

//验证用户

private UserModel ValidUser(string name, string password)

{

        return newUserService().Validate(name, password);

}

 

4、给网站添加处理程序Global.asax,其中通用身份验证代码如下:

 

//改造原来的User,给其添加一个用户所属的角色数据

protected void Application_AuthenticateRequest(object sender, EventArgs e)

{

        if (HttpContext.Current.User!= null )

        {

                if(HttpContext.Current.User.Identity.IsAuthenticated)

                {

                        if(HttpContext.Current.User.Identity is FormsIdentity)

                        {

                               FormsIdentity  id  =

(FormsIdentity)HttpContext.Current.User.Identity;

                                FormsAuthenticationTicket ticket =id.Ticket;

                               string userData = ticket.UserData;

                               string[] roles = userData.Split(',');

                                //重建HttpContext.Current.User,加入用户拥有的角色数组

                               HttpContext.Current.User = new GenericPrincipal(id, roles);

                        }

                }

        }

}

5、在Admin目录中Manager.aspx页面加载代码如下:

复制代码代码如下:

protected void Page_Load(object sender, EventArgs e)

{

        //判断通过身份验证的用户是否有权限访问本页面

        FormsIdentity id =(FormsIdentity)HttpContext.Current.User.Identity;

        //判断通过身份验证的用户是否是Admin角色

        if(!id.Ticket.UserData.Contains("Admin"))

        {

                //跳转到访问权限不够的错误提示页面

                Response.Redirect("~/Error/AccessError.htm",true);

        }

}

//安全退出按钮的代码

protected void btnExit_Click(object sender, EventArgs e)

{

        //注销票据

       FormsAuthentication.SignOut();

        ClientScriptManager csm =this.Page.ClientScript;

       csm.RegisterStartupScript(this.GetType(), "exit_tip","alert('您已经安全退出了!');", true);

 }

6、在Users目录中Welcome.aspx页面加载代码如下:

protected void Page_Load(object sender, EventArgs e)

{

        //判断通过身份验证的用户是否有权限访问本页面

        FormsIdentity id =(FormsIdentity)HttpContext.Current.User.Identity;

        //判断通过身份验证的用户是否是User角色

        if(!id.Ticket.UserData.Contains("User"))

        {

                //跳转到访问权限不够的错误提示页面

               Response.Redirect("~/Error/AccessError.htm", true);

        }

}

 

//安全退出按钮的代码

protected void btnExit_Click(object sender, EventArgs e)

{

        //注销票据

       FormsAuthentication.SignOut();

        ClientScriptManager csm =this.Page.ClientScript;

       csm.RegisterStartupScript(this.GetType(), "exit_tip","alert('您已经安全退出了!');", true);

}

测试结果:

数据:

假设有3个用户,如下:

------------------------------------------

用户名密码角色字符串

------------------------------------------

sa sa Admin,User

admin admin Admin

user user User

------------------------------------------

测试:

如果使用admin登录,只能访问Admin目录的Manager.aspx页面;

如果使用user登录,只能访问Users目录的Welcome.aspx页面;

使用sa登录,既能访问Admin目录的Manager.aspx页面,又能访问Users目录的Welcome.aspx页面。

注意:测试时注意及时点击安全退出按钮,否则影响测试结果。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值