使用自定义属性保护某些MVC方法以防止多次登录?

时间:2011-09-19 18:19:38

标签: asp.net asp.net-mvc

我需要阻止用户从多个会话登录我的ASP.NET MVC应用程序,并找到this answer如何操作。

现在我想添加一个MVC扭曲:Controller上的一些公共方法是不受保护的,我不关心谁访问它们,有些受[Authorize]属性保护以确保只记录-in用户可以访问它们。现在我想自定义AuthorizeAttribute,以便用该属性标记的所有方法都将执行相关问题中描述的无多重登录验证,并抛出某种LoggedInElsewhereException以便客户端可以理解检查失败的原因和原因。

我确信可以做到,但是怎么做?

1 个答案:

答案 0 :(得分:4)

只需从AuthorizeAttribute派生您的新属性并覆盖OnAuthorization方法。在该方法中,首先进行“单个会话”检查,然后再回到基本实现。

E.g。

public class CheckSessionAndAuthorizeAttribute : AuthorizeAttribute
{
    public override OnAuthorization(AuthorizationContext context)
    {
        //check session id in cache or database
        bool isSessionOK = CheckSession();

        if (!isSessionOK)
        {
            //can be View, Redirect or absolutely customized logic 
            context.Result = new MyCustomResultThatExplainsError();
            return;
        }

        //do base stuff
        base.OnAuthorization(context);
    }
}