我需要阻止用户从多个会话登录我的ASP.NET MVC应用程序,并找到this answer如何操作。
现在我想添加一个MVC扭曲:Controller上的一些公共方法是不受保护的,我不关心谁访问它们,有些受[Authorize]
属性保护以确保只记录-in用户可以访问它们。现在我想自定义AuthorizeAttribute
,以便用该属性标记的所有方法都将执行相关问题中描述的无多重登录验证,并抛出某种LoggedInElsewhereException
以便客户端可以理解检查失败的原因和原因。
我确信可以做到,但是怎么做?
答案 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);
}
}