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, "", "", "", 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[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
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, "", "", "", 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[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