我有一些代码用于确定用户是否已登录,并且我想将其放在ASP.NET网站的每个页面上,以便只有登录的用户才能查看它。问题是该站点被拆分为多个项目/解决方案,因此维护单个代码可能很难。
我在想我可以创建一个继承System.Web.UI.Page
并覆盖Page_Init
的类,但这需要更改所有页面,以便它们从新的新类继承。此外,我认为这不适用于各个项目。
然后我想从另一方面解决问题:使用AOP。我之前从未使用过Aspects,但看起来我可以使用PostSharp编写一个在每个Page_Init
之前注入代码的Aspect(或者Page_Load
?)。这可能是一个快速解决方案,但如果我需要一个页面不执行身份验证检查(可供所有人使用),我可能会遇到问题。
为了澄清,我已经有了登录解决方案;我只是想在每页上检查登录。
答案 0 :(得分:3)
了解HttpModules。 asp.net框架已经编程,因此模块可以在每个页面请求上运行,您只需编写它并将其添加到web.config。
http://msdn.microsoft.com/en-us/library/zec9k340(v=vs.71).aspx
编辑:这是一个更好的链接,演示了如何处理BeginRequest事件 http://msdn.microsoft.com/en-us/library/ms227673(v=vs.85).aspx
答案 1 :(得分:1)
正如@jrummell所提到的那样,MembershipProvider
这是一个很好的选择,但是如果你正在创建自定义登录解决方案,请检查这个link,它有一个非常简单的登录实现,一步一步
答案 2 :(得分:1)
由于您似乎已经处理并正在使用您的登录解决方案,因此创建一个覆盖page_init的类听起来就像是您的最佳选择。这可以在其他项目中工作,只需在一个单独的项目中创建该类,您可以将其包含在其他解决方案中......说实话,这是跨多个项目跨越逻辑的最简单方法..这也将是易于维护,因为您只需要更新一个位置。
如果您使用的是MasterPages,则无需点击所有页面,只需将其包含在特定的MasterPage中,并将您希望身份验证的所有页面设置为使用该MasterPage。
答案 3 :(得分:0)
Windows Identity Foundation可以为您解决此问题。有关WIFI的详细信息,请参阅http://msdn.microsoft.com/en-us/security/aa570351。无需重新发明轮子。如果您只有一个Web应用程序,则表单身份验证就足够了。