??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲国产成人久久精品99,亚洲欧美日韩中文无线码,亚洲精品无码永久在线观看男男http://m.tkk7.com/xzclog/category/17324.htmlzh-cnThu, 04 Mar 2010 18:02:51 GMTThu, 04 Mar 2010 18:02:51 GMT60PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码http://m.tkk7.com/xzclog/archive/2010/03/03/314416.htmlxzcxzcWed, 03 Mar 2010 08:09:00 GMThttp://m.tkk7.com/xzclog/archive/2010/03/03/314416.htmlhttp://m.tkk7.com/xzclog/comments/314416.htmlhttp://m.tkk7.com/xzclog/archive/2010/03/03/314416.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/314416.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/314416.html【{】PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
2009-12-03 15:06

PowerDesigner->Tools->Execute Commands->Edit/Run Scripts

 

代码一:Name中的字符COPY至Comment?/p>


'******************************************************************************
'
*    File:            name2comment.vbs
'
*    Purpose:      Database    generation    cannot    use    object    names    anymore   
'
                          in    version    7    and    above.
'
                          It    always    uses    the    object    codes.
'

'
                          In    case    the    object    codes    are    not    aligned    with    your   
'
                          object    names    in    your    model,    this    script    will    copy   
'
                          the    object    Name    onto    the    object    Comment    for   
'
                          the    Tables    and    Columns.
'

'
*    Title:         
'
*    Version:      1.0
'
*    Company:      Sybase    Inc.   
'
******************************************************************************


Option   Explicit
ValidationMode   
=   True
InteractiveMode   
=    im_Batch

Dim    mdl   '    the    current    model

'    get    the    current    active    model
Set    mdl   =    ActiveModel
If    (mdl   Is   Nothing)   Then
      
MsgBox   "There    is    no    current    Model "
ElseIf   Not    mdl.IsKindOf(PdPDM.cls_Model)   Then
      
MsgBox   "The    current    model    is    not    an    Physical    Data    model. "
Else
       ProcessFolder    mdl
End   If

'    This    routine    copy    name    into    comment    for    each    table,    each    column    and    each    view
'
    of    the    current    folder
Private   sub    ProcessFolder(folder)
      
Dim    Tab   'running      table
      for   each    Tab    in    folder.tables
            
if   not    tab.isShortcut   then
                   tab.comment   
=    tab.name
                  
Dim    col   '    running    column
                  for   each    col    in    tab.columns
                         col.comment
=    col.name
                  
next
            
end   if
      
next

      
Dim    view   'running    view
      for   each    view    in    folder.Views
            
if   not    view.isShortcut   then
                   view.comment   
=    view.name
            
end   if
      
next

      
'    go    into    the    sub-packages
      Dim    f   '    running    folder
      For   Each    f    In    folder.Packages
            
if   not    f.IsShortcut   then
                   ProcessFolder    f
            
end   if
      
Next
end   sub

代码?Comment中的字符COPY至Name?/p>

Option   Explicit
ValidationMode   
=   True
InteractiveMode   
=    im_Batch

Dim    mdl   '    the    current    model

'    get    the    current    active    model
Set    mdl   =    ActiveModel
If    (mdl   Is   Nothing)   Then
      
MsgBox   "There    is    no    current    Model "
ElseIf   Not    mdl.IsKindOf(PdPDM.cls_Model)   Then
      
MsgBox   "The    current    model    is    not    an    Physical    Data    model. "
Else
       ProcessFolder    mdl
End   If

Private   sub    ProcessFolder(folder)
On Error Resume Next
      
Dim    Tab   'running      table
      for   each    Tab    in    folder.tables
            
if   not    tab.isShortcut   then
                   tab.name   
=    tab.comment
                  
Dim    col   '    running    column
                  for   each    col    in    tab.columns
                  
if col.comment="" then
                  
else
                         col.name
=    col.comment
                  
end if
                  
next
            
end   if
      
next

      
Dim    view   'running    view
      for   each    view    in    folder.Views
            
if   not    view.isShortcut   then
                   view.name   
=    view.comment
            
end   if
      
next

      
'    go    into    the    sub-packages
      Dim    f   '    running    folder
      For   Each    f    In    folder.Packages
            
if   not    f.IsShortcut   then
                   ProcessFolder    f
            
end   if
      
Next
end   sub


xzc 2010-03-03 16:09 发表评论
]]>
Jpetstore阅读心得之分层结?http://m.tkk7.com/xzclog/archive/2006/11/02/78593.htmlxzcxzcThu, 02 Nov 2006 01:41:00 GMThttp://m.tkk7.com/xzclog/archive/2006/11/02/78593.htmlhttp://m.tkk7.com/xzclog/comments/78593.htmlhttp://m.tkk7.com/xzclog/archive/2006/11/02/78593.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/78593.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/78593.html阅读全文

xzc 2006-11-02 09:41 发表评论
]]>
使用状态模?state pattern)替代if else http://m.tkk7.com/xzclog/archive/2006/10/16/75399.htmlxzcxzcMon, 16 Oct 2006 05:46:00 GMThttp://m.tkk7.com/xzclog/archive/2006/10/16/75399.htmlhttp://m.tkk7.com/xzclog/comments/75399.htmlhttp://m.tkk7.com/xzclog/archive/2006/10/16/75399.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/75399.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/75399.html阅读全文

