我有一个自定义授权属性,到目前为止看起来像这样: (我稍后会添加更多逻辑。我只想先看看这个工作。)
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
}
然后我将我的属性放到控制器上:
[CustomAuthorize(Order = 0)]
public class MyController : Controller
现在,
这一切都运作良好&花花公子,直到我的表单身份验证用完为止。
I.E
<forms loginUrl="~/myController/myMethod" timeout="30" /> // this timout expires.
超时后,我的自定义授权属性不再被命中,相反,表单auth模块似乎接管了。
超时后,表单auth模块只返回由上面webconfig代码中指定的操作呈现的视图。
我想在超时到期时拦截onAuthorize操作,因此我可以查询HttpContext以查找某些内容,并有条件地重定向用户。
有没有人做过类似的事情?
答案 0 :(得分:1)
实际上是默认行为
如果您在未对用户进行身份验证时处理了什么情况,则覆盖:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
//your logic
//...
//...
base.HandleUnauthorizedRequest(filterContext);
}
或者您可以从ActionFilterAttribute继承并检查自定义操作过滤器中是否对用户进行了身份验证。这将允许您绕过您遇到的Forms身份验证问题。
有些事情是这样的:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
//code that handles unauthorized ajax request
}
else
{
//code that handles http request
}
}
//you custom authorization logic
}
}
答案 1 :(得分:0)
您可以将代码插入HttpApplication.AcquireRequestState以监视身份验证是否有效并在该点重定向。请查看MSDN以获取有关该活动的更多信息。