解决模拟MOSS用户调用WebService打开个人站点进行操作

From:http://www.cnblogs.com/BruceLee521/

 

开始以为要构建

WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();

GenericPrincipal genericPrincipal =new GenericPrincipal(genericIdentity, roles);

然后把HttpContext.Current.User 置成上面构造的。但发现在打开个人站点时出错。

然后修改个人站点C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\SPSPERS\default.aspx

加入

username:<%=HttpContext.Current.User.Identity.Name%>:
authen:<%=HttpContext.Current.User.Identity.AuthenticationType%>
authe:<%=HttpContext.Current.User.GetType().ToString()%>
identity:<%=HttpContext.Current.User.Identity.GetType().ToString()%>

运行发现页面输出

helloWORLD:sunsheng: authen:Forms authe:System.Web.Security.RolePrincipal identity:System.Web.Security.FormsIdentity

才知道构造用户错误,应该构造

System.Web.Security.RolePrincipal
System.Web.Security.FormsIdentity

于是写了类

public class MOSSFBAImpersonate
    {

        //code sample by Ric
        //================
        //  MOSSFBAImpersonate mossFBAImpersonate = new MOSSFBAImpersonate(ConfigurationManager.AppSettings.Get("RoleProviderName"));
        // FBAIP.Impersonate([roleProvidernameFromWebconfig],[impersonatingUserName]);
        //  //to do you work here....
        //  FBAIP.Revoke();
        //================

        #region public functions

        public MOSSFBAImpersonate(string roleProviderName)
        {
            m_rolePrincipal = (IPrincipal)HttpContext.Current.User;
            m_roleProvider = roleProviderName;
            if (null == m_roleProvider)
                throw (new Exception("MOSSFBAImpersonate::roleProviderName is null!"));
        }
        public void Impersonate(string userName)
        {
            HttpContext.Current.User = this.CreateHttpUser(m_roleProvider, userName);
        }
        public void Revoke()
        {
            if (null != m_rolePrincipal)
                HttpContext.Current.User = (IPrincipal)m_rolePrincipal;
        }
        #endregion
        #region private region
        private object m_rolePrincipal = null;
        private string m_roleProvider = null;

        private RolePrincipal CreateHttpUser(string roleProviderName, string userName)
        {
            GenericIdentity genericIdentity = new GenericIdentity(userName, "Forms");
            return new RolePrincipal(roleProviderName, genericIdentity);
        }
        #endregion
    }

来进行模拟用户

得到个人站点的代码可以如下:

public SPWeb GetPersonalWeb(string strAccount, string strPersonalSiteHost)
        {
            SPWeb myWeb = null;
            SPSite spPersonalSite = null;
            MOSSFBAImpersonate mossFBAImpersonate = new MOSSFBAImpersonate(ConfigurationManager.AppSettings.Get("RoleProviderName"));
            try
            {
                mossFBAImpersonate.Impersonate(strAccount);
                spPersonalSite = new SPSite(strPersonalSiteHost);
                myWeb = spPersonalSite.RootWeb;
                mossFBAImpersonate.Revoke();
            }
            catch (System.Threading.ThreadAbortException thex)
            {
                throw thex;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
               //myWeb.Dispose(); //which will be disposed by outside caller.
                spPersonalSite.Dispose();
            }
            return myWeb;
        }

转载于:https://www.cnblogs.com/Jeffer/archive/2009/11/26/1611632.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GNU C 、ANSI C(标准C)与标准c++的区别

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 概念 GNU计划在编写linux的时候自己制作了一个标准&#xff0c;称为GNU C标准。 ANSI&#xff08;美国国家标准协会&#xff09;对C做了一个标准“ANSI C”&#xff0c;后来被国际标准协会接收成为标准C。 …

ASIHTTPRequest 常用方法讲解

原文地址&#xff1a;http://www.cocoachina.com/iphonedev/sdk/2011/0324/2736.html ASIHTTPRequest 是一款极其强劲的 HTTP 访问开源项目。让简单的 API 完成复杂的功能&#xff0c;如&#xff1a;异步请求&#xff0c;队列请求&#xff0c;GZIP 压缩&#xff0c;缓存&#x…

作业记录

老师留得题目http://oldboy.blog.51cto.com/2561410/1337343首先我用了一个我最快想到办法用了一个超级笨的办法 #!/bin/bash #(基础) pwdpwd #(临时目录) dir"htmldir" #(源文件地址) html"http://vote.runsky.com/2013/12/jiaoyu/" #(临时文件1) file1&q…

C++远航之封装篇——对象指针、this指针

1、使用new会调用构造函数&#xff0c;使用malloc不会使用构造函数。 2、加不加括号都行&#xff1f;YES 3、对象成员指针&#xff08;指针指向对象&#xff0c;而这对象是数据成员&#xff09; 4、this指针 下面这个没有歧义&#xff1a; 而下面这个有歧义&#xff1a; 为此&a…

javascript Function()

JavaScript中的Function对象是函数&#xff0c;函数的用途分为3类&#xff1a;作为普通逻辑代码容器&#xff1b;作为对象方法&#xff1b;作为构造函数。1.作为普通逻辑代码容器function multiply(x, y) { return x * y;}函数multiply封装了两位数的乘法运算公式&#xff1a;…