xzc 2006-10-16 13:46 发表评论
]]>
权限的设计分?http://m.tkk7.com/xzclog/archive/2006/09/18/70375.htmlxzcxzcMon, 18 Sep 2006 12:48:00 GMThttp://m.tkk7.com/xzclog/archive/2006/09/18/70375.htmlhttp://m.tkk7.com/xzclog/comments/70375.htmlhttp://m.tkk7.com/xzclog/archive/2006/09/18/70375.html#Feedback0http://m.tkk7.com/xzclog/comments/commentRss/70375.htmlhttp://m.tkk7.com/xzclog/services/trackbacks/70375.html权限往往是一个极其复杂的问题Q但也可单表qCؓq样的逻辑表达式:判断“Who对What(Which)q行How的操作”的逻辑表达式是否ؓ真。针对不同的应用Q需要根据项目的实际情况和具体架构,在维护性、灵zL、完整性等N多个Ҏ之间比较权衡Q选择W合的方案?br />目标Q?br />直观Q因为系l最l会由最l用hl护Q权限分配的直观和容易理解,昑־比较重要Q系l不辞劳苦的实现了组的承,除了功能的必,更主要的是因ؓ它够直观?br />单,包括概念数量上的单和意义上的单还有功能上的简单。想用一个权限系l解x有的权限问题是不现实的。设计中常常变化的“定制”特Ҏ较强的部分判断ؓ业务逻辑Q而将常常相同的“通用”特Ҏ较强的部分判断ؓ权限逻辑是Zq样的思\?br />扩展Q采用可l承在扩展上的困难。的Group概念在支持权限以l方式定义的同时有效避免了重定义?br />现状Q?br />对于在企业环境中的访问控制方法,一般有三种Q?br />1.自主型访问控制方法。目前在我国的大多数的信息系l中的访问控制模块中基本是借助于自d讉K控制Ҏ中的讉K控制列表(ACLs)?br />2.强制型访问控制方法。用于多层次安全U别的军事应用?br />3.Z角色的访问控制方法(RBACQ。是目前公认的解军_型企业的l一资源讉K控制的有效方法。其显著的两大特征是Q?.减小授权理的复杂性,降低理开销?.灉|地支持企业的安全{略Qƈ对企业的变化有很大的伸羃性?br />名词Q?br />_粒度:表示cdU,即仅考虑对象的类?the type of object)Q不考虑对象的某个特
定实例。比如,用户理中,创徏、删除,Ҏ有的用户都一视同仁,q不区分操作的具体对象实例?br />l粒度:表示实例U,即需要考虑具体对象的实?the instance of object)Q当Ӟl?br />_度是在考虑_粒度的对象cd之后才再考虑特定实例。比如,合同理中,列表、删除,需要区分该合同实例是否为当前用h创徏?br />原则Q?br />权限逻辑配合业务逻辑。即权限pȝ以ؓ业务逻辑提供服务为目标。相当多l粒度的权限问题因其极其独特而不具通用意义Q它们也能被理解为是“业务逻辑”的一部分。比如,要求Q“合同资源只能被它的创徏者删除,与创同l的用户可以修改Q所有的用户能够览”。这既可以认为是一个细_度的权限问题,也可以认为是一个业务逻辑问题。在q里它是业务逻辑问题Q在整个权限pȝ的架构设计之中不予过多考虑。当Ӟ权限pȝ的架构也必须要能支持q样的控制判断。或者说Q系l提供够多但不是完全的控制能力。即Q设计原则归lؓQ“系l只提供_粒度的权限Q细_度的权限被认ؓ是业务逻辑的职责”?br />需要再ơ强调的是,q里表述的权限系l仅是一个“不完全”的权限pȝQ即Q它不提供所有关于权限的问题的解x法。它提供一个基Qƈ解决那些h“共性”的(或者说_粒度的)部分。在q个基础之上Q根据“业务逻辑”的独特权限需求,~码实现剩余部分(或者说l粒度的)部分Q才完整。回到权限的问题公式Q通用的设计仅解决了Who+What+How 的问题,其他的权限问题留l业务逻辑解决?br />概念Q?br />WhoQ权限的拥用者或MQPrincipal、User、Group、Role、Actor{等Q?br />WhatQ权限针对的对象或资源(Resource、ClassQ?br />HowQ具体的权限QPrivilege, 正向授权与负向授权)?br />RoleQ是角色Q拥有一定数量的权限?br />OperatorQ操作。表明对What的How 操作?br />说明Q?br />UserQ与 Role 相关Q用户仅仅是Ua的用P权限是被分离出去了的。User是不能与 Privilege 直接相关的,User 要拥有对某种资源的权限,必须通过Roled联。解?Who 的问题?br />ResourceQ就是系l的资源Q比如部门新闻,文{各U可以被提供l用戯问的对象。资源可以反向包含自w,x状结构,每一个资源节点可以与若干指定权限cd相关可定义是否将其权限应用于子节炏V?br />PrivilegeQ是Resource Related的权限。就是指Q这个权限是l定在特定的资源实例上的。比如说部门新闻的发布权限,叫做"部门新闻发布权限"。这p明,该Privilege是一个发布权限,而且是针寚w门新闻这U资源的一U发布权限。Privilege是由Creator在做开发时q定的。权限,包括pȝ定义权限和用戯定义权限用户自定义权限之间可以指定排斥和包含关系(如:dQ修改,理三个权限Q管?权限 包含 前两U权?。Privilege ?删除" 是一个抽象的名词Q当它不与Q何具体的 Object ?Resource l定在一h是没有Q何意义的。拿新闻发布来说Q发布是一U权限,但是只说发布它是毫无意义的。因Z知道发布可以操作的对象是什么。只有当发布与新ȝ合在一hQ才会生真正的 Privilege。这是 Privilege Instance。权限系l根据需求的不同可以延生很多不同的版本?br />RoleQ是_粒度和l粒?业务逻辑)的接口,一个基于粗_度控制的权限框架YӞ对外的接口应该是RoleQ具体业务实现可以直接承或拓展丰富Role的内容,Role不是如同User或Group的具体实体,它是接口概念Q抽象的通称?br />GroupQ用LQ权限分配的单位与蝲体。权限不考虑分配l特定的用户。组可以包括l?以实现权限的l承)。组可以包含用户Q组内用L承组的权限。Group要实现ѝ即在创建时必须要指定该Group的Parent是什么Group。在_粒度控制上Q可以认为,只要某用L接或者间接的属于某个Group那么它就具备q个Group的所有操作许可。细_度控制上,在业务逻辑的判断中QUser仅应x其直接属于的GroupQ用来判断是否“同l?。Group是可l承的,对于一个分U的权限实现Q某个Group通过“扎쀝就已经直接获得了其父Group所拥有的所有“权限集合”,对这个Group而言Q需要与权限建立直接兌的,仅是它比起其父Group需要“扩展”的那部分权限。子l承父l的所有权限,规则来得更简单,同时意味着理更容易。ؓ了更q一步实现权限的l承Q最直接的就是在Group上引入“父子关pZ?br />User与Group是多对多的关pR即一个User可以属于多个Group之中Q一个Group可以包括多个User。子Group与父Group是多对一的关pROperator某种意义上类gResource + Privilege概念Q但q里的Resource仅包括Resource Type不表CResource Instance。Group 可以直接映射l织l构QRole 可以直接映射l织l构中的业务角色Q比较直观,而且也够灵zRRole对系l的贡献实质上就是提供了一个比较粗颗粒的分配单位?/p>

Group与Operator是多对多的关pR各概念的关pdC如下:
解释Q?br />Operator的定义包括了Resource Type和Method概念。即QWhat和How的概c之所以将What和Howl定在一起作Z个Operator概念而不是分开建模再徏立关联,q是因ؓ很多的How对于某What才有意义。比如,发布操作Ҏd象才有意义,对用户对象则没有意义?br />How本n的意义也有所不同Q具体来_对于每一个What可以定义NU操作。比如,对于合同q类对象Q可以定义创建操作、提交操作、检查冲H操作等。可以认为,How概念对应于每一个商业方法。其中,与具体用戯n份相关的操作既可以定义在操作的业务逻辑之中Q也可以定义在操作别。比如,创徏者的览视图与普通用L览视图要求内容不同。既可以在外部定义两个操作方法,也可以在一个操作方法的内部Ҏ具体逻辑q行处理。具体应用哪一U方式应依据实际情况q行处理?br />q样的架构,应能在易于理解和理的情况下Q满绝大部分粗_度权限控制的功能需要。但是除了粗_度权限Q系l中必然q会包括无数对具体Instance的细_度权限。这些问题,被留l业务逻辑来解冻Iq样的考虑Z以下两点Q?br />一斚wQ细_度的权限判断必要在资源上建模权限分配的支持信息才可能得以实现。比如,如果要求创徏者和普通用LC同的信息内容Q那么,资源本n应该有其创徏者的信息。另一斚wQ细_度的权限常常具有相当大的业务逻辑相关性。对不同的业务逻辑Q常常意味着完全不同的权限判定原则和{略。相比之下,_粒度的权限更具通用性,其实现Z个架构,更有重用价|而将l粒度的权限判断实现Z个架构别的东西显得繁琐,而且不是那么的有必要Q用定制的代码来实现更z,更灵zR?br />所以细_度控制应该在底层解冻IResource在实例化的时候,必需指定Owner和GroupPrivilege在对Resourceq行操作时也必然会确定约束类型:I竟是OwnerOKq是GroupOKq是AllOK。Group应和Role严格分离User和Group是多对多的关p,Group只用于对用户分类Q不包含MRole的意义;Role只授予UserQ而不是Group。如果用户需要还没有的多UPrivilege的组合,必须新增Role。Privilege必须能够讉KResourceQ同时带User参数Q这h限控制就完备了?br />思想Q?br />权限pȝ的核心由以下三部分构成:1.创造权限,2.分配权限Q?.使用权限Q然后,pȝ各部分的主要参与者对照如下:1.创造权?- Creator创造,2.分配权限 - Administrator 分配Q?.使用权限 - UserQ?br />1. Creator 创?PrivilegeQ?Creator 在设计和实现pȝ时会划分Q一个子pȝ或称为模块,应该有哪些权限。这里完成的?Privilege ?Resource 的对象声明,q没有真正将 Privilege 与具体Resource 实例联系在一P形成Operator?br />2. Administrator 指定 Privilege ?Resource Instance 的关联。在q一步, 权限真正与资源实例联pd了一P 产生了OperatorQPrivilege InstanceQ。Administrator利用Operatorq个基本元素Q来创造他理想中的权限模型。如Q创Ԍ创徏用户l,l用L分配用户Q将用户l与角色兌{等...q些操作都是?Administrator 来完成的?br />3. User 使用 Administrator 分配l的权限M用各个子pȝ。Administrator 是用P在他的心目中有一个比较适合他管理和l护的权限模型。于是,E序员只要回{一个问题,是什么权限可以访问什么资源,也就是前面说?Operator。程序员提供 Operator 意味着l系l穿上了盔甲。Administrator 可以按照他的意愿来建立他所希望的权限框架可以自行增加,删除Q管理Resource和Privilege之间关系。可以自行设定用户User和角色Role的对应关pR?如果?Creator看作?Basic 的发明者, Administrator 是 Basic 的用者,他可以做一些脚本式的编E? Operator是这个系l中最关键的部分,它是一个纽带,一个系在ProgrammerQAdministratorQUser之间的纽带?br />用一个功能模块来举例子?br />一Q徏立角色功能ƈ做分配:
1Q如果现在要做一个员工管理的模块(即Resources)Q这个模块有三个功能Q分别是Q增加,修改Q删除。给q三个功能各自分配一个IDQ这个ID叫做功能代号Q?br />Emp_addEmpQEmp_deleteEmpQEmp_updateEmp?br />2Q徏立一个角?Role)Q把上面的功能代码加到这个角色拥有的权限中,q保存到数据库中。角色包括系l管理员Q测试h员等?br />3Q徏立一个员工的账号Qƈ把一U或几种角色赋给q个员工。比如说q个员工既可以是公司理人员Q也可以是测试h员等。这样他d到系l中会只看C拥有权限的那些模块?br />二.把n份信息加到Session中?br />dӞ先到数据库中查找是否存在q个员工Q如果存在,再根据员工的sn查找员工的权限信息,把员工所有的权限信息都入C个Hashmap中,比如把上面的Emp_addEmp{放到这个Hashmap中。然后把Hashmap保存在一个UserInfoBean中。最后把q个UserInfoBean攑ֈSession中,q样在整个程序的q行q程中,pȝ随时都可以取得这个用Lw䆾信息?br />三.Ҏ用户的权限做Z同的昄?br />可以Ҏ当前员工的权限和l这个菜单分配的“功能ID”判断当前用h否有打开q个菜单的权限。例如:如果保存员工权限的Hashmap中没有这三个ID的Q何一个,那这个菜单就不会昄Q如果员工的Hashmap中有M一个IDQ那q个菜单都会昄?br />对于一个新ȝl?Resouce)Q假讑֮有这L功能(Privilege)Q查看,发布Q删除,修改Q假讑֯于删除,?新闻pȝ理者只能删除一月前发布的,而超U管理员可删除所有的q样的限Ӟq属于业务逻辑(Business logic)Q而不属于用户权限范围。也是说权限负责有没有删除的PermissionQ至于能删除哪些内容应该ҎUserRole or UserGroup来决?当然lUserRole or UserGroup分配权限时就应该包含上面两条业务逻辑)?br />一个用户可以拥有多U角Ԍ但同一时刻用户只能用一U角色进入系l。角色的划分Ҏ可以Ҏ实际情况划分Q按部门或机构进行划分的Q至于角色拥有多权限,q就看系l管理员赋给他多的权限了。用户—角艜y权限的关键是角艌Ӏ用L录时是以用户和角色两U属性进行登录的Q因Z个用户可以拥有多U角Ԍ但同一时刻只能扮演一U角ԌQ根据角色得到用L权限Q登录后q行初始化。这其中的技巧是同一时刻某一用户只能用一U角色进行登录?br />针对不同的“角艜y动态的建立不同的组Q每个项目徏立一个单独的GroupQ对于新的项目,建立新的 Group 卛_。在权限判断部分Q应在商业方法上予以控制。比如:不同用户的“操作能力”是不同?_粒度的控制应能满要求)Q不同用L“可视区域”是不同?体现在对被操作的对象的权限数据,是否允许当前用户讉KQ这需要对业务数据建模的时候考虑权限控制需??/p>

扩展性:
有了用户/权限理的基本框ӞWho(User/Group)的概忉|不会l常需要扩展的。变化的可能是系l中引入新的 What (新的Resourcecd)或者新的How(新的操作方式)。那在三个基本概念中Q仅在Permission上进行扩展是不够的。这L设计中Permission实质上解决了How 的问题,卌CZ“怎样”的操作。那么这个“怎样”是在哪一个层ơ上的定义呢Q将Permission定义在“商业方法”别比较合适。比如,发布、购买、取消。每一个商业方法可以意味着用户q行的一个“动作”。定义在商业逻辑的层ơ上Q一斚w保证了数据访问代码的“纯z性”,另一斚w在功能上也是“够”的。也是_Ҏ低层ơ,能自q讉K数据Q对更高层次Q也能比较精l的控制权限?br />定了Permission定义的合适层ơ,更进一步,能够发现Permission实际上还隐含了What的概c也是_对于What的How操作才会是一个完整的Operator。比如,“发布”操作,隐含了“信息”的“发布”概念,而对于“商品”而言发布操作是没有意义的。同LQ“购买”操作,隐含了“商品”的“购买”概c这里的l定q体现在大量通用的同名的操作上,比如Q需要区分“商品的删除”与“信息的删除”这两个同名为“删除”的不同操作?br />提供权限pȝ的扩展能力是在Operator (Resource + Permission)的概念上q行扩展。Proxy 模式是一个非常合适的实现方式。实现大致如下:在业务逻辑?EJB Session Facade [Stateful SessionBean]?Q取得该商业Ҏ的MethodnameQ再ҎClassname?Methodname 索Operator 数据Q然后依据这个Operator信息和Stateful中保存的User信息判断当前用户是否具备该方法的操作权限?br />应用?EJB 模式下,可以定义一个很明确?Business层次Q而一个Business 可能意味着不同的视图,当多个视N对应于一个业务逻辑的时候,比如QSwing Client以及 Jsp Client 讉K的是同一?EJB 实现?Business。在 Business 层上应用权限较能提供集中的控制能力。实际上Q如果权限系l提供了查询能力Q那么会发现Q在视图层次已经可以不去理解权限Q它只需要根据查询结果控制界面就可以了?br />灉|性:
Group和RoleQ只是一U辅助实现的手段Q不是必需的。如果系l的Role很多Q逐个授权q背了“简单,方便”的目的Q那引入GroupQ将权限相同的Rolel成一个Groupq行集中授权。Role也一P是某一cOperator的集合,是ؓ了简化针对多个Operator的操作?br />Role把具体的用户和组从权限中解放出来。一个用户可以承担不同的角色Q从而实现授权的灉|性。当ӞGroup也可以实现类似的功能。但实际业务中,Group划分多以行政l织l构或业务功能划分;如果Z权限理一个用户加入不同的l,会导致管理的复杂性?br />Domain的应用。ؓ了授权更灉|Q可以将Where或者Scope抽象出来Q称之ؓDomainQ真正的授权是在Domain的范围内q行Q具体的Resource分属于不同的Domain。比如:一个新L构有国内与国外两大分支,两大分支内又都有不同的资源(体育cR生zȝ、时事政ȝQ。假如所有国内新ȝ权限规则都是一LQ所有国外新ȝ权限规则也相同。则可以建立两个域,分别授权Q然后只要将各类新闻与不同的域关联,受域上的权限控制Q从而之简化?br />权限pȝq应该考虑功能性的授权与资源性的授权分开。很多系l都只有对系l中的数据(资源Q的l护有权限控Ӟ但没有对pȝ功能的权限控制?br />权限pȝ最好是可以分层理而不是集中管理。大多客户希望不同的部门能且仅能理光门内部的事务Q而不是什么都需要一个集中的Administrator或Administratorsl来理。虽然你可以不同部门的人都加入Administratorsl,但他们的权限q大Q可以管理整个系l资源而不是该部门资源?br />正向授权与负向授权:正向授权在开始时假定M没有M权限Q然后根据需要授予权限,适合于权限要求严格的pȝ。负向授权在开始时假定M有所有权限,然后某些特D权限收回?br />权限计算{略Q系l中UserQGroupQRole都可以授权,权限可以有正负向之分Q在计算用户的净权限时定义一套策略?br />pȝ中应该有一个集中管理权限的AccessServiceQ负责权限的l护Q业务管理员、安全管理模块)与用(最l用戗各功能模块Q,该AccessService在实现时要同时考虑一般权限与Ҏ权限。虽然在具体实现上可以有很多Q比如用Proxy模式Q但应该使这些Proxy依赖于AccessService。各模块功能中调用AccessService来检查是否有相应的权限。所以说Q权限管理不是安全管理模块自׃个h的事情,而是与系l各功能模块都有关系。每个功能模块的开发h员都应该熟悉安全理模块Q当Ӟ也要从业务上熟悉本模块的安全规则?br />技术实玎ͼ
1Q表单式认证Q这是常用的Q但用户到达一个不被授权访问的资源ӞWeb容器发
Z个html面Q要求输入用户名和密码?br />2Q一个基于Servlet Sign in/Sign out来集中处理所有的RequestQ缺Ҏ必须由应用程序自己来处理?br />3Q用Filter防止用户讉K一些未被授权的资源QFilter会截取所有Request/ResponseQ?br />然后攄一个验证通过的标识在用户的Session中,然后Filter每次依靠q个标识来决定是否放行Response?br />q个模式分ؓQ?br />Gatekeeper Q采取Filter或统一Servlet的方式?br />AuthenticatorQ?在Web中用JAAS自己来实现?br />用户资格存储LDAP或数据库Q?br />1. Gatekeeper拦截查每个到辑֏保护的资源。首先检查这个用h否有已经创徏
好的Login SessionQ如果没有,Gatekeeper 查是否有一个全局的和Authenticator相关的sessionQ?br />2. 如果没有全局的sessionQ这个用戯导向到Authenticator的Sign-on 面Q?br />要求提供用户名和密码?br />3. Authenticator接受用户名和密码Q通过用户的资格系l验证用戗?br />4. 如果验证成功QAuthenticator创Z个全局Login sessionQƈ且导向Gatekeeper
来ؓq个用户在他的web应用中创Z个Login Session?br />5. Authenticator和Gatekeepers联合分nCookieQ或者用Tokens在Query字符里?/p>

———————————————————————————————————?/p>

权限表及相关内容大体可以用六个表来描qͼ如下Q?br />1 角色Q即用户l)表:包括三个字段QIDQ角色名Q对该角色的描述Q?br />2 用户表:包括三个或以上字D,IDQ用户名Q对该用L描述Q其它(如地址、电话等信息Q;
3 角色-用户对应表:该表记录用户与角色之间的对应关系Q一个用户可以隶属于多个角色Q一个角色组也可拥有多个用户。包括三个字D,IDQ角色IDQ用户IDQ?
4 权限列表Q该表记录所有要加以控制的权限,如录入、修攏V删除、执行等Q也包括三个字段QIDQ名Uͼ描述Q?
5 权限-角色对应表:该表记录权限与角色之间的对应关系Q一个角色可以拥有多个权限,一个权限也可以隶属多个角色。包括三个字D,ID, 角色IDQ权限IDQ?/p>

xzc 2006-09-18 20:48 发表评论
]]>
J2EE开发之常用开源项目介l?/title><link>http://m.tkk7.com/xzclog/archive/2006/09/11/68945.html</link><dc:creator>xzc</dc:creator><author>xzc</author><pubDate>Mon, 11 Sep 2006 05:41:00 GMT</pubDate><guid>http://m.tkk7.com/xzclog/archive/2006/09/11/68945.html</guid><wfw:comment>http://m.tkk7.com/xzclog/comments/68945.html</wfw:comment><comments>http://m.tkk7.com/xzclog/archive/2006/09/11/68945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/xzclog/comments/commentRss/68945.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/xzclog/services/trackbacks/68945.html</trackback:ping><description><![CDATA[ <div twffan="done">主要我所了解的J2EE开发的框架或开源项目做个介l?可以Ҏ需求选用适当的开源组件进行开?主要q是以Spring为核?也ȝ了一些以前web开发常用的开源工具和开源类?/div> <div twffan="done"> </div> <div twffan="done">1持久?</div> <div style="TEXT-INDENT: 21pt" twffan="done">1)Hibernate</div> <div style="TEXT-INDENT: 21pt" twffan="done">q个不用介绍?用的很频J?用的比较多的是映?包括l承映射和父子表映射</div> <div style="TEXT-INDENT: 21pt" twffan="done">对于DAO在这里介l个在它基础上开发的包bba96,目前最新版本是bba96 2.0它对Hibernateq行了封? 查询功能包括执行hsql或者sql查询/更新的方法,如果你要多层ơ逻辑的条件查询可以自q装QueryObject.可以参考它做HibernateDAO.也可以直接利用它</div> <div style="TEXT-INDENT: 21pt" twffan="done">2) iBATIS</div> <div style="TEXT-INDENT: 21pt" twffan="done">另一个ORM工具,没有Hibernate那么集成,自由度比较大,所以用时普遍性能上比Hibernate要快一?</div> <div twffan="done">2:SpringMVC</div> <div twffan="done"> <span twffan="done">       </span>原理说明和快速入?</div> <div twffan="done"> <span twffan="done">       </span>配置文g?</div> <div style="TEXT-INDENT: 21pt" twffan="done">Spring的配|文仉认ؓWEB-INF/xxxx-servelet.xm其中xxx为web.xml中org.springframework.web.servlet.DispatcherServlet的servlet-name?/div> <div twffan="done"> <span twffan="done">       Action</span>分发:</div> <div style="TEXT-INDENT: 21pt" twffan="done">Spring按照配|文件定义的URLQMapping到具体Controllerc,再根据URL里的action= xxx或其他参敎ͼ利用反射调用Controller里对应的ActionҎ?/div> <div style="TEXT-INDENT: 21pt" twffan="done">输入数据l定:</div> <div style="TEXT-INDENT: 21pt" twffan="done">Spring提供Binder 通过名字的一一对应反射l定PojoQ也可以直接从request.getParameter()取数据?/div> <div style="TEXT-INDENT: 21pt" twffan="done">输入数据验证</div> <div style="TEXT-INDENT: 21pt" twffan="done">Sping 提供了Validator接口当然q可以用开源的Commons-Validaor支持最?/div> <div style="TEXT-INDENT: 21pt" twffan="done">Interceptor(拦截?</div> <div style="TEXT-INDENT: 21pt" twffan="done">Spring的拦截器提供接口需要自q?在这点不如WebWork做的?全面 </div> <div twffan="done"> <span twffan="done">       (</span>q里提一下WebWork和Struts的区别最主要的区别在于WebWork在徏立一个Action时是新New一个对象而Struts是SingleMoule所有的都承它的一个Action,所以根据项目需要合适的选择.)</div> <div twffan="done">3:View?/div> <div style="TEXT-INDENT: 21pt" twffan="done">1) 标签?JSP2.0/JSTL</div> <div style="TEXT-INDENT: 21pt" twffan="done">׃Webwork或Spring的标{实很有限,一般view层用JSTL标签,而且据说JSTL设计很好速度是所有标{中最快的使用h也很?/div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">2) 富客L:DOJO Widgets, YUI(YahooUI),FCKEditor, Coolest日历控g</div> <div style="TEXT-INDENT: 21pt" twffan="done">Dojo主要提供Tree, Tab{富客户端控?可以用其q行辅助客户端开?/div> <div style="TEXT-INDENT: 21pt" twffan="done">YahooUI和DOJO一样它有自q一套javascript调试控制?主要支持ajax开发也有很多Tree,Table,Menu{富客户端控?/div> <div style="TEXT-INDENT: 21pt" twffan="done">FCKEditor 最行的文本编辑器</div> <div style="TEXT-INDENT: 21pt" twffan="done">Coolest日历控g 目前很多日历控g可用,集成在项目中也比较简?q个只是其中的一?界面不错的说..</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">3) JavaScript:Prototype.js</div> <div style="TEXT-INDENT: 21pt" twffan="done">Prototype.js作ؓjavascript的成功的开源框Ӟ装了很多好用的功能,通过它很Ҏ~写AJAX应用,现在AJAX技术逐渐成熟,框架资源比较丰富,比如YUI,DWR{等,也是因ؓJavaScript没有合适的调试工具,所以没有必要从零开始编写AJAX应用,个h认ؓ多用一些成熟的Ajax框架实现无刷新更新页面是不错的选择.</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">4)表格控g:Display Tag ,Extreme Table</div> <div style="TEXT-INDENT: 21pt" twffan="done">q两个的功能差不?都是View层表格的生成,界面也比较相?可以导出Excel,Pdf,对Spring支持很容?</div> <div style="TEXT-INDENT: 21pt" twffan="done">相比较而言比较推荐ExtremeTable,它的设计很好功能上比DisplayTag多一?支持Ajax,装了一些拦截器,而且最斚w的是在主wiki中有详细的中文用文?</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">5):OSCache</div> <div style="TEXT-INDENT: 21pt" twffan="done">OSCache是OpenSymphonyl织提供的一个J2EE架构中Web应用层的~存技术实现组?Cache是一U用于提高系l响应速度、改善系l运行性能的技术。尤其是在Web应用中,通过~存面的输出结果,可以很显著的改善pȝ的稳定性和q行性能?/div> <div style="TEXT-INDENT: 21pt" twffan="done">它主要用在处理短旉或一定时间内一些数据或面不会发生变化,或将一些不变的l计报表,~冲在内?可以充分的减L务器的压?防治负蝲q,快速重启服务器(通过盘~存).</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">6)SiteMesh</div> <div style="TEXT-INDENT: 21pt" twffan="done">sitemesh应用Decorator模式主要用于提高面的可l护性和复用性,其原理是用Filter截取request和response,把页面组件head,content,bannerl合Z个完整的视图。通常我们都是用include标签在每个jsp面中来不断的包含各Uheader, stylesheet, scripts and footerQ现在,在sitemesh的帮助下Q我们删掉他们轻松达到复合视图模?</div> <div style="TEXT-INDENT: 21pt" twffan="done">Sitemesh也是<span twffan="done"> OpenSymphony</span>的一个项目现在最q的版本?.2,目前OpenSymphony自从04q就没有更新的版本了..感觉它还是比较有创新的一U页面组装方? OpenSymphony开源组l的代码一般写的比较漂?可以改其源代码对自己的项目进行适配.</div> <div style="TEXT-INDENT: 21pt" twffan="done">试发现Sitemeshq存在一些问?比如中文问题,它的默认~码是iso-8859-1在用时候需要做一些改?</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">7)CSS,XHTML</div> <div style="TEXT-INDENT: 21pt" twffan="done">q个不用说了,遵@W3C标准的web面开?</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">8)分页标签: pager-tagliblg</div> <div style="TEXT-INDENT: 21pt" twffan="done">Pager-taglib 是一套分|{ֺQ可以灵zd实现多种不同风格的分导航页面,q且可以很好的与服务器分逻辑分离.使用h也比较简?</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div style="TEXT-INDENT: 21pt" twffan="done">9)Form: Jodd Form taglib</div> <div style="TEXT-INDENT: 21pt" twffan="done">Jodd Form taglib使用比较?只要?lt;form>的头以<jodd:form bean= "mybean">包住</div> <div twffan="done">׃自动l定mybean, 自动l定mybean的所有同名属性到普通html标记input, selectbox, checkbox,radiobox.....在这些input框里不用再写M代码?/div> <div twffan="done"> <span twffan="done">       </span> </div> <div style="TEXT-INDENT: 21pt" twffan="done">10)Ajax:DWR</div> <div twffan="done"> <span twffan="done">       J2EE</span>应用最常用的ajax框架</div> <div twffan="done"> <span twffan="done">       </span> </div> <div twffan="done"> <span twffan="done">       11)</span>报表 图表</div> <div style="MARGIN-LEFT: 21pt" twffan="done">Eclipse BIRT功能比较强大,也很庞大..好几?span twffan="done">M,一般没有特别需求或别的图表设计软g可以解决的不用它</span></div> <div style="TEXT-INDENT: 21pt" twffan="done">JasperReports+ iReport是一个基于Java的开源报表工P它可以在Java环境下像其它IDE报表工具一h制作报表。JasperReports支持PDF、HTML、XLS、CSV和XML文g输出格式。JasperReports是当前Java开发者最常用的报表工兗?/div> <div style="TEXT-INDENT: 21pt" twffan="done">JFreeChart主要是用来制作各U各L图表Q这些图表包括:饼图、柱状图(普通柱状图以及堆栈q?、线图、区域图、分布图、؜合图、甘特图以及一些A表盘{等?/div> <div twffan="done"> <span twffan="done">      琴棋报表,国?.重点推荐,适合中国的情?开放源代码Q用完全免贏V纯JAVA开发,适用多种pȝq_。特别适合B/Sl构的系l。官方网站有其优点介l?看来用它q是不错的选择,最重要的是支持国呵呵</span> </div> <div twffan="done"> </div> <div twffan="done">4:权限控制: Acegi</div> <div style="TEXT-INDENT: 21pt" twffan="done">Acegi是Spring Framework 下最成熟的安全系l,它提供了强大灉|的企业安全服务Q如完善的认证和授权机制QHttp资源讉K控制QMethod 调用讉K控制{等,支持CAS</div> <div twffan="done">(耉大学的单点登陆技?q个单点登陆Ҏ比较出名.我也q行q配|?可以Ҏ目需?如果用户分布在不同的地方不同的系l通用一套登陆口令可以用它进行解?一般注册机登陆机就是这栯决的)</div> <div twffan="done"> <span twffan="done">       Acegi</span>只是于Springl合最好的安全框架,功能比较强大,当然q有一些其他的安全框架,q里列D一些比较流行的是我从网上找到的,使用Ҏ看其官方文档把?/div> <div style="TEXT-INDENT: 21pt" twffan="done">JAAS, Seraph, jSai - Servlet Security, Gabriel, JOSSO, Kasai, jPAM, OpenSAML都是些安全控制的框架..真够多的呵呵</div> <div twffan="done"> </div> <div twffan="done">5:全文?/div> <div twffan="done"> <span twffan="done">       1) Lucene</span> </div> <div twffan="done"> <span twffan="done">       Lucene</span>是一套全文烦引接?可以通过它将数据q行倒排文g处理加入索引文g,它的索引速度和查询速度是相当快?查询百万U数据毫U出结?现在最火的Apache开源项?版本更新速度很快现在已经C2.0,每个版本更新的都比较?目前用的最多的版本应该?.4.3,但它有个不太斚w的地方单个烦引文件有2G文g限制,现在2.0版本没有q个限制,我研I的比较?它的扩展性比较好,可以很方面的扩充其分词接口和查询接口.</div> <div twffan="done"> <span twffan="done">       </span>Z它的开发的pȝ很多,比如最常用的Eclipse的搜索功?q有一些开源的软g比如Compass,Nutch,Lius,q有我最q做的InSearch(企业UFTP文g|页搜烦)</div> <div twffan="done">6:公共Utilc?/div> <div twffan="done"> <span twffan="done">       </span>主要是Jakarta-Commonscd,其中最常用得是以下几个cd</div> <div style="TEXT-INDENT: 21pt" twffan="done">1) Jakarta-Commons-Language</div> <div style="TEXT-INDENT: 21pt" twffan="done"> <span twffan="done">       </span>最常用得类是StringUtilsc?提供了用的字符串处理的常用Ҏ效率比较?/div> <div style="TEXT-INDENT: 21pt" twffan="done">2) Jakarta-Commons-Beantuils</div> <div style="TEXT-INDENT: 21pt" twffan="done"> <span twffan="done">       </span>主要用Beantuils能够获得反射函数装及对嵌套属性,map,array型属性的d?/div> <div style="TEXT-INDENT: 21pt" twffan="done">3) Jakarta-Commons-Collections</div> <div style="TEXT-INDENT: 21pt" twffan="done"> <span twffan="done">       </span>里面有很多UtilsҎ</div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div twffan="done">7 日志理</div> <div twffan="done"> <span twffan="done">       Log4J</span> </div> <div twffan="done"> <span twffan="done">       </span>d是日志记?分ؓInfo,Warn,error几个层次可以更好的调试程?/div> <div twffan="done"> </div> <div twffan="done">8 开源的J2EE框架</div> <div twffan="done"> <span twffan="done">       1) Appfuse</span> </div> <div twffan="done"> <span twffan="done">              Appfuse</span>是Matt Raible 开发的一个指导性的入门UJ2EE框架, 它对如何集成行的Spring、Hibernate、iBatis、Struts、Xdcolet、JUnit{基框架l出了示? 在持久层QAppFuse采用了Hibernate O/R映射工具Q在容器斚wQ它采用了Spring,用户可以自由选择Struts、Spring/MVCQWebworkQJSFq几个Web框架?/div> <div twffan="done"> <span twffan="done">       </span> </div> <div twffan="done"> <span twffan="done">       2) SpringSide</span> </div> <div twffan="done"> <span twffan="done">       .SpringSide</span>较完整的演示了企业应用的各个斚w,是一个电子商务网站的应用 SpringSide也大量参考了Appfuse中的优秀l验。最重要的是它是国内的一个开源项?可以了解到国内现在的一些实际技术动态和方向很有指导意义?/div> <div twffan="done"> </div> <div twffan="done">9:模版 Template </div> <div style="TEXT-INDENT: 21pt" twffan="done">主要有Veloctiy和Freemarker</div> <div style="TEXT-INDENT: 21pt" twffan="done">模板用Servlet提供的数据动态地生成 HTML。编译器速度快,输出接近静态HTML<span twffan="done">             </span>面的速度?/div> <div style="TEXT-INDENT: 21pt" twffan="done"> </div> <div twffan="done">10:工作?/div> <div twffan="done"> <span twffan="done">       </span>我所知道比较出名的主要有JBpm Shark Osworkflow,׃对它没有q多的研I所以还不是很清楚之间有什么区?</div> <div twffan="done"> </div> <div twffan="done">目理软g</div> <div style="TEXT-INDENT: 21pt" twffan="done">dotProject:是一个基于LAMP的开源项目管理Y件。最出名的项目管理Y?/div> <div style="TEXT-INDENT: 21pt" twffan="done">JIRA: 目计划QQ务安排,错误理</div> <div style="TEXT-INDENT: 21pt" twffan="done">Bugzilla:提交和管理bug,和eclipse集成,可以通过安装MyEclipse配置一下即可?/div> <div style="MARGIN-LEFT: 52.5pt; TEXT-INDENT: -31.5pt" twffan="done">BugFree借鉴微Y公司软g研发理念、免费开放源代码、基于Web的精版Bug理</div> <div style="TEXT-INDENT: 21pt" twffan="done">CVS:q个׃介绍了都在用.</div> <div style="MARGIN-LEFT: 47.25pt; TEXT-INDENT: -26.25pt" twffan="done">SVN: SubVersion已逐渐越CVSQ更适应于JavaEE的项目。Apache用了它很久后QSourceforge刚刚推出SVN的支持?/div> <div style="MARGIN-LEFT: 47.25pt; TEXT-INDENT: -26.25pt" twffan="done">试用例:主要JUnit单元试,~写TestCase,Spring也对Junit做了很好的支?/div> <div twffan="done"> </div> <div twffan="done">后记:</div> <div twffan="done"> <span twffan="done">       </span>以SpringZ的应用开发可选用的组件中间g真是D~ؕ,所以针对不同的目需求可以利用不同的开源品解?比如用Spring+Hibernate/ iBATIS或Spring+WebWork+Hibernate/ iBATIS或Spring+Struts+Hibernate/ iBATIS,合理的框架设计和代码复用设计寚w目开发效率和E序性能有很大的提高,也有利于后期的维?</div> <img src ="http://m.tkk7.com/xzclog/aggbug/68945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/xzclog/" target="_blank">xzc</a> 2006-09-11 13:41 <a href="http://m.tkk7.com/xzclog/archive/2006/09/11/68945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://127ht.com" target="_blank">ѲĻ</a>| <a href="http://zhnetbar.com" target="_blank">AëƬA</a>| <a href="http://meijibear.com" target="_blank">ƷþþþþþѼձ</a>| <a href="http://takiku.com" target="_blank">ŮƵ</a>| <a href="http://mm1131.com" target="_blank">99þ99ȾƷѹۿ</a>| <a href="http://shbailongma.com" target="_blank">þþ޾Ʒ</a>| <a href="http://hengzekang.com" target="_blank">Ʒtvþþþþþ</a>| <a href="http://sjmthanks.com" target="_blank">޳ɫwwwþվҹ</a>| <a href="http://www-yhty.com" target="_blank">igaoƵ</a>| <a href="http://cnlawedu.com" target="_blank">츾AVӰ</a>| <a href="http://331927.com" target="_blank">ĻѲ</a>| <a href="http://aqdav22.com" target="_blank">ŷ޵һa߹ۿ</a>| <a href="http://wowo123.com" target="_blank">þùɫAVѹۿ</a>| <a href="http://121fj.com" target="_blank">˳ɵӰ߹ۿ</a>| <a href="http://xbooktxt.com" target="_blank">Ұ߹ۿ</a>| <a href="http://otkaxap.com" target="_blank">Ļһ</a>| <a href="http://5666my.com" target="_blank">vƬ߹ۿƷ</a>| <a href="http://dzhankong.com" target="_blank">һ˿Ƶ</a>| <a href="http://yjszhukao.com" target="_blank">ƷƬ߹ۿ</a>| <a href="http://zs0451.com" target="_blank">xxxxƵѲֱ</a>| <a href="http://aiwoqi.com" target="_blank">޾ƷԴ</a>| <a href="http://hnlchb.com" target="_blank">ҹҹƵ</a>| <a href="http://4922000.com" target="_blank">ҹС˵69</a>| <a href="http://4438xx21.com" target="_blank">þù˾Ʒ</a>| <a href="http://aidannis.com" target="_blank">ĻȫѰ</a>| <a href="http://kanboy.com" target="_blank">91lƷ</a>| <a href="http://266hd.com" target="_blank">ѿƵվ</a>| <a href="http://jiujiujingpin.com" target="_blank">޴߶ר</a>| <a href="http://gxshenquan.com" target="_blank">պ߾Ʒһ</a>| <a href="http://a8g8.com" target="_blank">ҹˬˬˬŮѹۿӰԺ</a>| <a href="http://singbomb.com" target="_blank">ĻһԾ </a>| <a href="http://hbqueena.com" target="_blank">vaĻ</a>| <a href="http://7s8s.com" target="_blank">ij˾þþþӰԺѹۿ</a>| <a href="http://www-79983.com" target="_blank">þѾƷav</a>| <a href="http://116qc.com" target="_blank">Ƶһ</a>| <a href="http://vc77777.com" target="_blank">һѹۿ</a>| <a href="http://sdnuoyuan.com" target="_blank">һ91</a>| <a href="http://902578.com" target="_blank">ɫAVɫһ</a>| <a href="http://linanhotel.com" target="_blank">è˳վ߹ۿ</a>| <a href="http://njchxf.com" target="_blank">ؼëƬѹۿƵ</a>| <a href="http://ziguang1688.com" target="_blank">һ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>