主要思想: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>
<allow roles="Admin"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
<!--设置Users目录的访问权限-->
<location path="Users">
<system.web>
<authorization>
<allow roles="User"/>
<deny users="?"/>
</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
{
ClientScriptManager csm = this.Page.ClientScript;
csm.RegisterStartupScript(this.GetType(), "error_tip", "alert('用户名或密码错误!身份验证失败!');", true);
}
}
//验证用户
private UserModel ValidUser(string name, string password)
{
return new UserService().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页面。
注意:测试时注意及时点击安全退出按钮,否则影响测试结果。
相关推荐:
用AI写文章,释放你的创作潜力!
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
怎么降低文章的AI生成率:打造更真实、更有价值的内容
ChatGPT桌面应用安装了,不能用?解决方案全攻略,让你轻松畅享AI助手!,绫波丽ai智能
OpenAI银行卡扣款的公司是哪家?揭秘背后的支付流程与安全保障,AI素描相片
ChatGPT全球宕机:人工智能的崩塌与未来的挑战,中国ai和美国ai教父
SEO那么重要,企业如何通过它脱颖而出?,自媒体推广营销的概念
OpenAIGPTChatSoraOpenAIChatGPT服务在中断数小时后已恢复,ai视图线稿
OpenAI账号申诉怎么办?全方位解析解决方案,ai写作免费公众号下载
SEO短视:为何眼前的成效不能成为长久的策略?,网站上线seo优化
SEO范例:如何通过优化提升网站流量,获取更多商机,广州抖音seo搜索广告
ChatGPT:引领人工智能对话新时代的智能助手,Ai shiang
SEO抢权:如何在竞争激烈的市场中占得先机,正规网站建设口碑好
“洗稿技巧如何让你的文章脱颖而出,轻松提升内容创作水平!”,台州椒江seo企业排名
用AI写文章查重率高吗?揭秘AI写作与查重检测的关系
seo配置是什么,seo设置是什么 ,ai图标制作教程
ChatGPT:打破语言障碍,理解与沟通的新时代,交通轨道ai
seo要寻找什么资源,怎么找seo ,ai插画描边
未来智能:AI智能人工软件引领数字化变革
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
SEO引擎优化方法-让你的网站流量暴增的实战指南,ai智慧树
seo稿件是什么意思,seo文章写作要求 ,ai写作未来展望和展望
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
SEO领站-从零到一打造成功网站排名的秘密,轻淘客seo怎设置
seo需要保持什么心态,seo的要求 ,ai83562
SEO怎么优化比较好?全面提升网站排名的实用技巧,高级ai玩家
什么叫改写-解读“改写”背后的艺术与技巧,网站制作建设模板图片
seo菲律宾是做什么,菲律宾网址排名 ,openl ai
seo用什么法宝,列出5种seo赚钱方式 ,ai怎么更改文档样式
SEO未来:如何在变革中抢占先机,迎接数字营销的新纪元,台州网站建设分析和总结
什么是SEO金融,seo是做什么的 ,ai中转程序
文章疑似AI生成怎么办?如何辨别并应对AI生成文章的挑战
软件我在AI:改变未来的智能助手
SEO妍:搜索引擎优化的艺术,轻松打造网络营销新未来,辽宁网站建设贵不贵
SEO在广告领域的深度解析:如何利用SEO提升广告效果,网文写作ai工具
SEO汇报:如何通过数据分析提升网站排名,助力企业业绩增长,免费推广网站大全百度经验
SEO优化的利器:提升网站排名的秘密武器,联想ai7g-3笔记本
ChatGPT无服务:如何突破限制,未来人工智能的新可能,ai绘制装饰画
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
智能AI生成文章释放创作新可能
为什么要做seo si,为什么要做* ,ai里面怎么扣二维码
ChatGPT+维护页面:您的智能助手之旅,安全、高效、无忧,奥特曼画图ai
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
SEO工装裤-打造时尚与实用兼备的工作利器,ai画中国爸爸辅导孩子写作业
SEO需要:如何提升网站排名,打造高效营销利器,seo怎么推广关键词
未来写作新方式原创AI文章的无限可能
什么是seo公司口碑,seo品牌 ,ai大模型训练是什么意思
ChatGPT显示“此网站无法加载站点”:背后原因与解决办法详解,用ai画明度渐变条
OpenArtAI如何进入:数字艺术的未来之门,分析海报ai
OpenAI无法验证支付方式?解决方案与常见问题解析,你好月光ai