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

9
namespace MOSSSecurity10
{11
public class TextFileMembershipProvider : MembershipProvider12
{13
private String _sFilePath = "";14

15
public String FilePath16
{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 ApplicationName73
{74
get75
{76
return "/";77
}78
set79
{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
else122
{123
return false;124
}125
}126

127
public override bool EnablePasswordReset128
{129
get { return false; }130
}131

132
public override bool EnablePasswordRetrieval133
{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
else193
{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 MaxInvalidPasswordAttempts209
{210
get { return 999; }211
}212

213
public override int MinRequiredNonAlphanumericCharacters214
{215
get { return 0; }216
}217

218
public override int MinRequiredPasswordLength219
{220
get { return 1; }221
}222

223
public override int PasswordAttemptWindow224
{225
get { return 999; }226
}227

228
public override MembershipPasswordFormat PasswordFormat229
{230
get { return MembershipPasswordFormat.Clear; }231
}232

233
public override string PasswordStrengthRegularExpression234
{235
get { return ""; }236
}237

238
public override bool RequiresQuestionAndAnswer239
{240
get { return false; }241
}242

243
public override bool RequiresUniqueEmail244
{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
try266
{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



浙公网安备 33010602011771号