【问题标题】:Location access in ASP.NETASP.NET 中的位置访问
【发布时间】:2011-04-03 21:31:02
【问题描述】:

我的站点有管理区域:http://www.mysite.com/webadmin,我想通过角色来保护它(我正在使用 ASP.NET 表单身份验证),这样只有具有“管理员”角色的用户才能访问它。 在 web.config 我添加了这个条目:

<location path="WebAdmin">
    <system.web>
        <authorization>
            <deny users="*"/>
            <allow roles="admin"/>
        </authorization>
    </system.web>
</location>

并且它“有点”工作 - 如果您不是“管理员”角色,它会将您重定向到登录页面。但我不希望这样,我想显示一个错误页面。有什么办法可以控制这种行为?

谢谢你, 安德烈

【问题讨论】:

    标签: asp.net web-config forms-authentication role


    【解决方案1】:

    您可以通过 web.config 更改您的文件 认为 是登录页面的 URL。 (见http://www.15seconds.com/issue/020220.htm。)

    考虑用您的自定义错误页面 URL 替换配置中的真实登录 URL。

    编辑:

    如果在整个虚拟目录中将此作为通用解决方案实施,则 web.config 方法是可行的。 (尝试在 web.config 中的 &lt;location&gt; 元素下配置自定义 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 路径,如果它与您的模式匹配,则传递您想要传递的错误或重定向。

    【讨论】:

    • 我的应用到处都在使用表单身份验证进行身份验证/授权,因此它需要知道真实登录页面的 url,所以我无法在 web.config 中更改登录页面 url。 ..除非我误解了你的意思...
    • @Andrey:用户未通过身份验证时的重定向行为是从此 web.config 值驱动的。您仍然可以在您的页面上放置指向真实登录页面的超链接;这种方法只会欺骗重定向引擎将用户发送到您的错误页面。
    • @Andrey:这不是一个坏方法,尽管投了反对票。我以前用过,效果很好。
    • 好的,也许我误解了你的建议 - 你是说我应该将 web.config 中的 loginURL 参数更改为我的错误页面?那么当他们试图访问需要身份验证的页面时,如何将未经身份验证的用户重定向到真实的登录页面?能举个例子吗?
    • 可能是我误会了。我曾以为您希望将错误页面作为处理用户访问需要身份验证的页面的通用解决方案。您只想在描述的位置对经过身份验证的页面有错误行为吗?
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2012-10-03
    • 2015-05-26
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多