隨筆-54  評論-0  文章-2  trackbacks-0
            2010年3月25日
          巴巴運動網的權限模塊總結
            因為巴巴運動網的權限設計模塊對我來說,可以實現,打算好好整理一下思路,面試時說不定還能起點作用,看了兩遍,自己總結下:
          權限定義/權限組(角色)模塊
          1.對系統的所有功能定義相應的權限
          2.由網管針對不同部門不同員工分配權限組(角色),在分配角色時,
            可以選擇該角色具有的權限
          3.權限攔截模塊
           
          具體步驟:
           1.設計權限實體
              聯合主鍵(SystemPrivilegePK),該類有module和privilage兩個屬性
           2.初始化權限
           3.設計權限組(角色)PrivilegeGroup實體,如果我們希望通過修改權限組添加或刪除權限,那么權限和角色之間的多對多關系的維護端由角色來維護
              private String groupid;
              private String name;
              private Set<SystemPrivilege> privileges = new HashSet<SystemPrivilege>();
          同時加上到數據庫表的映射
          當然由于權限和角色之間的多對多關系是雙向關聯,所以要在SystemPrivilege實體bean中加上和PrivilegeGroup實體Bean之間的映射

          4.實現權限組的添刪改
          路徑:/control/
           新建接口PrivilegeGroupService,繼承Dao<PrivilegeGroupService>,
           新建PrivilegeGroupService,繼承DaoSupport
          當然這些Bean都需要交給Spring管理,加上相應的注解即可
          5.實現權限組的分頁,這個簡單
          6.實現添加權限,分頁列表上的Action,新建Action,名稱為PrivilegeGroupManageAction,
            ①.第一個方法是AddUI,主要是顯示頁面
            接下來就是增刪該操作了(...)

          7.權限做完后要新建一個Action用于完成SystemPrivilege,權限組,超級管理員的初始化,初始化完成后點擊“確定”,進入登陸頁面


           權限模塊的核心:                        權限攔截模塊

          1.員工要訪問control開頭的路徑,必須登陸,即粗粒度的權限攔截,這是通過Fileter實現的,這里我們定義為PrivilegeFilter,先從session范圍中得到employee對象,如果對象為空,就瀏覽器重定向到登陸界面,,如果登陸了,就chain.doFilter(request,response);之后在web.xml配置,這樣就實現粗粒度的權限控制了3
          2.對于界面上的某些功能,不是每一個登陸到系統的員工對頁面的功能都有操作權限,這就是細粒度的權限攔截
          關鍵是怎樣細粒度的權限控制
          怎樣實現細粒度的權限控制?
          每點擊頁面上的按鈕,都會提交給相應的Action處理,細粒度的權限攔截就是對Action攔截,在不修改原代碼情況下,增加攔截代碼,使用的是AOP技術
           每一個功能Action都有相應的方法處理,我們用JDK5中的注解為Action中的方法注解相應的權限,因為我們有時會修改方法名稱,用注解維護起來比較方便比如:
          @Permission(module="order",privilege="modify")
          public ActionForward OrderModify(){}
           
          實現過程:
          ①.新建注解Permission,
                     @Retention(PetentionPolicy.RUNTIME)
                     @Target(ElementType.METHOD)
                       public @interface Permission{
                           String module();
                            String privilege();
                       }
                為Action中的方法,加上注解
              只有攔截到Action中的這個方法,才能實現權限攔截,現在我們的Action已經交給Spring管理,所以我們可以使用Spring的AOP技術進行權限攔截,有必要復習一下AOP的知識:
           在Action類上加一個注解如下:@Aspect,當然要使這個注解起作用,我們必須在Spring的配置文件里配置:
            <aop:aspectj-autoproxy> <!--注解解析器-->
          要實現切面編程,抽象過程體現在代碼上, 就是一個采用類來描述,要是這個類起作用,我們必須要把它交給Spring管理,很郁悶
          @Aspect@Component
          public class Interceptor{
           @Pointcut("exception(org.apache.struts.action.ActionForward  cn.itcast.web.action.. * *(org.apache.struts.actionMapping,...))")
           private void actionMethod(){}
          @Around("actionMethod")
          public Object interceptor(ProceedingJoinPoint pjp) throw Throwable{
            System.out.println("攔截到了"+pjp.getSignature().getName()+"方法");
            return pjp.proceed();
           }

          注意:
          通知:
          前置通知,在攔截的方法前加通知,這個通知執行后,被攔截的方法仍然會執行。
          所以使用環繞通知,但是這樣的攔截只能是攔截Action實現的,他不能攔截繼承自DispatchAction
          原因:Spring的動態代理技術的問題
          Spring不能對通過反射調用的方法應用上通知(Advice)
          當Spring發現我們的繼承的DispatchAction的那個類符合他攔截的要求,就會生成一個代理對象,因為無接口,默認使用cglib為這個Action生成代理對象,根據cglib生成代理對象的特點,繼承目標類,并且重寫所有非final的方法來實現
           
          注:spring只會為本類定義的方法應用通知



          posted @ 2010-04-01 07:10 d66380022| 編輯 收藏
           今天初步學習了一下Struts2,對于Struts2,企業中已應用十分廣泛,由于他是在Struts基礎上發展而來,技術上比struts高,比如struts2對同一個路徑的每個請求分別使用一個獨立Action實例對象,所有使用struts2不用考慮線程安全問題,還有就是修改下配置文件,不用重啟服務器
          1.struts2的建立過程:
          配置過程:
          1.新建web項目
          2.導入struts2類庫. [blank項目中含有最少的jar文件]
          3.配置web.xml
          <filter>[...SrutsPrepareAndExecuteFilter]
          4.寫Action類
          public class HelloWorldAction {
          public String execute(){
          System.out.println("hello world!");
          try {
          ServletActionContext.getResponse().getWriter().printf("hello!");
          } catch (Exception e) {
          e.printStackTrace();
          }
          return null ;
          }
          }
          5.創建struts.xml
          ①.struts2默認在類路徑下查找struts.xml文件
          關于struts.xml配置,可以參看struts2-blank-2.1.8.1.war解壓后的配置
          設置環境為開發模式.設置為開發模式,有利于編程和調試,
          <constant name="struts.devMode" value="true" />
          3.讓struts.xml中的Package繼承struts-default.xml中的默認包.
          所有的默認包中的元素配置就引入進來.
          4.配置默認值.
          <action name="HelloWorldAction" class="cn.itcast.struts2.helloworld.HelloWorldAction">
          <result name="success">
          <param name="location">/index.jsp</param>
          </result>
          </action>

          5.strtus2中的action不是單例的,它會為每個請求單獨分配一個action實例,所以可以在action類中聲明實體屬性.
          Struts2的Action是模型層,不是控制層,原因它是需要攜帶業務數據的.
          6.struts2中的攔截器是負責每個獨立的一項任務.例如,參數傳遞,國際化,異常處理,StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它負責攔截由<url-pattern>/*</url-pattern>指定的所有用戶請求,當用戶請求到達時,該Filter會過濾用戶的請求。
          7.在struts2的jsp中輸出數據,借助于struts-tag.tld標簽庫.該庫在[struts-core.jar/META-INF/struts-tag.tld,但是其重要作用還是用于回顯數據

          8.Struts2可以數據的范圍:ActionContext request session application
          ActionContext是數據中心,ValueStack不過是該數據中心中的一個特殊對象.
          在jsp中訪問ActionContext中的數據的話,可以使用OGNL語言.
          9.struts2中包的名字空間搜索原則:

          1.<package name="xxPkg">
          2.<package name="xxPkg" namespace="">
          3.<package name="xxPkg" namespace="/">
          4.<package name="xxPkg" namespace="/HelloWorld">

          1.和2.效果一樣,都是默認的包.
          2.都會自后向前搜索,直到找到為止,"/" 和 "/HelloWorld"唯一不同就是也可以作為搜索目錄.
          3.空包是默認包,如果每個包都沒有找到相應的action的話,就去默認包下去找.
          10.struts2中進行動態方法調用.
          http://localhost:8085/struts2/Hell/HelloWorldAction!toRewView.do
          11.struts2中使用標簽庫
          <s:form action="HelloWorldAction_doReg" [namespace=""]>
          <s:textfield name="name" label="UserName" />
          <s:submit />
          </s:form>
          namespace:如果不寫,會使用當期的名字空間.
          struts給的所有控件標簽,主要目的用于回顯數據.
          12.struts2中進行基本的校驗,需要Validateable和ValidationAware兩個接口的支持,同時還需要
          workflow攔截器的支持.
          13.在struts2中,默認的表達式語言是OGNL,Object Graphic Navigation Language(對象圖導航語言)的縮寫,它是一個開源項目。 Struts 2框架使用OGNL作為默認的表達式語言。相對EL表達式,它提供了平時我們需要的一些功能,如:支持對象方法調用,支持類靜態方法調用和值訪問,操作集合對象。例如():

          訪問值棧中的action的普通屬性: username = <s:property value="username"/>

          由于下午有公司來面試,耽誤了一些時間,老徐說明天再多補一個小時,太敬業了啊,佩服!

          posted @ 2010-03-25 16:39 d66380022| 編輯 收藏
          主站蜘蛛池模板: 长治市| 普陀区| 泾源县| 台州市| 青田县| 安平县| 西林县| 静安区| 平度市| 饶平县| 刚察县| 民和| 崇礼县| 娄底市| 双桥区| 蒙自县| 高雄县| 石景山区| 德格县| 广汉市| 兴文县| 周口市| 东阿县| 海盐县| 泗水县| 东乌珠穆沁旗| 乳山市| 达拉特旗| 武功县| 长乐市| 苗栗县| 万州区| 深州市| 新宁县| 观塘区| 新民市| 石台县| 遂平县| 宣汉县| 乐东| 中阳县|