HttpModule事件-拦截sharepoint重定向到accessdenied.aspx
对于我的SharePoint设置,我有一个特定的用户组,该用户组无权访问网站的frontpage。如果他们直接访问,他们将从SharePoint获得标准的“拒绝访问”页面 我正在开发一个HttpModule,它拦截对frontpage的访问,检查当前用户并将其重定向到他们有权访问的子站点 我第一次尝试使用HttpModule事件-拦截sharepoint重定向到accessdenied.aspx,sharepoint,redirect,httpmodule,Sharepoint,Redirect,Httpmodule,对于我的SharePoint设置,我有一个特定的用户组,该用户组无权访问网站的frontpage。如果他们直接访问,他们将从SharePoint获得标准的“拒绝访问”页面 我正在开发一个HttpModule,它拦截对frontpage的访问,检查当前用户并将其重定向到他们有权访问的子站点 我第一次尝试使用PostAuthorizerRequest,但SharePoint似乎在较早的事件中触发,并且仍然重定向到拒绝访问页面。我已经和一个可以访问frontpage但仍然被重定向的用户进行了测试,在那
PostAuthorizerRequest
,但SharePoint似乎在较早的事件中触发,并且仍然重定向到拒绝访问页面。我已经和一个可以访问frontpage但仍然被重定向的用户进行了测试,在那里重定向工作正常
在用户输入用户名/密码后,但在SharePoint重定向之前,我需要捕获哪个事件才能获取用户?我建议您使用自定义错误,而不是捕获代码中的“未经授权”事件。当用户重定向到“拒绝访问”页面时,SharePoint实际上抛出了一个错误,错误代码为“401”(表示未经授权)
在web.config中,您可以为401错误配置应用程序的行为。如果你曾经在一个web应用上做过一个自定义错误页面,那也是一样的。在web.config中查找CustomError节点,并将其修改为以下内容:
<customErrors mode="On" defaultRedirect="~/_layouts/CustomErrorPage.aspx">
<error statusCode="401" redirect="~/_layouts/AccessDeniedPage.aspx" />
</customErrors>
请注意,此时,如果需要,您仍然可以访问SPContext对象(我假设您希望根据用户的组成员身份编写特定代码)
这不是特定于SharePoint的行为。所有ASP.NET应用程序都是这样工作的。使用站点范围的配置将允许您仅在需要运行代码时(即,当访问被拒绝时)运行代码,而不是检查每个页面加载的权限或类似的内容。与SharePoint 2013一样,我们在配置自定义访问被拒绝页面时存在错误,此处解释了如何使用HTTPModule实现
使用API中提供的SPSecurity.suppressAccessDeniedRedirectionScope方法防止SharePoint开箱即用重定向。 用法示例-将代码包装在此代码段中:
using (SPSecurity.SuppressAccessDeniedRedirectInScope scope = new SPSecurity.SuppressAccessDeniedRedirectInScope()) {
try{
catch (UnauthorizedAccessException ex){
}
}
using (SPSecurity.SuppressAccessDeniedRedirectInScope scope = new SPSecurity.SuppressAccessDeniedRedirectInScope()) {
try{
catch (UnauthorizedAccessException ex){
}
}