Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HttpModule事件-拦截sharepoint重定向到accessdenied.aspx_Sharepoint_Redirect_Httpmodule - Fatal编程技术网

HttpModule事件-拦截sharepoint重定向到accessdenied.aspx

HttpModule事件-拦截sharepoint重定向到accessdenied.aspx,sharepoint,redirect,httpmodule,Sharepoint,Redirect,Httpmodule,对于我的SharePoint设置,我有一个特定的用户组,该用户组无权访问网站的frontpage。如果他们直接访问,他们将从SharePoint获得标准的“拒绝访问”页面 我正在开发一个HttpModule,它拦截对frontpage的访问,检查当前用户并将其重定向到他们有权访问的子站点 我第一次尝试使用PostAuthorizerRequest,但SharePoint似乎在较早的事件中触发,并且仍然重定向到拒绝访问页面。我已经和一个可以访问frontpage但仍然被重定向的用户进行了测试,在那

对于我的SharePoint设置,我有一个特定的用户组,该用户组无权访问网站的frontpage。如果他们直接访问,他们将从SharePoint获得标准的“拒绝访问”页面

我正在开发一个HttpModule,它拦截对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){
}
}