zoukankan      html  css  js  c++  java
  • MOSS ad组的获取及Hashtable作缓存总结

    问题一:
    在MOSS项目中,通过web.SiteGroups[i].ContainsCurrentUser可以判断到当前登录的用户是否是AD域中的用户
    即使当前用户在MOSS站点中并不存在。
    而且通过web.AllUsers或web.SiteUserInfoList都可以判断到AD域中的用户。
    但是,如果使用web.SiteGroups[i].Users["域用户帐号"] 时,却会报错。这个时候该怎么弄呢?
     我的解决方案是通过模拟用户来操作,代码如下:
     1 /// <summary>
     2        /// 获取用户所属于的组
     3        /// </summary>
     4        /// <param name="user"></param>
     5        /// <returns></returns>

     6        private IList<SPGroup> GetUserExistInGroups(SPUser user)
     7        {
     8            try
     9            {
    10                IList<SPGroup> tempGroups = new List<SPGroup>();
    11
    12                SPSecurity.RunWithElevatedPrivileges(delegate()
    13                {
    14                    SPUser tempUser = web.AllUsers[user.LoginName];
    15                    using (SPSite tempSite = new SPSite(site.Url, tempUser.UserToken))
    16                    {
    17                        using (SPWeb tempWeb = tempSite.OpenWeb())
    18                        {
    19                            SPGroupCollection groups = tempWeb.SiteGroups;
    20                            foreach (SPGroup group in groups)
    21                            {
    22                                if (group.ContainsCurrentUser)
    23                                {
    24                                    tempGroups.Add(group);
    25                                }

    26                            }

    27
    28                        }

    29                    }

    30                }
    );
    31                return tempGroups;
    32            }

    33            catch
    34            {
    35                return null;
    36            }

    37        }

    如上可以获取无论是AD域中的用户还是MOSS站点的用户所属的所有组。。

    另一个Hashtable缓存,在不方便使用System.Web.Caching.Cache或HttpRuntime.Cache,或HttpContext.Current.Cache的时候,可以试试,代码如下:
     1/// <summary>
     2    /// 哈希表缓存
     3    /// 作者:徐志泽
     4    /// 创建日期:2008-12-26
     5    /// </summary>

     6    public class HashCacheTool
     7    {
     8        private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
     9
    10        /// <summary>
    11        /// 保存缓存值
    12        /// </summary>
    13        /// <param name="cacheKey"></param>
    14        /// <param name="cmdParms"></param>

    15        public static void SetCache(string cacheKey, object cacheValue)
    16        {
    17            parmCache[cacheKey] = cacheValue;
    18        }

    19        /// <summary>
    20        /// 获取缓存值 
    21        /// </summary>
    22        /// <param name="cacheKey"></param>
    23        /// <returns></returns>

    24        public static object GetCached(string cacheKey)
    25        {
    26            return parmCache[cacheKey];
    27        }

    28        /// <summary>
    29        /// 清空所有
    30        /// </summary>

    31        public static void Clear()
    32        {
    33            if (parmCache.Count <= 0)
    34                return;
    35            parmCache.Clear();
    36        }

    37        /// <summary>
    38        /// 判断关键字是否存在
    39        /// </summary>
    40        /// <param name="key"></param>
    41        /// <returns></returns>

    42        public static bool IsKeyExist(string cacheKey)
    43        {
    44            if (parmCache.Count <= 0)
    45                return false;
    46            return parmCache.ContainsKey(cacheKey);
    47        }

    48        /// <summary>
    49        /// 如果关键字不存在的话,则清空所有
    50        /// </summary>
    51        /// <param name="key"></param>

    52        public static void ClearWhileKeyNotExist(string cacheKey)
    53        {
    54            if (parmCache.Count <= 0)
    55                return;
    56            if (IsKeyExist(cacheKey))
    57                return;
    58            else
    59                Clear();
    60        }

    61    }
    其中的
    private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
    是同步封装。
    我就曾因为同步问题,导致在Loadrunner中多并发测试时,几乎90%的用户会报500错误。
  • 相关阅读:
    扑克牌大小
    简单错误记录
    聊天室
    GMM的EM算法实现
    Spark SQL 源代码分析之 In-Memory Columnar Storage 之 in-memory query
    JSP简单练习-使用JDOM创建xml文件
    PowerDesigner使用教程
    setsockopt()使用方法(參数具体说明)
    SQL注入原理解说,非常不错!
    Offer是否具有法律效力?
  • 原文地址:https://www.cnblogs.com/McJeremy/p/1363088.html
Copyright © 2011-2022 走看看