我有自己的自定义身份验证过滤器,用于确定我们的单点登录解决方案为我们的所有应用程序提供的cookie值的用户角色。然后,我们创建特定于应用程序的cookie。我遇到的问题是,似乎在页面加载已经开始后调用了身份验证过滤器。
我已将下面的属性添加到我的Controller操作中。
[Authentication(AuthenticationHelper.ADMIN)]
这是我对ActionFilterAttribute
的实现[AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
public class AuthenticationAttribute : System.Web.Mvc.ActionFilterAttribute, System.Web.Mvc.IAuthorizationFilter
{
private readonly string _role;
private List<string> _roles = new List<string>();
public AuthenticationAttribute()
{
}
public AuthenticationAttribute(string role)
{
_roles.Add(role);
}
public void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext is null");
}
AuthenticationHelper user = new AuthenticationHelper(filterContext.HttpContext.Request);
var userRole = user.GetRole();
if (userRole == null || (userRole != null && !_roles.Contains(userRole)))
{
filterContext.Result = new RedirectResult("/Home/NotAuthorized");
}
}
public string Role
{
get { return _role; }
}
}
无论如何在页面加载开始之前执行此操作,还是在页面加载开始之前还有其他方法来创建cookie,以便应用程序可以读取它们?