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可能不会做的工作有什么特别的原因吗?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC4代码优先 – ‘无法附加文件作为数据
- ASP.NET验证摘要:如何使用JavaScript禁用验证程
- ef-code-first – 如何首先使用代码向Identity默
- asp.net-mvc – ASP.NET MVC 3更改摘要
- 在ASP.NET中动态设置元素属性的值
- asp.net-mvc – Asp.NET MVC 2预览2:Area的aspx
- asp.net-core – ASP.NET核心图像上传和调整大小
- asp.net – 记录网页的加载时间
- asp.net-mvc – ASP.NET MVC中的500内部服务器错
- asp.net-mvc – 如何查看mvc应用程序中的所有视图