我在Windows 2008下运行的MOSS 2007中遇到一个奇怪的错误。我创建了一个自定义HTTP模块,它触发了应用程序的OnAuthenticate事件。它基本上创建了一个自定义cookie,供另一个应用程序用来验证用户身份,从而创建单一的登录效果。
在运行Win2K3的开发服务器下,一切都很顺利。但是,在登台服务器上发生了以下奇怪的事情:
a)模块似乎在基页上触发,即https://conn.test.com/Pages/Default.aspx,但是如果somone直接进入子页面,如:https://conn.test.com/Operations/Pages/Operations%20Portal.aspx,它似乎不会触发。
b)模块从IE中被激活,但不是从Firefox或Chrome激发。两者之间的唯一区别似乎是某个webpart加载并在IE中工作但似乎没有加载或在Chrome或FF中工作。
有人可以帮助解释这种行为。 HTTPMOdule会覆盖应用程序的AuthenticateRequest事件。
答案 0 :(得分:0)
很抱歉得到了这个想法。问题是OnAuthenticate的事件处理程序的Init方法使用底层ASP.NET用户的特权,但主事件处理程序委托使用经过身份验证的用户的凭据。
我写了一些代码登录到事件日志,显然这需要更高级别的权限。这就是模块代表被解雇但没有记录的原因。
我的猜测是,主页面上的webpart运行时具有其他具有必要访问权限的用户的权限,因此在那里工作。由于它在FF或Chrome中不起作用,因此模块在这些浏览器中不起作用。此外,子页面没有webpart,因此直接进入它们也会导致问题。
在我在日志记录代码周围添加了SPSecurity.runWithElevatedPriviliges后,问题已经排序。