• SharePoint 2007 采用表单验证 一段源码


    到网上一篇文章在SharePoint Server 2007中创建定制的用户管理模块,做了试试看,第一次失败,最后终于解决了!原来是Sharepoint前台读取那个记录用户信息的文件,总是提示“Access Denied”,因为代码会直接抛Exception,而此时sharepoint因为验证问题,无法显示此错误,导致我也不清楚错误出在什么地方了。最后苦思冥想,在原代码的ValidateUser()中加入的异常的捕获处理,大功告成!不仅发现了问题所在,还看到了登陆不成功的对话框!看来自己写的代码,对异常处理也需要控制啊,尤其是那种为其他系统写组件,用以替换/实现某一功能的!
      1using System;
      2using System.Collections.Generic;
      3using System.Text;
      4using System.Web;
      5using System.Web.Security;
      6using System.IO;
      7using System.Collections.Specialized;
      8
      9namespace MOSSSecurity
     10{
     11    public class TextFileMembershipProvider : MembershipProvider
     12    {
     13        private String _sFilePath = "";
     14
     15        public String FilePath
     16        {
     17            get return _sFilePath; }
     18        }

     19
     20        private IDictionary<String, String> LoadAllUsers()
     21        {
     22            if (String.IsNullOrEmpty(this.FilePath))
     23            {
     24                throw new InvalidOperationException("FilePath is not set.");
     25            }

     26
     27
     28            Dictionary<String, String> result = new Dictionary<String, String>();
     29
     30            StreamReader reader = new StreamReader(FilePath, Encoding.Default);
     31            while (true)
     32            {
     33                String sLine = reader.ReadLine();
     34                if (sLine == null)
     35                {
     36                    break;
     37                }

     38                if (sLine.Trim().Length == 0)
     39                {
     40                    continue;
     41                }

     42                String[] line = sLine.Split(':');
     43                result.Add(line[0], line[1]);
     44            }

     45
     46            return result;
     47        }

     48
     49        private void WriteAllUsers(IDictionary<String, String> users)
     50        {
     51            if (String.IsNullOrEmpty(this.FilePath))
     52            {
     53                throw new InvalidOperationException("FilePath is not set.");
     54            }

     55
     56            using (StreamWriter writer = new StreamWriter(this.FilePath, false))
     57            {
     58                foreach (String userId in users.Keys)
     59                {
     60                    writer.WriteLine(userId + ":" + users[userId]);
     61                }

     62            }

     63        }

     64
     65        public override void Initialize(string name, NameValueCollection config)
     66        {
     67            base.Initialize(name, config);
     68
     69            _sFilePath = config["filePath"];
     70        }

     71
     72        public override string ApplicationName
     73        {
     74            get
     75            {
     76                return "/";
     77            }

     78            set
     79            {
     80                
     81            }

     82        }

     83
     84        public override bool ChangePassword(string username, string oldPassword, string newPassword)
     85        {
     86            return true;
     87        }

     88
     89        public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
     90        {
     91            return true;
     92        }

     93
     94        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
     95        {
     96            IDictionary<String, String> users = this.LoadAllUsers();
     97            if (users.ContainsKey(username))
     98            {
     99                status = MembershipCreateStatus.DuplicateUserName;
    100                return null;
    101            }

    102
    103            users.Add(username, password);
    104            this.WriteAllUsers(users);
    105
    106            status = MembershipCreateStatus.Success;
    107
    108            MembershipUser user = new MembershipUser(this.Name, username, username, email, passwordQuestion, "", isApproved, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
    109            return user;
    110        }

    111
    112        public override bool DeleteUser(string username, bool deleteAllRelatedData)
    113        {
    114            IDictionary<String, String> users = this.LoadAllUsers();
    115            if (users.ContainsKey(username))
    116            {
    117                users.Remove(username);
    118                this.WriteAllUsers(users);
    119                return true;
    120            }

    121            else
    122            {
    123                return false;
    124            }

    125        }

    126
    127        public override bool EnablePasswordReset
    128        {
    129            get return false; }
    130        }

    131
    132        public override bool EnablePasswordRetrieval
    133        {
    134            get return false; }
    135        }

    136
    137        public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    138        {
    139            totalRecords = 0;
    140            return null;
    141        }

    142
    143        public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    144        {
    145            MembershipUserCollection result = new MembershipUserCollection();
    146
    147            IDictionary<String, String> users = this.LoadAllUsers();
    148            foreach (String username in users.Keys)
    149            {
    150                if (username.StartsWith(usernameToMatch))
    151                {
    152                    result.Add(this.GetUser(usernameToMatch, false));
    153                }

    154            }

    155
    156            totalRecords = users.Count;
    157            return result;
    158        }

    159
    160        public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
    161        {
    162            MembershipUserCollection result = new MembershipUserCollection();
    163
    164            IDictionary<String, String> users = this.LoadAllUsers();
    165            foreach (String username in users.Keys)
    166            {
    167                result.Add(this.GetUser(username, false));
    168            }

    169
    170            totalRecords = users.Count;
    171            return result;
    172        }

    173
    174        public override int GetNumberOfUsersOnline()
    175        {
    176            return 0;
    177        }

    178
    179        public override string GetPassword(string username, string answer)
    180        {
    181            return "";
    182        }

    183
    184        public override MembershipUser GetUser(string username, bool userIsOnline)
    185        {
    186            IDictionary<String, String> users = this.LoadAllUsers();
    187            if (users.ContainsKey(username))
    188            {
    189                MembershipUser result = new MembershipUser(this.Name, username, username, """"""truefalse, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
    190                return result;
    191            }

    192            else
    193            {
    194                return null;
    195            }

    196        }

    197
    198        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    199        {
    200            return this.GetUser(providerUserKey.ToString(), userIsOnline);
    201        }

    202
    203        public override string GetUserNameByEmail(string email)
    204        {
    205            return "";
    206        }

    207
    208        public override int MaxInvalidPasswordAttempts
    209        {
    210            get return 999; }
    211        }

    212
    213        public override int MinRequiredNonAlphanumericCharacters
    214        {
    215            get return 0; }
    216        }

    217
    218        public override int MinRequiredPasswordLength
    219        {
    220            get return 1; }
    221        }

    222
    223        public override int PasswordAttemptWindow
    224        {
    225            get return 999; }
    226        }

    227
    228        public override MembershipPasswordFormat PasswordFormat
    229        {
    230            get return MembershipPasswordFormat.Clear; }
    231        }

    232
    233        public override string PasswordStrengthRegularExpression
    234        {
    235            get return ""; }
    236        }

    237
    238        public override bool RequiresQuestionAndAnswer
    239        {
    240            get return false; }
    241        }

    242
    243        public override bool RequiresUniqueEmail
    244        {
    245            get return false; }
    246        }

    247
    248        public override string ResetPassword(string username, string answer)
    249        {
    250            return "";
    251        }

    252
    253        public override bool UnlockUser(string userName)
    254        {
    255            return true;
    256        }

    257
    258        public override void UpdateUser(MembershipUser user)
    259        {
    260            
    261        }

    262
    263        public override bool ValidateUser(string username, string password)
    264        {
    265            try
    266            {
    267                ExceptionMgt.Publish(new Exception(username + "|" + password));
    268
    269                IDictionary<String, String> users = this.LoadAllUsers();
    270                if (!users.ContainsKey(username))
    271                {
    272                    return false;
    273                }

    274                if (users[username] != password)
    275                {
    276                    return false;
    277                }

    278
    279                return true;
    280            }

    281            catch (Exception ex)
    282            {
    283                ExceptionMgt.Publish(ex);
    284                return false;
    285            }

    286        }

    287    }

    288}

    289
  • 相关阅读:
    VUE的生命周期
    ID生成算法(二)
    ID生成算法(一)——雪花算法
    HTTP状态码和支持的方法
    水平居中/垂直居中/水平垂直居中总结
    判断数组类型的4种方法
    WebSocket浅谈
    vue中使用定时器时this指向
    银行转账业务梳理
    支付那些事儿
  • 原文地址:https://www.cnblogs.com/skywind/p/697987.html
Copyright © 2020-2023  润新知