- 浏览: 147518 次
- 性别:
- 来自: 成都
-
文章分类
最新评论
-
老八牛:
利用迭代器让异步操作更加“人性化”-山寨版的AsyncEnumerator -
老八牛:
为什么看不到代码?
利用迭代器让异步操作更加“人性化”-山寨版的AsyncEnumerator -
xi4nyu:
如果启动Application中的settings 的debu ...
玩蛇记-使用Tornado构建高性能Web之二-autoreload -
huacnlee:
"且在python下工作多日才发现原来在.NET下的 ...
玩蛇记-使用tornado构建高性能Web应用之一 -
jasongreen:
异步数据库操作,在web上有什么作用吗?
玩蛇记-使用tornado构建高性能Web应用之一
公司用WSS3.0做内部协同,但是由于很多分公司在外地,所以协同网站必须在公网上,为了提高安全性和更好的分区域管理,所以要给WSS增加一个用户于IP绑定的功能,这个任务光荣地落到我的头上,结果查遍Google,Baidu无果,只好自力更生。想到的第一个方法是做一个WebPart,在WebPart检测登录的用户名,然后与数据库里的绑定表作对比。不过转念一想WebPart需要部署且要加了的页面才能起作用,整个网站集几十个站点,累也能累死。最后决定自己写一个HttpModule加上去,然后在AuthorizeRequest
事件里来验证。至于验证的过程到是很简单,只需要在数据库里比对一下就行了。
由于采用的Form认证,所以在aspnetdb数据库里增加一个绑定表,就两个列,UserAccount和IpAddr,因为不存在范围之类的所以直接用字符串的形式存储IP。
HttpModule很好写,为了避免每次都读取数据库,在第一次验证成功就生成Cookie,之后检测到Cookie就不再验证了。之前想过用Cache,不过Cache和Application一个级别的,用Session又太麻烦,于是用Cookie,最后代码如下:
不过在Web.Config里加载上这个模块后直接报错了。显示 SqlClientPermission 的权限有问题,看来在这里访问数据库还是有问题,WSS应该对代码的安全性做了限制,查了查Web.Config.看到:
看来是在这里设置的了。找到<trust level="WSS_Custom" originUrl="" /> 发现当前WSS使用的WSS_Custom这个配置,于是就到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\ 找到Wss_Custom_wss_minimaltrust.config文件
看了下发现里面确实没有关于Sqlclient的配置,本来想就地添加,不过转念一想自己动手怕将来要修改的地方太多太杂,于是继续看了下另外两个config文件,最后在wss_mediumtrust.config 里找到了SqlClint相关的配置,于是最后将trust节点改成<trust level="WSS_Medium" originUrl="" />
打开页面看看,OK,搞定收工。
[本代码乃Demo,与公司内部使用的代码与逻辑均不相同,特此声明]
由于采用的Form认证,所以在aspnetdb数据库里增加一个绑定表,就两个列,UserAccount和IpAddr,因为不存在范围之类的所以直接用字符串的形式存储IP。
HttpModule很好写,为了避免每次都读取数据库,在第一次验证成功就生成Cookie,之后检测到Cookie就不再验证了。之前想过用Cache,不过Cache和Application一个级别的,用Session又太麻烦,于是用Cookie,最后代码如下:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> 1 public class UserProvider:IHttpModule
2 {
3
4 private HttpApplication ctx;
5 private String User;
6 #region IHttpModule 成员
7
8 public void Dispose()
9 {
10 ctx = null;
11 //throw new Exception("The method or operation is not implemented.");
12 }
13
14 public void Init(HttpApplication context)
15 {
16 ctx = context;
17 context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
18
19 }
20
21 void context_AuthorizeRequest(object sender, EventArgs e)
22 {
23 try
24 {
25 User = ctx.User.Identity.Name.ToLower();
26 if (User != null && User.Length > 1)
27 {
28 if (ctx.Context.Request.Cookies["AuthIP"]== null)
29 {
30 SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
31 string IP = "0.0.0.0";
32 string UIP = "";
33 using (conn)
34 {
35 conn.Open();
36 SqlCommand cmd = new SqlCommand("SELECT [UserAccount],[IPAddr] FROM [aspnetdb].[dbo].[IPLock] WHERE [UserAccount] = @P", conn);
37 cmd.Parameters.Add("@P", SqlDbType.VarChar, 50).Value = User;
38 SqlDataReader sd = cmd.ExecuteReader();
39 if (sd.Read())
40 {
41 IP = sd["IpAddr"].ToString();
42 }
43 conn.Close();
44
45 UIP = ctx.Request.UserHostAddress;
46 if (!IP.Equals("0.0.0.0"))
47 {
48 if (!IP.Equals(UIP))
49 {
50 throw new Exception("IP地址被禁止" + User + ":" + IP);
51 }
52 }
53 ctx.Response.Cookies.Add(new HttpCookie("AuthIP"));
54 ctx.Response.Cookies["AuthIP"].Value = "OK";
55 ctx.Response.Cookies["AuthIP"].Expires = DateTime.Now.AddDays(1);
56 }
57 }
58 }
59 }
60 catch (Exception ex)
61 {
62 throw ex;
63 }
64
65 }
66
67 #endregion
68 }
2 {
3
4 private HttpApplication ctx;
5 private String User;
6 #region IHttpModule 成员
7
8 public void Dispose()
9 {
10 ctx = null;
11 //throw new Exception("The method or operation is not implemented.");
12 }
13
14 public void Init(HttpApplication context)
15 {
16 ctx = context;
17 context.AuthorizeRequest += new EventHandler(context_AuthorizeRequest);
18
19 }
20
21 void context_AuthorizeRequest(object sender, EventArgs e)
22 {
23 try
24 {
25 User = ctx.User.Identity.Name.ToLower();
26 if (User != null && User.Length > 1)
27 {
28 if (ctx.Context.Request.Cookies["AuthIP"]== null)
29 {
30 SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
31 string IP = "0.0.0.0";
32 string UIP = "";
33 using (conn)
34 {
35 conn.Open();
36 SqlCommand cmd = new SqlCommand("SELECT [UserAccount],[IPAddr] FROM [aspnetdb].[dbo].[IPLock] WHERE [UserAccount] = @P", conn);
37 cmd.Parameters.Add("@P", SqlDbType.VarChar, 50).Value = User;
38 SqlDataReader sd = cmd.ExecuteReader();
39 if (sd.Read())
40 {
41 IP = sd["IpAddr"].ToString();
42 }
43 conn.Close();
44
45 UIP = ctx.Request.UserHostAddress;
46 if (!IP.Equals("0.0.0.0"))
47 {
48 if (!IP.Equals(UIP))
49 {
50 throw new Exception("IP地址被禁止" + User + ":" + IP);
51 }
52 }
53 ctx.Response.Cookies.Add(new HttpCookie("AuthIP"));
54 ctx.Response.Cookies["AuthIP"].Value = "OK";
55 ctx.Response.Cookies["AuthIP"].Expires = DateTime.Now.AddDays(1);
56 }
57 }
58 }
59 }
60 catch (Exception ex)
61 {
62 throw ex;
63 }
64
65 }
66
67 #endregion
68 }
不过在Web.Config里加载上这个模块后直接报错了。显示 SqlClientPermission 的权限有问题,看来在这里访问数据库还是有问题,WSS应该对代码的安全性做了限制,查了查Web.Config.看到:
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->1 <securityPolicy>
2 <trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
3 <trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
4 <trustLevel name="WSS_Custom" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_custom_wss_minimaltrust.config" />
5 </securityPolicy>
2 <trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_mediumtrust.config" />
3 <trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_minimaltrust.config" />
4 <trustLevel name="WSS_Custom" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\wss_custom_wss_minimaltrust.config" />
5 </securityPolicy>
看来是在这里设置的了。找到<trust level="WSS_Custom" originUrl="" /> 发现当前WSS使用的WSS_Custom这个配置,于是就到C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\config\ 找到Wss_Custom_wss_minimaltrust.config文件
看了下发现里面确实没有关于Sqlclient的配置,本来想就地添加,不过转念一想自己动手怕将来要修改的地方太多太杂,于是继续看了下另外两个config文件,最后在wss_mediumtrust.config 里找到了SqlClint相关的配置,于是最后将trust节点改成<trust level="WSS_Medium" originUrl="" />
打开页面看看,OK,搞定收工。
[本代码乃Demo,与公司内部使用的代码与逻辑均不相同,特此声明]
发表评论
-
关于ORM和内存数据库的遐想
2007-01-23 13:21 577最近有消息说韩国电信 ... -
继续ORM-欧德巴赫猜想-Mapping
2007-01-23 14:34 676最近从项目组单离出来开始在公司实施过程化管理,整个QA Off ... -
剑走偏锋,小心走火入魔
2007-01-23 15:07 714这是很久前写好的文字,闲得无聊就发上来,几个月前的感想,上午一 ... -
手把手教你写ORM(三)
2007-01-24 11:50 613昨天处于晕死状态,少写了一个组件,还需要一个组件用来专门管理C ... -
手把手教你写ORM(四)
2007-01-24 13:51 658现在中午不睡一会儿就头晕。前一篇有人留言说为什么不写web.c ... -
手把手教你写ORM(五)
2007-01-24 15:29 623CMMI是魔鬼继续上面的内容,这里我们要实现一个插件的结构来动 ... -
谈谈我们的学习和我们的Blog
2007-01-24 20:07 417第一,学习编程是一个很枯燥的过程,所以我们更要讲究效率(要把有 ... -
手把手教你写代码生成器(也算ORM的续)
2007-01-25 11:45 739因为ORM还是需要配置,还是需要EntityObject,所以 ... -
粒度细到控件的权限管理系统的设计(概要篇)
2007-01-25 21:40 1073其实这个设计是已经做过了,那个时候我才进公司还在试用期,给我的 ... -
粒度细到控件的权限管理组件(构想篇)
2007-01-26 10:34 755说老实话我现在还没开 ... -
手把手教你写ORM大全篇
2007-01-26 19:36 694根据dudu boss的建议将本系列作一个归纳,下一个系列正在 ... -
架构设计的非侵入性原则
2007-01-27 00:41 709最近常常看到JAVA社区热 ... -
手把手教你可复用SSO组件的设计(原理篇)
2007-01-27 14:55 765在结构设计上复用性 ... -
对《万事欠备设计先行》的一点想法,兼谈XP和CMMI
2007-01-29 09:31 658周末陪女友,故沉默了,其实大脑并没有沉默,之前看到《万事欠备设 ... -
手把手教你可复用的SSO组件设计(设计篇)
2007-01-29 16:24 600周末陪女朋友去了,没写,告罪,上班后急忙补上。 这里说到了可复 ... -
手把手教你可复用的SSO组件设计(实现篇)
2007-01-29 22:30 622费了一夜的功夫写完这些代码,有些凌乱,望见谅。 首先是对加密解 ... -
玩具级嵌入式内存对象数据库^V^
2007-02-01 19:46 503纯粹是为了好玩:} 最近几天很忙所以写得少了,昨天在清理硬盘的 ... -
差之毫厘谬以千里-计算中的精度问题
2007-02-27 10:04 592如果你只是i++来作计数 ... -
动态语言,涅磐重生还是死路一条?
2007-03-06 10:31 588最近花时间一直在看python和ruby,为了在Web应用又看 ... -
ASP.NET's MVC is what a joke!
2007-03-08 13:43 484很早前还在毁人不倦的 ...
相关推荐
官方发布的40个基于WSS3.0的网站模板为用户提供了强大的工具,使得在WSS3.0平台上构建功能丰富的网站变得更加简单和高效。无论是小型团队还是大型企业,都可以根据自身的需求选择合适的模板,快速建立起满足业务需求...
WSS3.0 SDK 中文手册 WSS3.0 SDK 中文手册 WSS3.0 SDK 中文手册
描述中提到的"基本WSS3.0的人事管理系统(DEMO)",意味着这是一个用以演示如何在WSS 3.0平台上开发人事管理功能的实例。DEMO通常包含基本功能,如员工信息管理、考勤记录、职位发布、薪酬福利等,但可能不包含所有...
Windows SharePoint Services(WSS)3.0是微软提供的一款基于Web的协作平台,它允许用户创建、共享和管理文档、数据以及网站内容。在WSS 3.0中,系统默认的登录方式通常依赖于Active Directory(AD)进行身份验证。...
在IT领域,Windows SharePoint Services(WSS)3.0是一个重要的协作平台,它为企业提供了构建网站、管理文档和促进团队合作的功能。在这个特定的例子中,我们关注的是一个基于WSS 3.0的Calendar程序源码,这为开发...
Microsoft Windows SharePoint Services (WSS) 3.0 and Microsoft Office SharePoint Server (MOSS) 2007 provide developers with a rich development framework for implementing features and functionalities ...
Microsoft Windows SharePoint Services (WSS) 3.0 and Microsoft Office SharePoint Server (MOSS) 2007 provide developers with a rich development framework for implementing features and functionalities ...
在讨论如何在SQL Server中管理Windows SharePoint Services 3.0(WSS 3.0)的内容数据库时,首先需要明确内容数据库的定义及其重要性。WSS 3.0的内容数据库存储了所有SharePoint站点的数据和配置信息,是SharePoint...
例如,个人用户、团队项目、部门资源和企业级应用都可以在WSS3.0的框架下统一管理,形成一个连贯的信息生态系统。 ### 三、配置WSS3.0以优化支持使用环境 配置WSS3.0以最佳支持各种使用环境,需要深入分析企业当前...
通过使用有助于用户跨组织和跨地区边界保持连接的协作工具,WSS 使用户能够访问他们所需的信息。建立在 Microsoft Windows Server 2003 之上的 WSS 还提供了一个基础平台,用于构建基于 Web 的业务应用程序,可以...
了解和开发sharepoint的入门基础书籍
《Python库 Tencentcloud-sdk-python-wss 3.0.335详解》 在Python的开发环境中,丰富的库是其强大功能的重要支撑。Tencentcloud-sdk-python-wss是腾讯云为Python开发者提供的一款用于处理WebSocket服务的SDK,版本...
**Windows SharePoint Services 3.0 (WSS 3.0)** 是微软为组织提供的一种协作平台,旨在帮助用户更高效地共享文档、管理项目以及交流信息。它作为Microsoft Office SharePoint Server 2007的基础版本,提供了许多...
在Windows Server 2008中,WSS功能已内置,用户可以直接配置。安装前的准备工作包括: 1. 将服务器加入域或提升为域控制器。 2. 安装IIS,包括ASP和ASP.NET组件。 3. 安装.NET Framework 3.0和SMTP服务器。 **WSS...
- Wss1:IP地址192.168.10.11,机器名wss1,安装了IIS6、.NET 3.0和WSS3.0 - Wss2:IP地址192.168.10.12,机器名wss2,配置同Wss1 - NLB后的Wss Web配置:IP地址192.168.10.13,域名wss.Projectaims.com - AD...
在3.0版本中,它为用户提供了一系列增强的功能和改进,以提升工作效率和团队合作。 WSS的核心功能包括: 1. **网站创建与管理**:用户可以轻松创建自定义的网站模板,满足不同部门或项目的需求。这些网站支持多种...
资源分类:Python库 所属语言:Python 资源全名:tencentcloud-sdk-python-wss-3.0.422.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059