我有我的网站的管理区域:http://www.mysite.com/webadmin我希望通过角色保护它(我使用的是ASP.NET表单身份验证),这样只有角色为“admin”的用户才能访问它。 在web.config中我添加了这个条目:
<location path="WebAdmin">
<system.web>
<authorization>
<deny users="*"/>
<allow roles="admin"/>
</authorization>
</system.web>
</location>
并且它“有点”工作 - 如果你不是“admin”角色,它会将你重定向到登录页面。但我不希望这样,我想显示一个错误页面。我能以任何方式控制这种行为吗?
谢谢你, 安德烈
答案 0 :(得分:1)
您可以通过web.config更改文件认为是登录页面的URL。 (见http://www.15seconds.com/issue/020220.htm。)
考虑将自定义错误页面网址替换为配置中的真实登录网址。
修改强>
如果将整个虚拟目录作为一般解决方案实现,那么web.config方法是可行的。 (尝试在web.config中的<location>
元素下配置自定义loginUrl将导致配置错误。)
通过在管理页面(或管理页面的基类)中注入此类代码,您可以对此行为进行更细粒度的控制:
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
if (!User.IsInRole("admin"))
{
Response.Redirect("~/ErrorPage.aspx?reason=denied");
}
}
您还可以考虑创建HttpModule
或者使用Global.asax,以更一般的方式处理授权,而不依赖于页面继承。见http://msdn.microsoft.com/en-us/library/ms227673.aspx。使用BeginRequest
事件检查URL路径,如果它与您的模式匹配,则传递您要传递的错误或重定向。