我正在使用ASP.NET,我希望能够将用户从web配置重定向到另一个页面。
我有许多限制,例如:
<location path="Structures.aspx">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*" />
</authorization>
</system.web>
</location>
如果我将用户重定向到某个页面,那就太棒了。 我看到了this post,但这不是我想要的。
我需要在web.config中执行此操作,而不是在代码后面执行。 谢谢!
答案 0 :(得分:5)
假设您要处理所有“未授权”错误:
<customErrors defaultRedirect="Error.aspx" mode="On">
<error statusCode="401" redirect="Unauthorized.aspx" />
<error statusCode="403" redirect="Forbidden.aspx" />
</customErrors>
任何401(未经授权的)请求都将转发到Unauthorized.aspx
。
或者,您需要在Page_Load
事件中执行检查。如果这看起来很乏味,你总是可以为所有应该只管理的页面创建一个基页类,并在那里执行检查。 e.g。
// base class
public class AdminOnlyPage : Page
{
/*...*/ Page_Load(Object sender, EventArgs e)
{
/* check if the user is admin otherwise reject and redirect */
}
}
// Your "Structures.aspx" page
public class Structures : AdminOnlyPage
{
}
答案 1 :(得分:1)
我注意到我的应用程序使用“302 Found”代码重定向回登录页面并设置了“Location”标头。由于我的登录页面恰好位于仅共享同一服务器的外部应用程序中,因此我无法对其进行修改。
相反,我将此添加到我的global.asax:
protected void Application_EndRequest(Object sender, EventArgs e)
{
if (Response.Status.StartsWith("302")
&&
Request.IsAuthenticated
&&
Response.RedirectLocation.StartsWith(System.Web.Security.FormsAuthentication.LoginUrl))
{
//log.Trace("Preventing redirection from app to login form since user is already logged in. It's authorization issue, not authentication.");
Response.Clear();
Response.Redirect("~/AccessDenied.aspx");
}
}