设为首页 收藏本站
查看: 939|回复: 0

[经验分享] SharePoint 2007 采用表单验证 一段源码

[复制链接]

尚未签到

发表于 2015-9-26 12:41:24 | 显示全部楼层 |阅读模式
到网上一篇文章在SharePoint Server 2007中创建定制的用户管理模块,做了试试看,第一次失败,最后终于解决了!原来是Sharepoint前台读取那个记录用户信息的文件,总是提示“Access Denied”,因为代码会直接抛Exception,而此时sharepoint因为验证问题,无法显示此错误,导致我也不清楚错误出在什么地方了。最后苦思冥想,在原代码的ValidateUser()中加入的异常的捕获处理,大功告成!不仅发现了问题所在,还看到了登陆不成功的对话框!看来自己写的代码,对异常处理也需要控制啊,尤其是那种为其他系统写组件,用以替换/实现某一功能的!

  1 DSC0000.gif using 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 DSC0001.gif DSC0002.gif DSC0003.gif {
11 DSC0004.gif     public class TextFileMembershipProvider : MembershipProvider
12 DSC0005.gif DSC0006.gif     {
13        private String _sFilePath = "";
14
15        public String FilePath
16        {
17            get { return _sFilePath; }
18 DSC0007.gif         }
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 DSC0008.gif }
289

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-119107-1-1.html 上篇帖子: 使用SharePoint文档库需注意的问题 下篇帖子: SharePoint 2010:自定义XSLT List View webpart的行为和样式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表