加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:13:30 所属栏目:asp.Net 来源:网络整理
导读:我有一个ASP.NET MVC应用程序与控制器看起来像这样: [Authorize]public class MyController : Controller{IMyRepository myRepository;public MyController(IMyRepository myRepository){ this.myRepository = myRepository;}...} 我已经注意到这个构造函数
我有一个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可能不会做的工作有什么特别的原因吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读