﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-蜡笔小巢</title><link>http://www.cnblogs.com/callwangxiang/</link><description /><language>zh-cn</language><lastBuildDate>Sat, 04 Jul 2009 02:56:57 GMT</lastBuildDate><pubDate>Sat, 04 Jul 2009 02:56:57 GMT</pubDate><ttl>60</ttl><item><title>《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 4 角色模式(Role Pattern)</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/02/16/1392090.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Mon, 16 Feb 2009 15:35:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/02/16/1392090.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1392090.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/02/16/1392090.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1392090.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1392090.html</trackback:ping><description><![CDATA[摘要: 信息安全设计模式系列 4 （转载请注明出处）Role角色模式王翔(Vision Wang)2009-02-16分类 信息安全结构型模式动机、问题、影响因素 相信您和我一样，从进入托儿所、上学、工作这20多年的过程中经常需要学习各种规章制度，不过不知道您注意到没有，区别于通知中关于表扬/批评的内容，这些规章制度往往不是针对个人的。当然，您也许第一时间跳出来说，&#8220;怎么会？我们企业的规章就说&nbsp;&nbsp;<a href='http://www.cnblogs.com/callwangxiang/archive/2009/02/16/1392090.html'>阅读全文</a><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1392090.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47970/" target="_blank">19岁天才黑客发布首个iPhone 3GS破解软件</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 1 公钥体系与分布式环境要求</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/02/15/1391043.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Sun, 15 Feb 2009 10:57:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/02/15/1391043.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1391043.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/02/15/1391043.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1391043.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1391043.html</trackback:ping><description><![CDATA[<p></p>
<p style="font-size: 8pt;"><span style="font-family: 宋体;">信息安全设计模式系列</span> 1 <span style="color: red;">（转载请注明出处）</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 22pt; font-family: 黑体;">公钥体系与分布式环境要求</span></p>
<p>&nbsp;</p>
<p><span style="font-family: 宋体;">王翔</span>&nbsp;(Vision Wang)</p>
<p>&nbsp;2009-02-11</p>
<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;"><br clear="all" />
</span>
<p>&nbsp;</p>
<h2><span style="font-family: 黑体;">概要</span></h2>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">作为《设计模式</span>--<span style="font-family: 宋体;">基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》第一版的延续，计划陆续推出信息安全设计模式（</span>Security Design Patterns<span style="font-family: 宋体;">）系列，集成模式（</span>Integration Pattern<span style="font-family: 宋体;">）、数据模式（</span>Data Pattern<span style="font-family: 宋体;">）、数据访问模式（</span>Data Access Pattern<span style="font-family: 宋体;">）、</span>XML<span style="font-family: 宋体;">应用模式（</span>XML Pattern<span style="font-family: 宋体;">）以及随着</span>Web 2.0<span style="font-family: 宋体;">出现的用户体验模式（</span>UX Pattern<span style="font-family: 宋体;">：</span> User Experience Pattern<span style="font-family: 宋体;">）由于国内社区已经有不少现成的资料，因此暂时延后推出。</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">作信息安全的同行往往强调&#8220;三分技术、七分管理&#8221;，管理非常重要，尤其是对人员的管理、培训、教育更加如此，不过本系列着重在那&#8220;三分&#8221;，而且仅仅是&#8220;三分&#8221;中涉及到应用开发、设计的部分。</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">正如我们在《设计模式</span>--<span style="font-family: 宋体;">基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》</span>GOF23<span style="font-family: 宋体;">经典部分介绍的那样，</span>GOF23<span style="font-family: 宋体;">中绝大部分模式给开发人员的感觉往往集中在解决类型关系上，大量的实例也主要针对一个&#8220;系统&#8221;</span>/<span style="font-family: 宋体;">&#8220;子系统&#8221;内部的变化关系上，但随着内容的展开，我们发现很多模式也被广泛应用于分布式系统中，成为架构模式的关键部分，例如：代理模式（</span>Proxy Pattern<span style="font-family: 宋体;">）、观察者模式（</span>Observer Pattern<span style="font-family: 宋体;">）、外观模式（</span>Fa&#231;ade Pattern<span style="font-family: 宋体;">），同样在完成常见信息安全开发方面我们也有很多类似的变化要处理，由于专门针对该领域的开发人员数量相对较小，即便在项目组内部往往也是&#8220;少数派&#8221;，因此信息安全设计模式并不像设计模式</span>GOF23<span style="font-family: 宋体;">及其它分支发展脉络那么清晰，但经过软件行业几十年积累也有些&#8220;套路&#8221;可循，尤其针对开发中常见的认证、授权、访问控制已经有一些模式方法，本系列主要针对这些内容结合自身项目经验介绍。</span></p>
<h2><span style="font-family: 黑体;">信息安全模式自身面临的主要问题</span></h2>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">信息安全系统</span>/<span style="font-family: 宋体;">子系统首先是个信息系统</span>/<span style="font-family: 宋体;">子系统，因此它与</span>GOF23<span style="font-family: 宋体;">设计模式中描述的内容有共通处，其思想一样可以用于解决信息安全系统</span>/<span style="font-family: 宋体;">子系统相应的变化问题。区别于设计模式的其他分支关于变化的控制需求，信息安全模式首先要解决一个问题——<strong>信任</strong>。</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">也就是说无论我们提供何种信息安全功能</span>/<span style="font-family: 宋体;">服务，总要基于一个相对可信的环境，比如：我们验证用户密码，但用户凭证信息保存的这个库往往首先由认证程序假定是可信的，否则其他都免谈了。项目中，随着参与方的不断增多（用户、软件、系统、服务、信息源</span>&#8230;<span style="font-family: 宋体;">），我们必须提供一套大家都认为可信赖的环境，那么这种分布是公共信任环境与我们经常&#8220;手口相传&#8221;的信任体系有什么区别呢？</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">前者，我们经常用对称密钥，而后者往往还需要借助证书为凭证的非对称密钥体系，然后借助一些公共信任的机制</span>/<span style="font-family: 宋体;">服务，形成一套以公钥为基础的环境。</span></p>
<p>&nbsp;</p>
<p><em><span style="font-family: 宋体;">（对于&#8220;对称密钥&#8221;、&#8220;</span> </em><em><span style="font-family: 宋体;">非对称密钥&#8221;的概念，请参考密码学教材，一般都有较为详细的说明）</span></em></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">另一个关键因素就是&#8220;控制隔离&#8221;，参考其他设计原则的描述方法，我们不妨暂称之为——</span>Control Isolation<span style="font-family: 宋体;">，也就是说当你想控制某个对象</span>/<span style="font-family: 宋体;">服务访问另一个对象</span>/<span style="font-family: 宋体;">服务的时候，为了体现控制往往要借助一个第三方对象</span>/<span style="font-family: 宋体;">服务把两者隔开。</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0101.JPG" width="543" border="0" height="421" /><br />
</p>
<p><span style="font-family: 宋体;">图</span>01-01<span style="font-family: 宋体;">：通过控制隔离关系实现信息安全控制</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">这其中我们不难发现，</span>GOF23<span style="font-family: 宋体;">部分的结构型模式中的代理模式、外观模式以及构造型模式中的工厂方法（</span>/<span style="font-family: 宋体;">抽象工厂方法）单独个体都难于满足这里的需要。因此从某种程度看，由于信息安全开发中对象角色的复杂性，实际项目中安全模式往往需要组合多种手段才可以较有效的隔离变化。</span></p>
<h2><span style="font-family: 黑体;">信息安全模式中的价值因素</span></h2>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">区别于</span>GOF23<span style="font-family: 宋体;">中大部分变化要求，信息安全模式还有一个明显的特征就是他的价值因素，以桥模式（</span>Bridge Pattern<span style="font-family: 宋体;">）为例，我们在《设计模式</span>--<span style="font-family: 宋体;">基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》的章节中提到，之所以称之为&#8220;桥&#8221;，是因为它把客户程序可能导致变化的对多个因素变成依赖一个抽象的&#8220;桥板&#8221;，而每个变化对象的实现类型则被作为桥墩。</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0102.JPG" width="317" border="0" height="102" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 01-02<span style="font-family: 宋体;">：桥模式解决多因素变化的思路</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">通过这个过程，如果出现更多维度变化的情况，我们可以统一用一套模式思路解决相关问题。</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">而在信息安全开发的一个典型操作——&#8220;授权&#8221;中我们却不能简单的提供一个解决方案，其中一个关键考虑就是不同对象实体的价值因素，例如，典型的授权方式如下：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Role Based Security<span style="font-family: 宋体;">：适合我们常规的业务性系统；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Identity Based Security<span style="font-family: 宋体;">：适合高安全等级，需要精细颗粒度控制用户访问的系统，例如：审计系统；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Claims Based Security<span style="font-family: 宋体;">：适合对于不确定的环境部署的应用，安全性依据客户端提交访问时声明的内容进行检查；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Resource Based Security<span style="font-family: 宋体;">：以目标资源为中心的系统，主要针对敏感资源的控制；</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">从功能上，上面</span>4<span style="font-family: 宋体;">种受权方式都是为了实现&#8220;用户访问功能进而操作某些资源&#8221;的过程，但设计上抽象过程不同：</span></p>
<p style="text-indent: 21pt;">&nbsp;</p>
<p style="text-indent: 21pt;">Role Based Security<span style="font-family: 宋体;">方式：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern010201.JPG" width="316" border="0" height="58" /><br />
</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Identity Based Security</span><span style="font-family: 宋体;">方式：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern010202.JPG" width="316" border="0" height="58" /><br />
</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Claims Based Security</span><span style="font-family: 宋体;">方式：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern010203.JPG" width="316" border="0" height="83" /><br />
</p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Resource Based Security</span><span style="font-family: 宋体;">方式：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern010204.JPG" width="316" border="0" height="58" /><br />
</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">同一个过程形成多种依赖关系，主因是什么呢？关键在于我们认为<strong>谁的价值更大</strong>，更需要保护。因此，信息安全模式的使用上，我们分析的要点除了以前&#8220;隔离变化&#8221;外，还需要基于风险分析评估其中资产（及控制资产对象）的价值。</span></p>
<h2><span style="font-family: 黑体;">信息安全模式的</span>AOP<span style="font-family: 黑体;">特征</span></h2>
<p style="text-indent: 21pt;">AOP<span style="font-family: 宋体;">（</span>Aspect-Oriented Programming<span style="font-family: 宋体;">，面向方面编程），可以说是</span>OOP<span style="font-family: 宋体;">（</span>Object-Oriented Programing<span style="font-family: 宋体;">，面向对象编程）的补充和完善。</span>OOP<span style="font-family: 宋体;">引入封装、继承和多态性等概念来建立一种对象层次结构，用以模拟公共行为的一个集合。</span>OOP<span style="font-family: 宋体;">允许定义从上到下的关系，但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中，而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码，如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切（</span>cross-cutting<span style="font-family: 宋体;">）代码，在</span>OOP<span style="font-family: 宋体;">设计中，它导致了大量代码的重复，而不利于各个模块的重用。</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">而</span>AOP<span style="font-family: 宋体;">技术则恰恰相反，它利用一种称为&#8220;横切&#8221;的技术，渗透到封装的对象内部，并将那些影响了多个类的公共行为封装到一组可复用模块中——&#8220;</span>Aspect<span style="font-family: 宋体;">&#8221;（即方面）。所谓&#8220;方面&#8221;，简单地说，就是将那些与业务无关，却为业务模块所共同调用的逻辑或责任封装起来，便于减少系统的重复代码，降低模块间的耦合度，有利于未来的可操作性和可维护性。</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0103.JPG" width="525" border="0" height="280" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 01-03<span style="font-family: 宋体;">：</span>AOP<span style="font-family: 宋体;">的加载机制</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">在《设计模式</span>--<span style="font-family: 宋体;">基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》的《装饰模式》部分我们介绍了基于</span>.NET<span style="font-family: 宋体;">的三种</span>AOP<span style="font-family: 宋体;">实现机制，但并没有展开，不过普遍作为非业务逻辑主干的控制机制，面对如此众多的安全需求，如果将安全特性与业务逻辑、业务流程混编在一起，将带来代码逻辑的复杂性，使之难与维护，尤其在需求变更的情况下将增加开发、测试和部署人员的劳动成本。为此，需要变换设计思路，采用</span>AOP<span style="font-family: 宋体;">（或依赖注入等）思想设计应用，将各种模式化处理措施以较低的耦合度&#8220;编织&#8221;（</span>Weaving<span style="font-family: 宋体;">）到应用中，但又不影响应用逻辑和应用流程本身。</span></p>
<h2><span style="font-family: 黑体;">信息安全的主要领域</span></h2>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">如上文，尽管该系列近关注于&#8220;三分&#8221;，但由于信息安全领域分支的增加，从覆盖内容看信息安全模式服务的内容主要包括下列领域：</span></p>
<h3><span style="font-family: 宋体;">消息或传输通道安全性</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">传输通道安全性相对实现比较简便，可以保证应用各组成、应用间的交互在一个安全的外壳内实现，但存在一定限制：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">如果仅设计点对点的安全性，那么在企业应用服务化的背景下，必须配合一个第三方的公钥机制（例如：</span>NTLM<span style="font-family: 宋体;">、</span>Kerberos<span style="font-family: 宋体;">、</span>Active Directory &#8230;<span style="font-family: 宋体;">）提供安全性，否则随着应用的增加，点对点间的安全性维护成本将平方级增加；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">难于实现带中转的路由机制；</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">如果将安全性设计为消息（</span>Message<span style="font-family: 宋体;">）级，虽然需要在应用层面增加部分开发或配置的工作量，但可以获得如下好处：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">安全性与通道无关，尤其适于无安全保证的传输通道；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">适于异构应用间传递；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">尤其适合需经过多次路由或持久化的分布式长事务服务调用；</span></p>
<p>&nbsp;</p>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">由于关注重点的不同，两类安全性普遍应用的模式也有所不同。</span></p>
<h3><span style="font-family: 宋体;">认证</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">主要包括：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">用户信息存储。例如：采用自己的用户库还是使用</span>LDAP<span style="font-family: 宋体;">系统统一的人员信息；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">岗位或角色存储。例如：采用自定义的角色表还是通过企业统一授权平台的</span>SOAP<span style="font-family: 宋体;">调用获得；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">调用方式：是</span>per Call<span style="font-family: 宋体;">调用还是一次性认证后缓存？是每个应用独立完成还是基于</span>SSO<span style="font-family: 宋体;">？</span></p>
<p>&nbsp;</p>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">另外，对于企业内网项目，还需要考虑下列内容：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">是否可以采用</span>SQL Server<span style="font-family: 宋体;">、</span>ORACLE<span style="font-family: 宋体;">作为</span>Membership Provider?</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">是否采用</span>Active Directory<span style="font-family: 宋体;">、</span>Kerberos<span style="font-family: 宋体;">认证；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">是否需要用证书或者</span>IC<span style="font-family: 宋体;">卡、</span>USBKey<span style="font-family: 宋体;">进行认证；</span></p>
<p>&nbsp;</p>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">对于企业互联网项目，还必须仔细考虑用户信息凭证及其载体的问题。</span></p>
<h3><span style="font-family: 宋体;">授权</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">根据不同安全等级的要求，认证和授权还需要定义不同的安全实施策略，甚至混合使用不同的策略，例如上文提到的：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Role Based Security<span style="font-family: 宋体;">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Identity Based Security<span style="font-family: 宋体;">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Claims Based Security<span style="font-family: 宋体;">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Resource Based Security<span style="font-family: 宋体;">；</span></p>
<h3><span style="font-family: 宋体;">审计和日志系统</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">虽然根据应用等级保护的要求，各企业开发的应用逐步将审计和日志列入常规开发内容，但项目实施上除了应用自己完成相关功能外，还可以借助开发平台、所集成产品的特点完成，例如：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">在</span>WCF<span style="font-family: 宋体;">、</span>ASP.NET<span style="font-family: 宋体;">应用中，通过配置指定是否对过路信息进行记录、记录的详细程度；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">针对</span>WMI<span style="font-family: 宋体;">事件，结合企业安全运行管理平台进行面向业务连续性的事件建模；</span></p>
<h3><span style="font-family: 宋体;">异常管理</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">相对而言，大部分企业现有运行系统对于应用异常的管理属于弱项，大部分应用反馈的异常都是未经包装的内容，而且往往泄漏过多技术细节；但如果封装的内容过于肤浅，又不利于提供现场技术支持（即</span>Supportability<span style="font-family: 宋体;">不好）。为此，设计中开发人员需要定义</span>policy<span style="font-family: 宋体;">为整个应用程序各层的异常处理创建一致的策略，同时提供下列三种</span>Handler<span style="font-family: 宋体;">（处理程序）：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Wrap handler<span style="font-family: 宋体;">：包装一个原始异常在另一个新异常之内，并且原始的异常对象将保留在</span>InnerException<span style="font-family: 宋体;">属性中；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Replace handler<span style="font-family: 宋体;">：替换一个异常为另一个异常；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Logging handler<span style="font-family: 宋体;">：异常处理程序首先格式化异常信息，如消息和</span>Stack trace<span style="font-family: 宋体;">，接着</span>Logging handler<span style="font-family: 宋体;">将异常内容记录下来；</span></p>
<h3><span style="font-family: 宋体;">代理和委托</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">由于程序的分布性，为了减少企业系统管理人员的工作量，开发中往往需要设置代理账号或者定义账号委托关系的方式完成应用设计。</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0104.JPG" width="436" border="0" height="288" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 01-04<span style="font-family: 宋体;">：账号与委托账号示意</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">这两个特性在企业业务国际化、区域化的背景下显得更为重要，越来越多的业务打破现有边界，为此功能授权除了要说明用户自己可以完成哪些功能外，还需要借助代理及委托说明他完成什么范围内以&#8220;谁&#8221;的名义完成这些功能。除了简单的委托之外，企业环境下往往还需要对于委托及代理的方向性进行限制，同时针对待访问资源的属地关系增加必要的审批手段。</span></p>
<h3><span style="font-family: 宋体;">报文、消息及参数检查</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">很多情况下，应用的安全威胁来自交互过程，情节轻的可能会影响业务处理的有效性，严重的可能导致非法用户获得超级管理权限，威胁企业联网信息系统及网络的安全。例如：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">如果不加限制，用户可能会输入任何格式的编号，可能越界访问到其他区域信息；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">对于</span>ASP.NET<span style="font-family: 宋体;">应用，如果不对提交的</span>QueryString<span style="font-family: 宋体;">或</span>Form<span style="font-family: 宋体;">的内容进行检查，可能导致</span>SQL<span style="font-family: 宋体;">注入式攻击；</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">为此，应用需要对报文、消息以及调用参数进行必要的检查，否则不能&#8220;放行&#8221;进入企业的信息系统。</span></p>
<h2><span style="font-family: 黑体;">信息安全模式的应用特点</span></h2>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">与上述信息安全领域有所不同，信息安全模式由于其是设计思想，因此采用的是面向对象设计配合案例法的方式，包括：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">采用面向对象的模型方法分析授权、认证等信息安全过程；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">抽象关联因素，引导信息安全模式的思路同样是实现&#8220;依赖于抽象而非具体&#8221;；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">将企业的各种规范借助面向对象建模中的约束条件表现出来；</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">这样，信息安全模式与我们在</span>GOF23<span style="font-family: 宋体;">部分的设计基础完成统一，因此我们可以用类似的方式用</span>Security Design Pattern<span style="font-family: 宋体;">的思想分析各类信息中相关领域中重复出现问题及&#8220;常规解&#8221;。</span></p>
<p style="text-indent: 21pt;">&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">在经典《设计模式》中我们已经习惯模式介绍的常规体例：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Intent</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Motivation</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Applicability</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Structure</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Participants</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Collaborations</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Consequences</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Implementation</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Known Uses</p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Related Patterns</p>
<p>&nbsp;</p>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">本系列为了介绍清晰、简便，采用下列体例介绍：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Motivation<span style="font-family: 宋体;">、</span>Problem<span style="font-family: 宋体;">、</span>Forces<span style="font-family: 宋体;">：说明情景、面临的问题以及各种限制因素；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Solution<span style="font-family: 宋体;">：分析、设计并获得&#8220;常规解&#8221;的过程，包括明确参与方、协作、执行时续的过程；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Implementation<span style="font-family: 宋体;">、</span>Sequences<span style="font-family: 宋体;">：</span><span style="font-family: 宋体;">采用</span>C#<span style="font-family: 宋体;">和</span>.NET<span style="font-family: 宋体;">平台提供一个标准实现，而且沿用《</span><span style="font-family: 宋体;">设计模式</span>--<span style="font-family: 宋体;">基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展</span><span style="font-family: 宋体;">》解决问题的思路，力图提供一个更贴近实际项目的实现案例。如果您的平台是</span>Java EE<span style="font-family: 宋体;">、动态语言也可以参考类似的实现思路；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Related Patterns<span style="font-family: 宋体;">：分析该模式与其他模式（并不限于信息安全模式）的关系；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Known Uses<span style="font-family: 宋体;">及</span>Known Non-Security Users<span style="font-family: 宋体;">：主要提供行业内典型产品的应用案例分析，此外还专门提供一些尽管用到该模式，但结果并没起到&#8220;安全&#8221;结果的案例。</span></p>
<h3><span style="font-family: 宋体;">信息安全模式中的反模式</span></h3>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">此外，就如有很多</span>Anti Pattern<span style="font-family: 宋体;">一样，信息安全领域的设计模式同样也存在很多典型的</span>Anti Security Design Pattern<span style="font-family: 宋体;">。下面我们举一个例子：</span></p>
<p>&nbsp;</p>
<p><strong>Motivation</strong><strong><span style="font-family: 宋体;">、</span>Problem</strong><strong><span style="font-family: 宋体;">、</span>Forces</strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">企业应用中一般都需要对用户的身份进行检查，完成确认后我们才允许用户执行后续操作。虽然典型处理上，我们可以部署</span>PKI<span style="font-family: 宋体;">环境，先为应用安置一个安全的&#8220;窝&#8221;，但考虑到业务上线时间我们决定采用项目自行开发的方式。</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">其中一些约束因素如下：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">项目采用</span>Smart Client<span style="font-family: 宋体;">方式；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">由于企业用户比较多、分布比较广，但企业现有认证框架集中在总部信息中心，因此如何提高认证效率成为应用的一个关键指标；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">由于企业门户登录后需要经常登录不同的功能，而如果每次都要登录不同功能需要较长的网络往复，用户体验很差，即便采用</span>AJAX<span style="font-family: 宋体;">用户也已经对&#8220;旋转小圈&#8221;失去新鲜感；</span></p>
<p><strong>Solution</strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">参考我们在《设计模式</span>--<span style="font-family: 宋体;">基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》结构型模式的介绍，在客户端引入</span>Authentication Cache Proxy<span style="font-family: 宋体;">，设计上只在第一次调用的过程中把用户</span>IIdentity<span style="font-family: 宋体;">在不同应用进行认证后，缓存到客户端的内存中，后续调用全部基于该内存的认证情况进行检查。</span></p>
<p>&nbsp;</p>
<p><strong><span style="font-family: 宋体;">静态结构</span></strong></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0105.JPG" width="586" border="0" height="429" /><br />
</p>
<p><span style="font-family: 宋体;">图</span>01-05<span style="font-family: 宋体;">：增加认证缓冲后的认证代理结构</span></p>
<p>&nbsp;</p>
<p><em><span style="font-family: 宋体;">（其中</span>Subject</em><em><span style="font-family: 宋体;">的内容就是负责认证并反馈认证信息）</span></em></p>
<p><strong><span style="font-family: 宋体;">执行时序</span></strong></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">相应的执行时序如下：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0106.JPG" width="500" border="0" height="428" /><br />
</p>
<p><span style="font-family: 宋体;">图</span>01-06<span style="font-family: 宋体;">：增加认证缓冲后认证代理的执行时序</span></p>
<p><strong><span style="font-family: 宋体;">分析</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">上面的设计虽然从性能、隔离变化两个方面较好的解决了认证问题，但从信息安全角度看是个典型的&#8220;自欺欺人&#8221;的做法，因为其他程序可以很容易通过多种手段修改客户端内存这个没有实施任何保护的缓存，甚至于借助通道</span>sniffer<span style="font-family: 宋体;">等方式可以很容易借助&#8220;重发&#8221;手段模式这个认证后的调用，因此这个假设的&#8220;</span>Local Cahced Proxy<span style="font-family: 宋体;">&#8221;模式本身虽然从设计模式角度不是</span>Anti Pattern<span style="font-family: 宋体;">，但如果落实到安全领域而言他就是一个</span>Anti Pattern<span style="font-family: 宋体;">。</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">那么您可能会说&#8220;没有绝对安全&#8221;，确实，而且实际项目中我们也确实经常需要组合使用多种模式，但如果一个&#8220;套路&#8221;在某个</span>Context<span style="font-family: 宋体;">下看可行甚至完美的解决了问题，但实际上从信息安全角度看他实际上很容易破坏这个&#8220;套路&#8221;所服务的领域目标的话，那么我们常常可以将这个迷惑的错误&#8220;套路&#8221;定义为一个</span>Anti Idiom/Pattern<span style="font-family: 宋体;">。</span></p>
<h3><span style="font-family: 宋体;">信息安全模式的继承关系</span></h3>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">以授权为例，众多授权功能本身就已经形成&#8220;套路&#8221;，本身就是个</span>Authorization Pattern<span style="font-family: 宋体;">家族，还原授权的本原，最基本的</span>Authorization Pattern<span style="font-family: 宋体;">其结构如下：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0107.JPG" width="408" border="0" height="244" /><br />
</p>
<p><span style="font-family: 宋体;">图</span>01-07<span style="font-family: 宋体;">：</span>Authorization Pattern<span style="font-family: 宋体;">的静态结构</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">但我们在实际项目中往往发现同一个工作岗位的用户他所具有的访问权限很类似，甚至企业对于业务权限的规定大部分就是针对岗位而非用户个人，因此授权模式可以进一步扩展为大家熟悉的&#8220;基于角色的安全性&#8221;（</span> RBAC<span style="font-family: 宋体;">：</span>Role-Based Access Control<span style="font-family: 宋体;">），这个&#8220;套路&#8221;模式本身也变化为</span> RBAC Pattern<span style="font-family: 宋体;">，它的静态结构如下：</span></p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern010801.JPG" width="486" border="0" height="249" /><br />
</p>
<p><span style="font-family: 宋体;">图</span>01-08<span style="font-family: 宋体;">：</span>RBAC Pattern<span style="font-family: 宋体;">的静态结构</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体;">如我们上文介绍的内容，这里的</span>Role<span style="font-family: 宋体;">就是为了提供进一步安全手段增加的控制措施。响应的两个模式间的关系也可以体现为典型的继承特点：</span></p>
<p>&nbsp;</p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/SecPattern0109.JPG" width="317" border="0" height="232" /><br />
</p>
<p><span style="font-family: 宋体;">图</span>01-09<span style="font-family: 宋体;">：授权模式间的继承关系</span></p>
<p>&nbsp;</p>
<h3><span style="font-family: 宋体;">其他</span></h3>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">后续，本系列将结合上面提到的&#8220;信息安全领域&#8221;展开一系列信息安全模式的介绍。</span></p><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1391043.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>《设计模式--基于C#的工程化实现及扩展》 Security Design Pattern 系列 3 检查点模式（Check Point)</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/02/15/1391041.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Sun, 15 Feb 2009 10:50:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/02/15/1391041.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1391041.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/02/15/1391041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1391041.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1391041.html</trackback:ping><description><![CDATA[<p style="font-size: 8pt;"><span style="font-family: 宋体;">信息安全设计模式系列</span> 3 <span style="color: red;">（转载请注明出处）</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 22pt; font-family: 黑体;">Check Point<br />
</span></p>
<p>检查点模式 <br />
</p>
<p><span style="font-family: 宋体;">王翔</span>&nbsp;(Vision Wang)</p>
<p> 2009-02-13</p>
<p>&nbsp;</p>
<h2><span style="font-family: 黑体;">分类</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">信息安全行为型模式</span></p>
<h2><span style="font-family: 黑体;">动机、问题、影响因素</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">不知道您是否和我一样，每天上班要打卡。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">因为对人员进出管的比较严，如果不出示工作证并打卡，我进入不了办公区，更出不来。以进门为例，过程如下：</span></p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/callwangxiang/SecPattern0301.jpg" width="335" border="0" height="449" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 03-01<span style="font-family: 宋体;">：进门的流程</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">从上面的过程看，上述&#8220;门卫&#8221;、&#8220;门禁 系统&#8221;的目标都是防止非法用户进入敏感区域，有效保护其中的敏感信息系统和数据。上章我们介绍了单一访问点模式（Single Access Point Pattern），它的主要任务是尽量缩小访问接触面，但并不能对用户&#8220;尝试进入&#8221;的行为进行控制。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">例如：上面的示例，门卫总会下班、换 岗，门禁系统也会因为一些原因被暂时关闭，相信您看过很多大片也知道，如果火警报警器被击碎会出现什么情况，因此即便如上面&#8220;层层设防&#8221;，但如果不能尽早 &#8220;切断&#8221;这些&#8220;尝试进入&#8221;进行清理，非法用户或程序只要有&#8220;恒心&#8221;突破只是早晚的事情。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">一个更直观的例子就是我们的</span>windows<span style="font-family: 宋体;">登录密码，&#8220;</span>1qaz2wsx<span style="font-family: 宋体;">&#8221;</span>?<span style="font-family: 宋体;">——不对，&#8220;</span>123456<span style="font-family: 宋体;">&#8221;——还不对？不过没关系，我遍历就结了，磨杵成针么。</span></p>
<p style="text-indent: 21pt;">&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">总结一下，我们的目标是阻断重复出现的</span>Break in <span style="font-family: 宋体;">行为，并采取适当的行为&#8220;惩罚&#8221;发起</span>Break in<span style="font-family: 宋体;">行为的主体。这些内容对于大部分企业而言，本身就属于各种安全策略、安全使用规范要求内的。从设计上本着&#8220;组合优于继承&#8221;的原则，我们沿用《设计模式——基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》的方法，把它设计为一个独立的机制。</span></p>
<p style="text-indent: 21pt;">&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">现实中，实施这种控制有一些限制：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">这个控制要求最常见的集中在认证、授权，如果&#8220;惩罚&#8221;措施不当，会招致用户反感；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">这些行为都是非法的么？想想您是否记得自己父母的生日，尽管只是两个</span>Date<span style="font-family: 宋体;">数据。同样，我们的很多用户记忆这么多密码确实也不容易，如何认定是</span>Break in<span style="font-family: 宋体;">还是无意的对于复杂的系统而言也是必要的；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">不同的&#8220;尝试&#8221;行为可能要进行不同的反馈，比如：上班的那个例子，用斧子砍门和一遍遍刷卡可能就要用不同的手段处置；</span></p>
<h2><span style="font-family: 黑体;">解决方案</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">综上分析，我们对于这些行为可能有很多要求，但抽象而言，表示为：</span></p>
<p align="center"><strong><span style="font-family: 宋体; color: blue;">&#8220;用一个对象</span><span style="color: blue;">/</span></strong><strong><span style="font-family: 宋体; color: blue;">子系统封装对于上述&#8216;尝试&#8217;的安全策略&#8221;。</span></strong></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">回想现实中的项目如何做的呢？以认证为例，我们经常看到一个登录界面，让用户输入</span>UserName<span style="font-family: 宋体;">和</span>Password<span style="font-family: 宋体;">，如果错误超过</span>3<span style="font-family: 宋体;">、</span>5<span style="font-family: 宋体;">次就要暂时请您歇会；而授权也是，如果您总是在浏览器输入本不该执行功能的地址，可能就看到一个很不友好的界面，告诉您&#8220;您的</span>IP/<span style="font-family: 宋体;">账号已经被锁定，请联系管理员为您解锁&#8221;。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">现实中项目对于&#8220;尝试&#8221;的定义不同，而且如何定义&#8220;尝试&#8221;失败也不同，例如：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">用户名</span>/<span style="font-family: 宋体;">口令不匹配</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">认证过程超时</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">同一账号已经在其他地方登录，而且并没有退出</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">越权访问</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">在不恰当的时间登录企业的信息系统</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>&#8230; &#8230;</p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">考虑到这部分变化很大，所以因此按照</span>GOF23<span style="font-family: 宋体;">部分的处理方式，我们把它&#8220;切开&#8221;，专门为管理&#8220;尝试&#8221;的对象</span>/<span style="font-family: 宋体;">子系统提供判断算法，也就是说用策略模式把判断&#8220;尝试&#8221;是否成功以及多少次&#8220;尝试&#8221;失败就采取行动统一抽象为一个个独立的策略，允许以插件方式动态配置。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">这样，我们抽象出检查点模式的静态结构：</span></p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/callwangxiang/SecPattern0302.jpg" width="498" border="0" height="317" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 03-02<span style="font-family: 宋体;">：检查点模式的静态结构</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">说明：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>IHandler<span style="font-family: 宋体;">：借鉴命令模式的方式，定义多次&#8220;非法尝试&#8221;后应该执行的惩罚性措施；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>IStrategy<span style="font-family: 宋体;">：借鉴策略模式，定义判断尝试后的执行是否成功的判断算法；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>IDirectorStrategy<span style="font-family: 宋体;">：是企业安全策略的主要体现，他表示最终实施惩罚性措施的算法；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>Context<span style="font-family: 宋体;">：用于表示判断算法所以来的全部环境及用户参数；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>CheckPoint<span style="font-family: 宋体;">：用来管理众多&#8220;尝试&#8220;控制的调度、响应机制的入口；</span></p>
<p>&nbsp;</p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">上面的</span>Director Strategy<span style="font-family: 宋体;">虽然大部分情况下是唯一的，但对于大型企业而言，信息安全策略往往来自于不同部门，针对该情况参考我们在《设计模式——基于</span>C#<span style="font-family: 宋体;">的工程化实现及扩展》</span>GOF23<span style="font-family: 宋体;">部分的介绍，您可以借助组合模式组织相关的策略为一个统一的</span>Director Strategy<span style="font-family: 宋体;">。</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">检查点模式的执行时序如下：</span></p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/callwangxiang/SecPattern0303.jpg" border="0" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 03-03<span style="font-family: 宋体;">：检查点模式的执行时序</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">其中，决定性作用的是</span>CheckPoint<span style="font-family: 宋体;">与</span>IDirectorStrategy<span style="font-family: 宋体;">，至于</span>IHandler<span style="font-family: 宋体;">执行的措施是需要反馈回界面告知用户，还是直接在后台拿个小账本记小账，或者是拉响警报之类的，这就已经与</span>CheckPoint<span style="font-family: 宋体;">系统无关了，因为检查点的关键目标是这个前期的决策过程，至于后续的措施则完全依赖抽象的</span>IHandler<span style="font-family: 宋体;">定义完成。</span></p>
<h2><span style="font-family: 黑体;">示例</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">下面我们举一个最常见的例子，就是做网站登录次数的检查。假设企业安全策略非常宽松：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">密码错误</span>5<span style="font-family: 宋体;">次，则暂时挂起登录请求</span>20s<span style="font-family: 宋体;">；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">同一账号严禁同时在线；</span></p>
<h3><span style="font-family: 宋体;">分析</span></h3>
<p style="margin-left: 21pt;"><span style="font-family: 宋体;">这里，我们先将各项职责进行分解：</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">为</span>Director Strategy<span style="font-family: 宋体;">增加记录活动会话中每个账号登录的计数器；</span></p>
<p style="margin-left: 21pt; text-indent: -21pt;"><span style="font-family: Wingdings;">l<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体;">增加一个挂起请求</span>20s<span style="font-family: 宋体;">的管控机制；</span></p>
<h3><span style="font-family: 宋体;">设计</span></h3>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">根据细化后的分工，结合前面检查点模式的静态结构，我们设计了一个</span>TimesDirectorStrategy<span style="font-family: 宋体;">：</span></p>
<p><img alt="" src="http://images.cnblogs.com/cnblogs_com/callwangxiang/SecPattern0304.jpg" border="0" /><br />
</p>
<p><span style="font-family: 宋体;">图</span> 03-04<span style="font-family: 宋体;">：示例要求的</span>Director Strategy<span style="font-family: 宋体;">结构</span></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">具体执行时序与一般的处理类似，只不过需要</span>TimesDirectorStrategy<span style="font-family: 宋体;">根据调用请求的来源，确定其&#8220;尝试&#8221;次数。</span></p>
<h2><span style="font-family: 黑体;">相关模式</span></h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">从设计看，由于不同企业对于&#8220;非法尝试&#8221;的认定策略不同，因此策略模式成为封装相关算法的首选。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体;">为了建立一个面向企业的全面系统，我们需要把相关&#8220;尝试&#8221;错误的检查工作交给一个认证逻辑之外的第三方机制完成。因此有必要采用观察者模式，借助不同开发平台的特征从旁边&#8220;瞅着&#8221;不同的&#8220;尝试&#8221;行为。</span></p>
<h2><span style="font-family: 黑体;">行业案例</span></h2>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">大家最熟悉的</span>Windows XP<span style="font-family: 宋体;">、</span>Vista<span style="font-family: 宋体;">之类都又类似的检查点措施，每当我们连续数次输入错误的口令后，就会暂时挂起登陆界面。</span></p>
<p style="text-indent: 21pt;"><span style="font-family: 宋体;">众多网站的的&#8220;忘记密码&#8221;也是在对多次失败后，响应的自然提示。</span></p>
<h2><span style="font-family: 黑体;">其他</span></h2>
<span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10.5pt; font-family: 宋体;">如上示例，对于检查点模式的典型应用——授权和认证而言，如何抽象请求主体（对于很多情况，还需要区分同一主体的不同行为，甚至于同一行为的行为特征模式），这些内容并非检查点模式的操作内容，相关讨论需要在认证器模式（</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">Authenticator Pattern</span><span style="font-size: 10.5pt; font-family: 宋体;">，也称作&#8220;认证子&#8221;等名称）和授权器模式</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">(Authorizator Pattern</span><span style="font-size: 10.5pt; font-family: 宋体;">，</span> <span style="font-size: 10.5pt; font-family: 宋体;">也称作&#8220;授权子&#8221;等名称</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;">)</span><span style="font-size: 10.5pt; font-family: 宋体;">部分介绍。</span><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1391041.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47969/" target="_blank">新浪邮箱大本营粉墨登场！Sina.cn开放注册</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>推荐APress的图书JavaScript Design Patterns </title><link>http://www.cnblogs.com/callwangxiang/archive/2009/02/08/1386335.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Sun, 08 Feb 2009 10:37:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/02/08/1386335.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1386335.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/02/08/1386335.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1386335.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1386335.html</trackback:ping><description><![CDATA[<p><a href="http://www.cnblogs.com/Files/callwangxiang/ApressProJavaScriptDesignPatterns.rar">/Files/callwangxiang/ApressProJavaScriptDesignPatterns.rar</a></p>
<p>&nbsp;</p>
<p style="font-size: 10pt;">注：&nbsp; 资源来自于互联网，且仅限于学习目的。请您在下载后1天之内删除。<br />
</p>
<img src ="http://www.cnblogs.com/callwangxiang/aggbug/1386335.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47968/" target="_blank">IE市场份额首次跌破60%</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>很好的.NET &amp; ASP.NET 3.5学习站点 dropthings.com</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/02/07/1385963.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Sat, 07 Feb 2009 09:53:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/02/07/1385963.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1385963.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/02/07/1385963.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1385963.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1385963.html</trackback:ping><description><![CDATA[<p>最近在看《Building a Web 2.0 Portal with ASP.NET 3.5》，发现他在Codeproject提供了全部的源码，</p>
<p>而且内容上用到了WF、WCF、ASP.NET AJAX、LINQ等一系列特性，感觉作为ASP.NET 3.5的学习材料不错。<br />
</p>
<p>特推荐。</p>
<p>&nbsp;</p>
<p>&nbsp; http://www.dropthings.com/</p>
<p> <br />
</p><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1385963.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47965/" target="_blank">Google App Engine宕机6小时——云的安全在哪里？</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>对于这一版《设计模式——基于C#的工程化实践及扩展》的反思</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/01/30/1381405.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Fri, 30 Jan 2009 04:08:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/01/30/1381405.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1381405.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/01/30/1381405.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1381405.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1381405.html</trackback:ping><description><![CDATA[已经上市月余，其间收到很多朋友的支持和批评意见，感觉是该对这版作些反思的时候。<br />
<br />
书稿是去年5月份提交的，当时还是以.NET 3.0为主的开发，最近开始进入.NET 3.5以及Java 5的混合时代，也在考虑可能的话要在再版里加上些新的内容。<br />
&nbsp;尤其是数据访问模式、集成模式和信息安全模式，语法上也要把C# 3.0的内容加进去。<br />
（这样很多经典GOF23的内容其实用新的语法完成更快，更方便，代码量大大减少，出错的可能性也会减少。:)&nbsp; ）<br />
<br />
因为头一次出书，希望大家多批评指正。因为我前端开发的经验很少，希望有机会和大家多交流AJAX、UI部分的模式技术及成例（模式化技巧）。<img src ="http://www.cnblogs.com/callwangxiang/aggbug/1381405.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47961/" target="_blank">微软新推社交网站Windows Live Planet</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>GOF 23设计模式的Visio版UML图</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/01/24/1380656.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Sat, 24 Jan 2009 04:06:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/01/24/1380656.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1380656.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/01/24/1380656.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1380656.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1380656.html</trackback:ping><description><![CDATA[<p>因为平时都用EA或ROSE画， 不过有时候还需要结合Visio完成一些说明，正好找到一套图集。<br />
</p>
<p style="font-size: 8pt; color: red;">所有图库版权归原作者公司所有，本链接仅供学习使用，严禁用于任何商业用途。下载后，请在24小时内删除。<a href="http://www.cnblogs.com/Files/callwangxiang/GOF23.rar"></a></p>
<p><a href="http://www.cnblogs.com/Files/callwangxiang/GOF23.rar">/Files/callwangxiang/GOF23.rar</a> <br />
</p>
<p>&nbsp;</p>
<p>PS: 《如何进行架构设计》的那个MindMap也已经更新了，包括Architect Frame的部分。<br />
</p><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1380656.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47960/" target="_blank">火狐3.5版被指推出太匆忙：存在50多个漏洞</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>用于LINQ练习的测试数据</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/01/23/1380548.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Fri, 23 Jan 2009 12:47:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/01/23/1380548.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1380548.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/01/23/1380548.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1380548.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1380548.html</trackback:ping><description><![CDATA[摘要: #region TestDatapublic enum Countries{ USA, Italy,}public class Customer{ public string Name; public string City; public Countries Country; public Order[] Orders;}public class Order{ public int Quanti&nbsp;&nbsp;<a href='http://www.cnblogs.com/callwangxiang/archive/2009/01/23/1380548.html'>阅读全文</a><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1380548.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47959/" target="_blank">Google对手机搜索进行优化升级</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>几个常用的LINQ查询</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/01/22/1380103.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Thu, 22 Jan 2009 14:56:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/01/22/1380103.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1380103.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/01/22/1380103.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1380103.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1380103.html</trackback:ping><description><![CDATA[<p>用来备份，以后更新并查阅。:)</p>
<p>&nbsp;</p>
<p>#region GetFiles </p>
<p>/// &lt;summary&gt;   <br />
/// 获得指定路径下的所有文件    <br />
/// &lt;/summary&gt;    <br />
/// &lt;param name="path"&gt;有效路经&lt;/param&gt;    <br />
/// &lt;returns&gt;&lt;/returns&gt;    <br />
public IEnumerable&lt;FileInfo&gt; GetFiles(string path)    <br />
{    <br />
&nbsp;&nbsp;&nbsp; DirectoryInfo directory = new DirectoryInfo(path);    <br />
&nbsp;&nbsp;&nbsp; if (directory == null)    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;    <br />
&nbsp;&nbsp;&nbsp; return    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from f in directory.GetFiles()    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select f;    <br />
} </p>
<p>/// &lt;summary&gt;   <br />
/// 测试GetFiles    <br />
/// &lt;/summary&gt;    <br />
[TestMethod]    <br />
public void TestGetFiles()    <br />
{    <br />
&nbsp;&nbsp;&nbsp; string path = Environment.SystemDirectory;    <br />
&nbsp;&nbsp;&nbsp; var result = GetFiles(path);    <br />
&nbsp;&nbsp;&nbsp; Assert.IsNotNull(result);    <br />
&nbsp;&nbsp;&nbsp; foreach (var item in result)    <br />
&nbsp;&nbsp;&nbsp; {    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsInstanceOfType(item, typeof(FileInfo));    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsTrue(File.Exists(item.FullName));    <br />
&nbsp;&nbsp;&nbsp; }    <br />
} </p>
<p>#endregion </p>
<p>#region GetReturnSpecifiedInterfacedMethods </p>
<p>/// &lt;summary&gt;   <br />
/// 获得指定Assembly中返回指定接口类型名称的方法信息    <br />
/// &lt;/summary&gt;    <br />
/// &lt;param name="assembly"&gt;Assembly&lt;/param&gt;    <br />
/// &lt;param name="interfaceType"&gt;接口类型名称&lt;/param&gt;    <br />
/// &lt;returns&gt;&lt;/returns&gt;    <br />
public IEnumerable&lt;MethodInfo&gt; GetReturnSpecifiedInterfacedMethods(Assembly assembly, string interfaceTypeName)    <br />
{    <br />
&nbsp;&nbsp;&nbsp; if (assembly == null) throw new ArgumentNullException("assembly");    <br />
&nbsp;&nbsp;&nbsp; if(string.IsNullOrEmpty(interfaceTypeName)) throw new ArgumentNullException("interfaceTypeName"); </p>
<p>&nbsp;&nbsp;&nbsp; return   <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from type in assembly.GetTypes()    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from method in type.GetMethods()    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.ReturnType.GetInterface(interfaceTypeName) != null    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select method;    <br />
} </p>
<p>/// &lt;summary&gt;   <br />
/// 测试GetReturnSpecifiedInterfacedMethods    <br />
/// &lt;/summary&gt;    <br />
[TestMethod]    <br />
public void TestGetReturnSpecifiedInterfacedMethods()    <br />
{    <br />
&nbsp;&nbsp;&nbsp; string typeName = "IEnumerable`1";    <br />
&nbsp;&nbsp;&nbsp; Assembly assembly = AppDomain.CurrentDomain.GetAssemblies()[0];    <br />
&nbsp;&nbsp;&nbsp; var result = GetReturnSpecifiedInterfacedMethods(assembly, typeName);    <br />
&nbsp;&nbsp;&nbsp; Assert.IsNotNull(result);    <br />
&nbsp;&nbsp;&nbsp; foreach (var item in result)    <br />
&nbsp;&nbsp;&nbsp; {    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsInstanceOfType(item, typeof(MethodInfo));    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsNotNull(item.ReturnType.GetInterface(typeName));    <br />
&nbsp;&nbsp;&nbsp; }    <br />
} </p>
<p>#endregion </p>
<p>#region GetAssemblyStaticMethods </p>
<p>/// &lt;summary&gt;   <br />
/// 获得指定Assembly包含的静态方法信息    <br />
/// &lt;/summary&gt;    <br />
/// &lt;param name="assembly"&gt;&lt;/param&gt;    <br />
/// &lt;returns&gt;&lt;/returns&gt;    <br />
public IEnumerable&lt;MethodInfo&gt; GetAssemblyStaticMethods(Assembly assembly)    <br />
{    <br />
&nbsp;&nbsp;&nbsp; if (assembly == null) throw new ArgumentNullException("assembly");    <br />
&nbsp;&nbsp;&nbsp; return    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from type in assembly.GetTypes()    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from method in type.GetMethods()    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; method.IsStatic    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select method;    <br />
} </p>
<p>/// &lt;summary&gt;   <br />
/// 测试GetAssemblyStaticMethods    <br />
/// &lt;/summary&gt;    <br />
[TestMethod]    <br />
public void TestGetAssemblyStaticMethods()    <br />
{    <br />
&nbsp;&nbsp;&nbsp; Assembly assembly = AppDomain.CurrentDomain.GetAssemblies()[0];    <br />
&nbsp;&nbsp;&nbsp; var result = GetAssemblyStaticMethods(assembly);    <br />
&nbsp;&nbsp;&nbsp; Assert.IsNotNull(result);    <br />
&nbsp;&nbsp;&nbsp; foreach (var item in result)    <br />
&nbsp;&nbsp;&nbsp; {    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsInstanceOfType(item, typeof(MethodInfo));    <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Assert.IsTrue(item.IsStatic);    <br />
&nbsp;&nbsp;&nbsp; }    <br />
}</p><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1380103.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>SOA Visio 设计图标</title><link>http://www.cnblogs.com/callwangxiang/archive/2009/01/22/1379749.html</link><dc:creator>蜡笔小王</dc:creator><author>蜡笔小王</author><pubDate>Thu, 22 Jan 2009 02:04:00 GMT</pubDate><guid>http://www.cnblogs.com/callwangxiang/archive/2009/01/22/1379749.html</guid><wfw:comment>http://www.cnblogs.com/callwangxiang/comments/1379749.html</wfw:comment><comments>http://www.cnblogs.com/callwangxiang/archive/2009/01/22/1379749.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/callwangxiang/comments/commentRss/1379749.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/callwangxiang/services/trackbacks/1379749.html</trackback:ping><description><![CDATA[<p>为了便于完成SOA Design Pattern的书稿，Prentice Hall及Thomas Erl提供了一套SOA的VIsio图标</p>
<p><a title="http://www.soapatterns.com/soa_08_12_beta.zip" href="http://www.soapatterns.com/soa_08_12_beta.zip">http://www.soapatterns.com/soa_08_12_beta.zip</a></p>
<p>&nbsp;</p>
<p>使用方式：</p>
<p>1、下载，并将vss文件置于Visio图标库目录</p>
<p>&lt;Program Files&gt;\Microsoft Office\Visio11\1033</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_2.png"><img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_thumb.png" width="317" border="0" height="218" /></a> </p>
<p>&nbsp;</p>
<p>2、启动Visio建立设计文档，引用SOA图标库</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_4.png"><img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_thumb_1.png" width="133" border="0" height="244" /></a> </p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_8.png"><img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_thumb_3.png" width="281" border="0" height="182" /></a> </p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_10.png"><img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_thumb_4.png" width="135" border="0" height="244" /></a> </p>
<p>&nbsp;</p>
<p>3、使用图标库绘图</p>
<p>例如：一个简化的基于Service Repository的多WS-*服务应用概要图如下：</p>
<p><a href="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_12.png"><img title="image" style="border: 0px none ; display: inline;" alt="image" src="http://www.cnblogs.com/images/cnblogs_com/callwangxiang/WindowsLiveWriter/SOAVisio_8C5F/image_thumb_5.png" width="360" border="0" height="173" /></a></p><img src ="http://www.cnblogs.com/callwangxiang/aggbug/1379749.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47958/" target="_blank">风声又起 Windows 7 RTM版7月13日完成</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>