3

我有一些代码用于确定用户是否已登录,我想将其放在 ASP.NET 网站的每个页面上,以便只有登录的用户才能查看它。问题是该站点被分成多个项目/解决方案,因此维护单个代码可能很困难。

我在想我可以创建一个继承 forSystem.Web.UI.Page和 overrides的类Page_Init,但这需要更改所有页面,以便它们从新的新类继承。此外,我认为这不适用于跨项目。

所以我想从另一个方面解决问题:使用 AOP。我以前从未使用过 Aspect,但看起来我可以使用 PostSharp 编写一个在每个Page_Init(或者可能Page_Load?)之前注入代码的 Aspect。这可能是一个快速的解决方案,但如果我需要一个页面来不执行身份验证检查(每个人都可用),我可能会遇到问题。

澄清一下,我已经有了一个登录解决方案;我只是在寻找每个页面上的登录信息。

4

4 回答 4

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

于 2012-04-09T16:55:22.743 回答
1

正如@jrummell 提到的,MembershipProvider这是一个很好的选择,但是如果您正在创建自定义登录 solition,请查看这个链接,它有一个非常简单的逐步登录实现

于 2012-04-09T16:58:29.587 回答
1

由于您似乎已经处理了您的登录解决方案并且可以正常工作,因此创建一个覆盖 page_init 的类听起来是您的最佳选择。这可以通过简单地在一个单独的项目中创建该类来跨其他项目工作,您可以将其包含在您的其他解决方案中......老实说,这是跨越多个项目的逻辑的最简单方法......这也将是易于维护,因为您只需要更新一个位置。

如果您使用 MasterPages,则不必点击所有页面,您只需将其包含在特定的 MasterPage(s) 中,然后设置您想要验证的所有页面以使用该 MasterPage。

于 2012-04-09T17:20:31.257 回答
0

Windows Identity Foundation 可以为您解决这个问题。有关 WIF 的详细信息,请参阅http://msdn.microsoft.com/en-us/security/aa570351。无需重新发明轮子。如果您只有一个 Web 应用程序,Forms 身份验证就足够了。

于 2012-04-09T16:59:50.653 回答