java基础之线程(1)

线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。 每个线程都有一个优先级&#xff0c;高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thread 对象时&#xff0c;该新线程的初…

poj 1274 The Perfect Stall

2019独角兽企业重金招聘Python工程师标准>>> The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16888 Accepted: 7721 Description Farmer John completed his new barn just last week, complete with all the latest milkin…

C++远征之封装篇——常对象成员、常成员函数

一、常对象成员 二、常成员函数 &#xff08;1&#xff09;常成员函数中不能修改数据成员的值 &#xff08;2&#xff09;不能修改的原因 每个函数都默认带了一个this指针的&#xff0c;该指针指向该类的实例。当使用const来修饰时&#xff0c;其实是const Coordinate* this。这…

PHP建站环境搭建:汇总网上常见的1键安装包

PHP的程序很火&#xff0c;像博客&#xff1a;Wordpress、论坛&#xff1a;Discuz!、SNS&#xff1a;UCenter Home、CMS&#xff1a;DedeCMS等等都是比较流行的PHP程序&#xff0c;大家都在使用PHP类的程序&#xff0c;但对于很多初学者来说&#xff0c;直接上传到虚拟空间上一…

最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...

最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和文章作者&#xff1a;Yx.Ac 文章来源&#xff1a;勇幸|Thinking (http://www.ahathinking.com) 转载请注明&#xff0c;谢谢合作。 以后新博客写的文章挑一些粘过来&#…

JEECMS编辑漏洞及随便拿webshell,啊哈哈

JEECMS是基于java技术开发&#xff0c;继承其强大、稳定、安全、高效、跨平台等多方面的优点 采用SpringMVC3Spring3Hibernate3Freemarker主流技术架构 安全性做得非常变态&#xff0c;当网站安装完成后就不再允许执行任何目录下的jsp文件了&#xff08;web.xml配置了过滤器禁…

内核通识——linux内核的简介

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 内核下载 下载地址&#xff1a;www.kernel.org 下载地址&#xff1a;Index of /sites/ftp.kernel.org/pub/linux/kernel/ 本栏目文章2.6.35.7版本为例进行说明。 一、内核功能 1、操作系统的含义 操…

端口列表详解

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51); text-align:left"> TCP 2Death TCP 11Skun TCP 12Bomber TCP 16Skun TCP 17Skun TCP 18消息传输协议,skun TCP 19Skun TCP 20FTP Data,Amanda TCP 21文件传…

C++之内存管理

1.申请内存&#xff1a;int *p new int;释放内存&#xff1a;delete p; 2.申请块内存&#xff1a;int *arrnew int[10];释放:delete []arr; 3.申请内存需要判断是否成功&#xff0c;释放内存需要设空指针 4.new与delete配套使用 转载于:https://www.cnblogs.com/xjyxp/p/11236…

Android 调用分享框

平时打开某些应用的分享选项时&#xff0c;经常可以看到同时分享到google play, 豌豆荚&#xff0c;91助手等弹出框&#xff0c;具体怎样实现的呢&#xff1f; 可以参考下面的代码 Uri uri Uri.parse("market://details?id"Constant.PACKAGE_NAME);Intent intent …

内核通识——linux内核源码(2.6.35.7版本)的目录结构

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、文件 &#xff08;1&#xff09;Kbuild文件 Kbuild是kernel build的缩写&#xff0c;就是内核编译的意思。这个文件就是linux内核特有的内核编译体系需要用到的文件。 &#xff08;2&#xff09…

【原创】自制PCB经验教训之一:版图打印篇

看了篇帖子《用感光电路板自制PCB攻略&#xff08;网友电子白菜撰写&#xff09;》&#xff0c;于是前几天在淘宝上买了一批PCB DIY工具和材料回来&#xff0c;想自己弄个试试&#xff0c;岂料障碍重重&#xff0c;甚至于酿成大祸... 首先是PCB打印的软件设置问题&#xff0c;我…

magento cms page、登錄頁面修改(增加)breadcrumbs

由於magento的cms功能有限&#xff0c;在cms page的角度來看&#xff0c;差不存在cms的category&#xff0c;所以cms page的breadcrumbs只會出現單層的結構&#xff08;HOME->About Us), 要想模仿出分層次的結構&#xff0c;就需要修改cbreadcrumbs了。 修改方法如下&#x…

分享一套非常不错的bootstarp3.0.2响应式模板

2019独角兽企业重金招聘Python工程师标准>>> 这是销量第一的bootstrap 响应式后台管理模板&#xff0c;每套模板都是我用20美金买回来的话不多说&#xff0c;下面是五个模板的演示地址&#xff0c;你看到的&#xff0c;就是你可以下载到的。都是收费模板。 官方演示…

内核配置与编译——编译初体验

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、获取内核源码 第一种是kernel.org的官方版本&#xff0c;第二种是三星移植过的&#xff0c;第三种是X210的移植版本。讲课时使用第三种内核&#xff0c;移植实验使用第二种内核。九鼎配置好的k…