我们在我们的网站(.net4,IIS7.5,VS2010)中实现了一个自定义的ASP.NET角色提供程序,这些都是很不错的东西。我的问题是,当用户被拒绝访问页面时,如何处理或拦截角色提供程序重定向?
让我说清楚。角色提供程序工作正常。我们在网站的各个子目录中创建了web.config文件,这些文件添加了适当的元素/属性以供访问。因此,假设我试图访问子目录中没有角色的页面...现在,角色提供程序将我重定向到我们的登录页面(可能也是我们的成员提供程序的web.config值)。
然而,我想要做的是将用户重定向到我们选择的自定义“拒绝访问”页面,而不是登录页面。
基于许多谷歌搜索,我尝试了一些根本不起作用的东西。
例如,有人建议在global.asax文件中添加自定义Application_Error方法。试过了,它从来没有被击中过。
我还尝试添加到web.config中的customErrors部分:
<error statusCode="401" redirect="AccessDenied.aspx" /> 再说一次,这从来没有起过作用。
正如我放入的许多调试断点一样,我所能断定的是,角色提供程序在生命周期中比我能捕捉到的要早得多,并且会自动重定向到我们的登录页面。
任何关于如何拦截这一点的想法都将不胜感激。
谢谢。
发布于 2012-01-05 05:19:34
当用户由于数据库中的某些内容而没有访问权限时,它将重定向到forms配置元素中指定的loginUrl,如下所示:
<forms loginUrl="login.aspx" />我唯一想到的是,如果您在登录页面,this.User.Identity.IsAuthenticated属性为真,则用户访问该页面是因为他们因这些问题之一而被重定向。这样您就可以重定向到AccessDenied.aspx页面。如果一个经过身份验证的用户被重定向到只为拒绝而登录,这将会起作用。否则,如果你需要将它们发送到不同的地方,我唯一能想到的就是在global.asax中丢弃内置的重定向功能,添加Application_AcquireRequestState处理程序或在其他地方(取决于你是否需要访问session ),检查用户的权限,并相应地(通过HttpContext.Current.Response.Redirect)重定向它们。
https://stackoverflow.com/questions/8733970
复制相似问题