asp.net-mvc – 认证之前调用的ASP.NET MVC控制器构造函数

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 认证之前调用的ASP.NET MVC控制器构造函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ASP.NET MVC应用程序与控制器看起来像这样:
[Authorize]
public class MyController : Controller
{
IMyRepository myRepository;
public MyController(IMyRepository myRepository)
{
   this.myRepository = myRepository;
}

...
}

我已经注意到这个构造函数在进行身份验证之前被调用了,所以如果你在第一次访问该页面之前调用构造函数,然后再将你重定向登录屏幕.这有很多问题,登录页面加载速度较慢,网站有更大的暴露于DOS攻击,我对未经身份验证的用户有一点紧张,未经授权的用户能够调用“墙后面”的代码.

我可以检查构造函数中的进入请求,除非用户被授权,否则我使用IOC(Windsor),这样做有点棘手,我的存储库将被初始化,无论我是否存储实例,所以我将在每个仓库的构造函数中检查身份验证.在调用构造函数之前,有没有简单的方法让.NET MVC验证用户?我正在考虑将[PrincipalPermission(SecurityAction.Demand,Authenticated = true)]添加到控制器,但可能还有一个更好的方法.

编辑:

好的,不太高兴,但现在必须继续.我无法延迟初始化存储库,直到控制器内的某个稍后的时间点.当控制器在我的例子中使用IOC时,在实例化控制器时,您将获得已经实例化的存储库接口的实现.如果我控制了创建的存储库,我可以很容易地调用IsAuthenticated,不需要一个新的方法.为了控制存储库初始化,您必须在每个实现中在存储库本身中实现某种延迟/延迟初始化.我不喜欢这个解决方案,因为它增加了不必要的复杂性,更重要的是控制器和存储库之间的耦合.存储库实现可以用于其他延迟初始化对IMHO无意义的上下文中.

解决方法

控制器需要在授权发生之前进行实例化,因为它可以通过OnAuthorization方法作为自己的授权过滤器.改变这种行为将涉及替换mvc管道的一些核心部分.你认为AuthorizedAttribute可能不会做的工作有什么特别的原因吗?
原文链接:https://www.f2er.com/aspnet/250084.html

猜你在找的asp.Net相关文章