刘伟 发表于 2015-9-26 12:41:24

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, line);
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);
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, "", "", "", true, false, 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 != 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
页: [1]
查看完整版本: SharePoint 2007 采用表单验证 一段源码