<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

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

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

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


     權(quán)限模塊的核心:                        權(quán)限攔截模塊

    1.員工要訪問control開頭的路徑,必須登陸,即粗粒度的權(quán)限攔截,這是通過Fileter實(shí)現(xiàn)的,這里我們定義為PrivilegeFilter,先從session范圍中得到employee對象,如果對象為空,就瀏覽器重定向到登陸界面,,如果登陸了,就chain.doFilter(request,response);之后在web.xml配置,這樣就實(shí)現(xiàn)粗粒度的權(quán)限控制了3
    2.對于界面上的某些功能,不是每一個登陸到系統(tǒng)的員工對頁面的功能都有操作權(quán)限,這就是細(xì)粒度的權(quán)限攔截
    關(guān)鍵是怎樣細(xì)粒度的權(quán)限控制
    怎樣實(shí)現(xiàn)細(xì)粒度的權(quán)限控制?
    每點(diǎn)擊頁面上的按鈕,都會提交給相應(yīng)的Action處理,細(xì)粒度的權(quán)限攔截就是對Action攔截,在不修改原代碼情況下,增加攔截代碼,使用的是AOP技術(shù)
     每一個功能Action都有相應(yīng)的方法處理,我們用JDK5中的注解為Action中的方法注解相應(yīng)的權(quán)限,因?yàn)槲覀冇袝r會修改方法名稱,用注解維護(hù)起來比較方便比如:
    @Permission(module="order",privilege="modify")
    public ActionForward OrderModify(){}
     
    實(shí)現(xiàn)過程:
    ①.新建注解Permission,
               @Retention(PetentionPolicy.RUNTIME)
               @Target(ElementType.METHOD)
                 public @interface Permission{
                     String module();
                      String privilege();
                 }
          為Action中的方法,加上注解
        只有攔截到Action中的這個方法,才能實(shí)現(xiàn)權(quán)限攔截,現(xiàn)在我們的Action已經(jīng)交給Spring管理,所以我們可以使用Spring的AOP技術(shù)進(jìn)行權(quán)限攔截,有必要復(fù)習(xí)一下AOP的知識:
     在Action類上加一個注解如下:@Aspect,當(dāng)然要使這個注解起作用,我們必須在Spring的配置文件里配置:
      <aop:aspectj-autoproxy> <!--注解解析器-->
    要實(shí)現(xiàn)切面編程,抽象過程體現(xiàn)在代碼上, 就是一個采用類來描述,要是這個類起作用,我們必須要把它交給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();
     }

    注意:
    通知:
    前置通知,在攔截的方法前加通知,這個通知執(zhí)行后,被攔截的方法仍然會執(zhí)行。
    所以使用環(huán)繞通知,但是這樣的攔截只能是攔截Action實(shí)現(xiàn)的,他不能攔截繼承自DispatchAction
    原因:Spring的動態(tài)代理技術(shù)的問題
    Spring不能對通過反射調(diào)用的方法應(yīng)用上通知(Advice)
    當(dāng)Spring發(fā)現(xiàn)我們的繼承的DispatchAction的那個類符合他攔截的要求,就會生成一個代理對象,因?yàn)闊o接口,默認(rèn)使用cglib為這個Action生成代理對象,根據(jù)cglib生成代理對象的特點(diǎn),繼承目標(biāo)類,并且重寫所有非final的方法來實(shí)現(xiàn)
     
    注:spring只會為本類定義的方法應(yīng)用通知



    posted @ 2010-04-01 07:10 d66380022| 編輯 收藏
      2010年3月25日
     今天初步學(xué)習(xí)了一下Struts2,對于Struts2,企業(yè)中已應(yīng)用十分廣泛,由于他是在Struts基礎(chǔ)上發(fā)展而來,技術(shù)上比struts高,比如struts2對同一個路徑的每個請求分別使用一個獨(dú)立Action實(shí)例對象,所有使用struts2不用考慮線程安全問題,還有就是修改下配置文件,不用重啟服務(wù)器
    1.struts2的建立過程:
    配置過程:
    1.新建web項(xiàng)目
    2.導(dǎo)入struts2類庫. [blank項(xiàng)目中含有最少的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.創(chuàng)建struts.xml
    ①.struts2默認(rèn)在類路徑下查找struts.xml文件
    關(guān)于struts.xml配置,可以參看struts2-blank-2.1.8.1.war解壓后的配置
    設(shè)置環(huán)境為開發(fā)模式.設(shè)置為開發(fā)模式,有利于編程和調(diào)試,
    <constant name="struts.devMode" value="true" />
    3.讓struts.xml中的Package繼承struts-default.xml中的默認(rèn)包.
    所有的默認(rèn)包中的元素配置就引入進(jìn)來.
    4.配置默認(rèn)值.
    <action name="HelloWorldAction" class="cn.itcast.struts2.helloworld.HelloWorldAction">
    <result name="success">
    <param name="location">/index.jsp</param>
    </result>
    </action>

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

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

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

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

    posted @ 2010-03-25 16:39 d66380022| 編輯 收藏
      2010年3月24日

      在線支付時針對易寶支付的網(wǎng)關(guān)而開設(shè)的,眾所周知,易寶已是三大網(wǎng)上支付平臺之一,正好明天易寶來招聘,正好練練,呵呵,下午是面試技巧

      好好學(xué)習(xí),畢業(yè)倒計時:15

    1.支付寶是不能立即拿到現(xiàn)錢的,這也是商家喜歡在線支付的一個原因吧,在線支付是直接和銀行對接的,這樣商家可以立即拿到現(xiàn)錢,避免了和買家產(chǎn)生矛盾后,錢被封的風(fēng)險。

    下面就來實(shí)現(xiàn)在線支付吧,首先提出請求,如果通過,會得到賬號和密鑰

     我們要做的事有兩項(xiàng)                                              

      1.向支付網(wǎng)關(guān)發(fā)起請求,就是向http發(fā)起請求,所謂請求就是我們平常使用Http請求(http://www.xxx.cn/xxx.do),請求方式:Get/Post

      <form method=”” action=”https://www.yeepay.com/app-method”>

         <input name=”?”,value=””/>

         <input name=”url” value=”http://www.itcast.cn/re.do”/>

         <input name=”hmac” value=””>

         …..

        Hmac = MD5(pd_FrpId + p0_Cmd + p8_Url,key);32位,不可逆

        支付網(wǎng)關(guān):其實(shí)就是一個http路徑

      2.接收支付網(wǎng)關(guān)返回的支付結(jié)果信息

       第一次使用瀏覽器重定向技術(shù),

     把支付信息發(fā)送給:http://www.itcast.cn/re.do?id=21432&result=1

      

    2.相關(guān)知識點(diǎn):

    .接入方式:兩種接入方案

    .直接與銀行對接

    優(yōu)點(diǎn)因?yàn)橹苯优c銀行進(jìn)行財務(wù)結(jié)算,交易資金結(jié)算比較安全

    缺點(diǎn):開發(fā)工作量比較大,而且銀行會不定期升級交易系統(tǒng),隨著銀行系統(tǒng)的升級,企業(yè)也需要作相應(yīng)改動,所以維護(hù)工作量也是比較大的,而且企業(yè)每年還需要向銀行交納一定數(shù)量的接口使用費(fèi)。

     

    .通過中間公司間接與銀行對接

    優(yōu)點(diǎn):開發(fā)工作量較少,因?yàn)槭褂玫氖侵虚g企業(yè)提供的接入規(guī)范,所以銀行升級系統(tǒng),不需要企業(yè)作相應(yīng)修改,除非中間企業(yè)的接入規(guī)范發(fā)生了改變,企業(yè)才作相應(yīng)修改。

    缺點(diǎn):因?yàn)槭桥c中間企業(yè)進(jìn)行資金結(jié)算,目前所有中間企業(yè)都是私企,資金安全是個大問題。

     3. 對支付數(shù)據(jù)進(jìn)行Md5加密

    4. 支付流程:

    通過http請求方式向易寶支付網(wǎng)關(guān)發(fā)起一個支付請求,請求可以是getpost方式提交。

    易寶支付網(wǎng)關(guān)對企業(yè)發(fā)來的數(shù)據(jù)使用用戶的密鑰生成MD5-hmac碼,然后跟企業(yè)發(fā)來的MD5-hmac(即上面表單由hmac字段提供的值)比較是否相同,如果相同即把請求轉(zhuǎn)發(fā)到銀行網(wǎng)關(guān),當(dāng)用戶支付完成后,銀行網(wǎng)關(guān)會引導(dǎo)用戶的瀏覽器重定向到易寶支付網(wǎng)關(guān),然后易寶支付網(wǎng)關(guān)再引導(dǎo)用戶的瀏覽器重定向到企業(yè)提供的url(即上面表單由p8_Url提供的地址)

     

    接下來我們只需處理結(jié)果了

     

    下午是面試技巧:

    薪水:一定要寫 ,不要寫區(qū)間 4000  

    心得體會:具體點(diǎn)

    責(zé)任描述:多寫,詳細(xì),寫開發(fā)難點(diǎn),描述清楚,介紹清楚

      對某一模塊詳細(xì)描述,對難點(diǎn)的解決過程

    描述自己負(fù)責(zé)的模塊,抓住一點(diǎn),詳細(xì)說,千千不要泛泛而談

    不能寫培訓(xùn)經(jīng)驗(yàn)

     

    三好學(xué)生,寫一等獎學(xué)金是應(yīng)屆的

    愛好還是要寫的

    身份證不能造假,教育經(jīng)歷,通常企業(yè)篩選簡歷過程:

     1-2千封中選,讓前臺做/人力去篩選簡歷,要求:

       A.只提取兩年工作年限以上(一般企業(yè)都是這樣干的)

       B.連人力都能判斷出造假的簡歷,排除

       C.經(jīng)過人力,剩下100

       D.面試官

     

    88年可以寫兩年,教育經(jīng)歷:把畢業(yè)信息提前,證書造假

    簡歷上可適當(dāng)造假

    薪水:

    2年,月薪(北京,上海,廣州):

    初級:3000 – 4000 4500  -- 8-12

    中級:4500 – 6000 7K 其中5K-6K比較多 --

    高級:7000 – 1.2W  3-5

     

    從事Android,薪水如下:

    Android 2 最長就2

    原來做過j2se開發(fā)3-4 8K-1.2W

    android 3個月(j2ee 1-26K

    Android 干半年 4.5K

    如果我們老老實(shí)實(shí)干半年,編碼能力就會沒問題

     

    工作經(jīng)驗(yàn):

    1.為什么離職?

    我在深圳那邊4K,也不知道北京這邊的行情。

    2.當(dāng)公司準(zhǔn)備要你的時候,會讓你填以前公司的地址信息,聯(lián)系人信息

     造假唄,找個外地的同學(xué)

    3.入職后,離職證明,隨便蓋個章,離職證明模版網(wǎng)上有一大堆

     新公司不想惹麻煩,已經(jīng)和原來公司解除了勞動合同

     

    4.關(guān)于android面試

     基礎(chǔ):

    多線程(并發(fā)控制),Socket通信,http通信

     android

    android的什么項(xiàng)目

    項(xiàng)目針對那些手機(jī)型號的手機(jī)HTC

    如何適應(yīng)各個分辨率的問題,大分辨率靠前

    ContentProvider(難度),共享數(shù)據(jù)

    聯(lián)系人(如何獲取聯(lián)系人)

    Activity的生命周期:運(yùn)行 暫停 停止

    前臺生命周期

    完整生命周期

       

    意圖:隱,顯式

    組件:廣播,內(nèi)容提供者,Service 四大組件

    MMI:多媒體接口

    SQLite:數(shù)據(jù)庫訪問

    項(xiàng)目開發(fā)

      3   2-3

    公司部門           人員

    研發(fā)部/技術(shù)部     50-60

    測試部            8-10

    客服部/售后服務(wù)

    市場部           

    行政部

    posted @ 2010-03-24 00:49 d66380022| 編輯 收藏
      2010年3月20日

    今天學(xué)習(xí)從網(wǎng)上獲得數(shù)據(jù),以xml文件輸出。流程:android客戶端 -----已經(jīng)開發(fā)好的CRM(220.113.15.23) -----[客戶資料]--à屏幕

    用的是struts1.3的環(huán)境

    1.搭建環(huán)境

    1.web.xml配置struts servlet

    2.添加jar

    3.復(fù)制struts-config.xml

    環(huán)境搞定后,新建jsp文件,寫好文件頭:<?xml version="1.0" encoding="UTF-8"?> 注意

    接著新建一個ContactAction

    最后配置struts-config.xml文件

    新建contact.jsp文件,得到數(shù)據(jù)

    訪問路徑,測試得到的數(shù)據(jù),以驗(yàn)證是否正確,若正確的話,第一步完成

    下面是Android應(yīng)用

    2 ..設(shè)計要顯示的界面

      .新建service,可以調(diào)用

    關(guān)鍵代碼:

    String path = “http://192.168.1.100:8080/crm/contacts.do”;

    URL url = new URL(path);

    HttpURLConnection conn = (HttpURLConnection)url.openConnection();

    conn.setConnectionTimeout(5*1000);

    conn.setRequestMethod(“POST”);

    return conn.getInputStream();

    在該類中還應(yīng)該新建sax解析方法,解析文檔,保存數(shù)據(jù)

    .新建android測試類,以日志形式打印出xml文件中的數(shù)據(jù)

    3.應(yīng)用HttpURLConnection對象,我們可以向網(wǎng)絡(luò)發(fā)送請求參數(shù).下面以POST發(fā)送為例,寫一些關(guān)鍵代碼點(diǎn)

    Map<String, String> params = new HashMap<String, String>();

    params.put("age", "22");

    params.put("name", "浪淘沙");

     StringBuilder params = new StringBuilder();

    for(Map.Entry<String, String> entry : params.entrySet()){

         params.append(entry.getKey());

         params.append("=").append(URLEncoder.encode(entry.getValue(), "UTF-8"));

         params.append("&");

    }

    if (params.length() > 0) params.deleteCharAt(params.length() - 1);

    byte[] data = params.toString().getBytes();

     

    4. 為應(yīng)用添加新的Activity

    ①:新建一個繼承Activity的類

    ②:需要在功能清單AndroidManifest.xml文件中添加進(jìn)上面Activity配置代碼

     

    打開新的Activity,不傳遞參數(shù)

    通過意圖打開ActivityIntent,用于激活Activity的,在組件之間傳遞數(shù)據(jù)

    在新的Activity中接收前面Activity傳遞過來的參數(shù):

    添加參數(shù)的另一種方法:Bundle

    Bundle類用作攜帶數(shù)據(jù),它類似于Map,用于存放key-value名值對形式的值。相對于Map,它提供了各種常用類型的putXxx()/getXxx()方法, putXxx()用于往Bundle對象放入數(shù)據(jù),getXxx()方法用于從Bundle對象里獲取數(shù)據(jù)。Bundle的內(nèi)部實(shí)際上是使用了HashMap<String, Object>類型的變量來存放putXxx()方法放入的值:

     

    5. Intent過濾器

    Android鼓勵減少組件間的耦合,因此Android提供了Intent (意圖) Intent提供了一種通用的消息系統(tǒng),它允許在你的應(yīng)用程序與其它的應(yīng)用程序間傳遞Intent來執(zhí)行動作和產(chǎn)生事件。使用Intent可以激活Android應(yīng)用的三個核心組件:活動、 服務(wù)和廣播接收器。

    Intent可以劃分成顯式意圖和隱式意圖。

     

     

    posted @ 2010-03-20 23:30 d66380022| 編輯 收藏
      2010年3月17日

    使用SharedPreferences進(jìn)行數(shù)據(jù)存儲,是專門用來向用戶提供軟件參數(shù)設(shè)置功能,

    1.       SharedPreferences類,它是適合用于保存軟件配置參數(shù)。使用SharedPreferences保存數(shù)據(jù),其背后是用xml文件存放數(shù)據(jù)。

    2. SharedPreferences使 用xml文件保存 數(shù)據(jù),getSharedPreferences(name,mode)方法的第一個參數(shù)用于指定該文件的名稱,不用帶后綴,后綴由Android自動加上,方法的第二個參數(shù)指 定文件的操作模式,共有四種操作模式。

    3.設(shè)置軟件參數(shù)過程:

     ①.當(dāng)用戶點(diǎn)擊保存按鈕時,就激發(fā)保存事件

         Activity中的匿名內(nèi)部類中,得到用戶輸入值

         需要注意的是:android.content.SharedPreferences.Editor用于保存參數(shù),該editor最后要commit一下。

         最后要Toast.makeText(PreferencesActivity.this, "保存參數(shù)成功", 1).show();用于提示保存參數(shù)成功

    .如果訪問其他應(yīng)用中的Preference,前提條件是:該preference創(chuàng)建時指定了Context.MODE_WORLD_READABLE或者Context.MODE_WORLD_WRITEABLE權(quán)限。如:有個<package name>cn.itcast的應(yīng)用使用下面語句創(chuàng)建了preference

    getSharedPreferences("itcast", Context.MODE_WORLD_READABLE);

    其他應(yīng)用要訪問上面應(yīng)用的preference,首先需要創(chuàng)建上面應(yīng)用的Context,然后通過Context 訪問preference ,訪問preference時會在應(yīng)用所在包下的shared_prefs目錄找到preference

    Context otherAppsContext = createPackageContext("cn.itcast",

    Context.CONTEXT_IGNORE_SECURITY);

    4. 使 用SQLite數(shù) 據(jù)庫存儲數(shù)據(jù)

    Android平臺上,集成了一個嵌入式關(guān)系型數(shù)據(jù)庫—SQLiteSQLite3支持 NULLINTEGERREAL(浮點(diǎn)數(shù)字)、TEXT(字符串文本)BLOB(二進(jìn)制對象)數(shù)據(jù)類型,雖然它支持的類型只有五種, SQLite最大的特點(diǎn)是你可以保存任何類型的數(shù)據(jù)到任何字段中,無論這 列聲明的數(shù)據(jù)類型是什么。SQLite可以解析大部分標(biāo)準(zhǔn)SQL語句。

    5.開發(fā)3g數(shù)據(jù)庫 軟件需求:

     ①.用戶初次使用軟件,初始化數(shù)據(jù)庫

     ②.用戶升級軟件,自動更新數(shù)據(jù)庫

     為此,類對應(yīng)提供了兩個重要的方 法,分別是onCreate(SQLiteDatabase db)onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

    6.利用繼承自SQLiteOpenHelperDatabaseHelper類實(shí)現(xiàn)增刪改查,和我們以前的用JDBC實(shí)現(xiàn)的增刪改查語法基本一樣,舉例:

     SQLiteDatabase db = ....;

    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"傳智播客", 4});

    db.close();

     需要注意的是SQLiteDatabaserawQuery() 用于 執(zhí)行select語句

    7.將數(shù)據(jù)動態(tài)顯示在手機(jī)屏幕上,用SimpleAparter實(shí)現(xiàn)


    今天到此結(jié)束!

       

          

    posted @ 2010-03-17 23:53 d66380022| 編輯 收藏
      2010年3月16日

    3G的第二天,單元測試,老黎講的東西當(dāng)天基本可以掌握,很喜歡

    1.單元測試步驟:

    第一步:首先在AndroidManifest.xml中加入下面紅色代碼:

    ①.<application>中加入:

    <uses-library android:name="android.test.runner" />

    ②.在最后的標(biāo)簽前加上:

    <instrumentation android:name="android.test.InstrumentationTestRunner"

         android:targetPackage="cn.itcast.action" android:label="Tests for My App" />

    注意:上面targetPackage指定的包要和應(yīng)用的package相同。

    第二步:編寫單元測試代碼(選擇要測試的方法,右鍵點(diǎn)擊“Run As”--“Android Junit Test” ):

    2.數(shù)據(jù)存儲和訪問

     軟件需要對處理后的數(shù)據(jù)存儲,Android為數(shù)據(jù)存儲提供了5種方式:

         文件,SharedPreferencesSQLite數(shù)據(jù)庫,內(nèi)容提供者(Content provider),網(wǎng)絡(luò)

    使用文件對數(shù)據(jù)進(jìn)行存儲,Activity提供了openFileOutput()方法可以用于把數(shù)據(jù)輸出到文件中。openFileOutput()方法的第二參數(shù)用于指定操作模式,有四種模式,分別為:

    Context.MODE_PRIVATE

    Context.MODE_APPEND 

    Context.MODE_WORLD_READABLE

    Context.MODE_WORLD_WRITEABLE

    3.SAX解析XML

    SAX是一個解析速度快并且占用內(nèi)存少的xml解析器,解析采用的是事件驅(qū)動,這些方法定義在ContentHandler接口中,下面是一些ContentHandler接口常用的方法:

    startDocument()

    當(dāng)遇到文檔的開頭的時候,調(diào)用這個方法,可以在其中做一些預(yù)處理的工作。

    endDocument()

    和上面的方法相對應(yīng),當(dāng)文檔結(jié)束的時候,調(diào)用這個方法,可以在其中做一些善后的工作。

    startElement(String namespaceURI, String localName, String qName, Attributes atts)

    當(dāng)讀到一個開始標(biāo)簽的時候,會觸發(fā)這個方法。

    endElement(String uri, String localName, String name)

    這個方法和上面的方法相對應(yīng),在遇到結(jié)束標(biāo)簽的時候,調(diào)用這個方法。

    characters(char[] ch, int start, int length)

    這個方法用來處理在XML文件中讀到的內(nèi)容,第一個參數(shù)為文件的字符串內(nèi)容,后面兩個參數(shù)是讀到的字符串在這個數(shù)組中的起始位置和長度,使用new String(ch,start,length)就可以獲取內(nèi)容。

    4.使用Pull解析器讀取XML文件

    如果需要生成一個XML文件,生成XML文件的方法有很多,如:可以只使用一個StringBuilder組拼XML內(nèi)容,然后把內(nèi)容寫入到文件中;

    或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,推薦使用Pull解析器。

     

    最后,

    巴巴運(yùn)動網(wǎng),好好學(xué)習(xí)權(quán)限和優(yōu)化等技術(shù),面試特別有幫助

                                                                                                                                                                                                              

    posted @ 2010-03-16 00:29 d66380022| 編輯 收藏

        今天是黎老師的3G應(yīng)用開發(fā)Android項(xiàng)目的第一天,Android相當(dāng)火,從事Android開發(fā)的人員不太多,接下來開始Android之旅。

    1.3G簡介:

     3G,即3rd Generation,目前中國聯(lián)通使用的是WCDMA,中國電信使用的是CDMA2000 中國,移動使用的是具有自主知識產(chǎn)權(quán)的TD-SCDMA3G的最大優(yōu)點(diǎn):速度上的提升

    2.wml標(biāo)簽,比Html標(biāo)簽簡單,1-2天就可以搞定,工作中用到再學(xué),因?yàn)樗?/span>2.5G中用到的技術(shù),如果3G普及的話,這門技術(shù)就Over了。

    3.智能手機(jī)操作平臺

     我們學(xué)Android操作系統(tǒng),RIM BlackBerry,黑莓我比較喜歡,但在國內(nèi)還不怎么流行, Symbian手機(jī)硬件比較好,所以占用很大市場,在3G時代,手機(jī)基本上可以當(dāng)做電腦,用戶更看重手機(jī)是否能滿足日常生活和工作的需要。這就好像大多電腦 用戶都安裝了Windows操作系統(tǒng),很少安裝Linux系統(tǒng)。開發(fā)Android的人員的增多,必然會帶來手機(jī)軟件的增多,軟件的多少會決定以后操作系統(tǒng)的市場份額,windows mobileAndroidiPhone的界面差遠(yuǎn)了。我們關(guān)注:AndroidiPhoneSymbian智能手機(jī)平臺,因?yàn)槲覀兏?/span>Java開發(fā),只能學(xué)Android

    4.Android資料

     Android手機(jī)就買多普達(dá)和Moto的,質(zhì)量好。Android最好的資料是android.pdfGoogle Android SDK開發(fā)范例大全提供了Android的全部功能,在學(xué)完課程之后可以看

    5. 開發(fā)環(huán)境的搭建: 

     JDK 5 JDK 6 (僅有JRE不夠)

    Eclipse 3.5 (galileo)

    ①.下載ADT Eclipse 插件

    http://dl.google.com/android/ADT-0.9.5.zip

    ②.安裝 Eclipse 插件 (ADT)

    啟動 Eclipse,選擇 Help > Install New Software,在出現(xiàn)的對話框里,點(diǎn)擊Add按鈕,在對話框的name一欄輸入“ADT” 然后點(diǎn)擊Archive...,瀏覽和選擇已經(jīng)下載的ADT插件壓縮文件。

    點(diǎn)擊 OK.。返回可用軟件的視圖,你會看到這個插件,然后選擇Developer Tools (會選中下 面的“Android Developer Tools” “Android Editors“),點(diǎn)擊 Next,最后重啟 Eclipse

    ③.下載Android SDK

    http://dl.google.com/android/android-sdk_r04-windows.zip

    下載完SDK后,把.zip文件解壓到你電腦上合適位置。啟動 Eclipse,選擇window->preferences, 在打開的視圖左邊點(diǎn)擊android,在右邊的SDK Location中選擇Android SDK所在位置。

    6.開發(fā)Android的第一個應(yīng)用:

    1.點(diǎn)擊工具欄上手機(jī)形狀的虛擬設(shè)備管理器(簡稱“AVD“)

    2.在打開的虛擬設(shè)備管理器中創(chuàng)建一個虛擬手機(jī)

    3.在項(xiàng)目上右鍵點(diǎn)擊run as ?Android application

    OK,第一個應(yīng)用就OK

    7.端口號:127.0.0.1:5554

    8.Activity

     就像struts中的Action,處理用戶請求,除此之外,Activity還代表一個用戶界面

    9. Android應(yīng)用程序架構(gòu)

           src/ java原代碼存放目錄

           gen/ 自動生成目錄

           gen 目錄中存放所有由Android開發(fā)工具自動生成的文件。目錄中最重要的就是R.java文件。 這個文件 由Android開 發(fā)工具自動產(chǎn)生的。Android開發(fā)工具會自動根據(jù)你放入res目錄的xml界面文件、圖標(biāo)與常量,同步更新修改R.java文件。

           res/ 資源(Resource)目錄

           在這個目錄中我們可以存放應(yīng)用使用到的各種資源,如xml界面文件,圖片或數(shù)據(jù)。具體請看ppt下方備注欄。

           AndroidManifest.xml 功能清單文件

            這個文件列出了應(yīng)用程序所提供的功 能,相當(dāng)于strutsconfig文件,只有配置好后,才能調(diào)用此Activity

           default.properties 項(xiàng)目環(huán)境信息,一般是不需要修改此文件中

    10.短信發(fā)送器

     注意:因?yàn)閼?yīng)用要使用手機(jī)的短信服務(wù),所以要在清單文件AndroidManifest.xml中添 加短信服務(wù)權(quán)限:

    11.通知

     關(guān)于這些東西,還是看看文檔,拷過來運(yùn)行一下,測試測試看看效果就差不多了。


    posted @ 2010-03-16 00:20 d66380022| 編輯 收藏
      2010年3月13日

    .使用poi

      1.參見poi的文檔,添加jar

      2.workbook表示一個Excel文檔

      3.下載Excel模版,必須按格式

         1.創(chuàng)建workbook對象

           2.創(chuàng)建下載Excel文件的第一行

            3.從數(shù)據(jù)庫中讀取到需要的Employee列表

         5.利用Servlet Api 對準(zhǔn)備好的Excel下載

      4.上傳excel        

          .配置Action

          .導(dǎo)入兩個jarcommons-iocommons-fileupload.jar

          .上傳

             1.根據(jù)ActionFormFormFile屬性讀取上傳數(shù)據(jù),獲得Workbook對象

                   2.讀取Workbook對象中的內(nèi)容:遍歷Workbook對象除標(biāo)題行以外的行

             3.把每一行都轉(zhuǎn)換為一個Employee對象

             4.調(diào)用方法,把Employee對象的集合保存到數(shù)據(jù)庫中,注意:有可能不能保存,其原因可能違反格式或者違反數(shù)據(jù)庫的唯一性約束

                

    .PDF文檔輸出

      1.iText介紹:iText是著名的開放源碼的站點(diǎn)sourceforge一個項(xiàng)目, 是用于生成 PDF 文檔的一個java類庫. 

    2.Pdf 文件輸出的 5 個步驟

    1. 創(chuàng)建一個 Document 對象.

    public Document()

    public Document(Rectangle pageSize): 定義頁面的大小

    public Document(Rectangle pageSize, int marginLeft, int marginRight, int marginTop, int marginBottom): 定義頁面的大小, 后邊的四個參數(shù)分別指定左, , , 下頁邊距

    2.建立一個書寫器 (Writer) document對象關(guān)聯(lián), 通過書寫器(Writer)可以將文檔寫入到磁盤中

    3. 打開文檔

    4. 在文檔中添加文字

    5. 關(guān)閉文檔 

    其中:

     

    ①。設(shè)定文檔屬性

    當(dāng)新的頁面產(chǎn)生之前, 可以設(shè)定頁面的大小、書簽、腳注(HeaderFooter)等信息,調(diào)用的方法是:

     

    ②。添加文檔內(nèi)容

    所有向文檔添加的內(nèi)容都是以對象為單位的, PhraseParagraphTable. 比較常用的是段落(Paragraph)對象, 用于向文檔中添加一段文字

    ③。文本處理

    iText中用文本塊(Chunk)、短語(Phrase)和段落(paragraph)處理文本。

    文本塊(Chunk)是處理文本的最小單位, 由一串帶格式(包括字體、顏色、大小)的字符串組成:

     

     

    注意: iText 中沒有行的概念, 一個表格里直接放單元格, 如果一個 3 列的表格中放進(jìn) 6 個單元格, 那就是兩行的表格. 如果放入 5 個基本的沒有任何跨列設(shè)置的單元格, 表格就會出錯. 此時表格不會添加到文檔中, 并且沒有任何提示

     

    .面試

       老佟給我們找了一個簡歷,介紹了一些面試的注意點(diǎn),要點(diǎn):

         1.符合自身?xiàng)l件,各種技術(shù)。

         2.最好寫點(diǎn)權(quán)限設(shè)計,Compass+Lucene實(shí)現(xiàn)全文搜索,流程采用JBPM管理。

         3.項(xiàng)目三個:小湯的OA和老佟的權(quán)限整合為一個項(xiàng)目,網(wǎng)上商城(巴巴運(yùn)功網(wǎng)),3g,數(shù)據(jù)采集

    OA用到的技術(shù):SSH

    jQuery + Ajax

    jbpm 完成審批流程

    spring-security

    lucence :全文檢索

     

    posted @ 2010-03-13 23:40 d66380022| 編輯 收藏
     接著昨天的實(shí)現(xiàn)將攔截的url,權(quán)限信息,用戶信息放到數(shù)據(jù)庫中,并將spring-security集成到項(xiàng)目中

    1. 實(shí)現(xiàn)資源信息存放到數(shù)據(jù)庫中:

    訪問資源時, spring-security 能區(qū)分出訪問該資源需要哪些權(quán)限
      1. 自定義ObjectDefinitionSource 接口的實(shí)現(xiàn)類, 將該類的實(shí)例裝配給 FilterSecurityInterceptor 的 objectDefinitionSource 的屬性. 即可實(shí)現(xiàn)自定義的資源獲取.

      2. 通過繼承 DefaultFilterInvocationDefinitionSource 類的方法定義ObjectDefinitionSource 接口的實(shí)現(xiàn)類有困難, 因?yàn)? DefaultFilterInvocationDefinitionSource中沒有無參的構(gòu)造器

       3.通過查看 spring-security 核心 jar 包的 META-IN 下 的 spring.handlers 找到 SecurityNamespaceHandler, 在該類中查看 registerBeanDefinitionParser(Elements.HTTP, new HttpSecurityBeanDefinitionParser()); 方法在 HttpSecurityBeanDefinitionParser 類中可以看到如何創(chuàng)建 DefaultFilterInvocationDefinitionSource 實(shí)例.

       4. 通過 FactoryBean 在 IOC 容器中注冊  DefaultFilterInvocationDefinitionSource 實(shí)例   

       5. 實(shí)現(xiàn)ResourceDetailsService 接口    

    2.關(guān)于MD5加密:

    1.網(wǎng)上的關(guān)于MD5已經(jīng)很多了,MD5算法對密碼進(jìn)行摘要加密,這是一種單項(xiàng)加密手段,無法通過加密后的結(jié)果反推回原來的密碼明文。

    為了使用MD5對密碼加密,我們需要修改一下配置文件
    <authentication-provider>
        <password-encoder hash="md5" >
        <jdbc-user-service data-source-ref="dataSource" >
    < authentication-provider>  
    上述代碼中新增的黃色部分,將啟用md5算法。

    3.管理會話(HttpSession)
        多個用戶不能使用同一個賬號同時登陸系統(tǒng)。
    添加監(jiān)聽器
    在web.xml中添加一個監(jiān)聽器,這個監(jiān)聽器會在session創(chuàng)建和銷毀的時候通知Spring Security。
    這種監(jiān)聽session生命周期的監(jiān)聽器主要用來收集在線用戶的信息,比如統(tǒng)計在線用戶數(shù)之類的事。后登陸的將先登錄的踢出系統(tǒng)默認(rèn)情況下,后登陸的用戶 會把先登錄的用戶踢出系統(tǒng)。

    ============================================================================================
                                  集成spring-security框架

    1. 集成 spring-security 框架

        1. 加入 spring-security 的兩個 jar 包
        2. 在 web.xml 文件中加入加入 spring-security 框架的過濾器
        3. 新建 applicationContext-security.xml 配置文件,并且把 security 作為默認(rèn)的命名空間, 并將其導(dǎo)入到 applicationContext.xml 中
        4. 設(shè)計領(lǐng)域模型:
           Authority -- 權(quán)限
           Resource -- 資源
           Role -- 角色
           Employee -- 添加 Set<Role> roleSet 屬性

           Resource 和 Authority 為多對多的對應(yīng)關(guān)系
           Authority 和 Role 為多對多的對應(yīng)關(guān)系
           Role 和 Employee 為多對多的對應(yīng)關(guān)系
    需要 3 個關(guān)聯(lián)表
        5.
           1. 修改當(dāng)前系統(tǒng)的 login.jsp 頁面, 改為 spring-security 的登錄頁面, 并且在 <http> 節(jié)點(diǎn)中進(jìn)行配置.
    注意: spring-security 在登錄成功后, 利用 "重定向" 轉(zhuǎn)到 form-login 節(jié)點(diǎn)對應(yīng)的 default-target-url 屬性對應(yīng)的頁面. 所以不能直接將其配置為 WEB-INF 目錄下的任何頁面
          2. 新建 UserDetailsService 接口的實(shí)現(xiàn)類, 以實(shí)現(xiàn)從數(shù)據(jù)庫中獲取用戶信息(需要查詢 Employee, Role, Authority, 參見 spring-security-2 的UserDetailsServiceImpl, 基于 Hibernate 實(shí)現(xiàn)),并把該類的 Bean 引用裝配給 <authentication-provider> 節(jié)點(diǎn)的 user-service-ref 屬性 
        6. 向 ems_resource_table, ems_authority_table, ems_resource_authority_table 數(shù)據(jù)表中添加數(shù)據(jù)
        7. 新建 ResourceDetailsService 接口的實(shí)現(xiàn)類, 實(shí)現(xiàn)從數(shù)據(jù)庫中讀取需要被保護(hù)的資源信息及其可以訪問這些資源的權(quán)限信息
        8. 利用 FactoryBean 新建 DefaultFilterInvocationDefinitionSource 接口的 Bean, 并把  ResourceDetailsService 的 Bean 注入進(jìn)來, 再把該 Bean 配置為 filterSecurityInterceptor 過濾器的 objectDefinitionSource 屬性

    2. 實(shí)現(xiàn)權(quán)限模塊:
     1. 實(shí)現(xiàn) Role 的增, 刪, 改, 查

            角色的添加:

          頁面 UI:
                  a. 對字段的 jQuery validation 驗(yàn)證
                  b. struts validator 驗(yàn)證 **
                  c. Action的復(fù)雜驗(yàn)證: 角色名不能重復(fù) **.
                  d. 角色名的 ajax 驗(yàn)證, 角色名不能重復(fù) **.
                  e. 勾選權(quán)限時的級聯(lián)選擇. 例如: 勾選 "員工刪除" 的同時必須勾選 "員工查詢", 即不能讓用戶只有 "員工刪除" 權(quán)限, 而沒有 "員工查詢" 權(quán)限.
                  f. 使用到 Authority 的如下兩個字段: relatedAuthorites(與當(dāng)前權(quán)限關(guān)聯(lián)的權(quán)限信息, 多個權(quán)限使用 "," 分隔), parentAuthority(當(dāng)前權(quán)限的父權(quán)限)
    subAuthorities(當(dāng)前權(quán)限的子權(quán)限)            
           若驗(yàn)證都通過, 在 Action 中受理請求, 錄入角色
       
    注意:

           不能通過以下代碼獲取 parentAuthority 為 null 的 Authority 集合
           List list = authorityDao.findBy("parentAuthority", null);
           System.out.println(list.size());
    而應(yīng)該使用:

           List list = authorityDao.find("FROM Authority auth WHERE auth.parentAuthority IS null");
        為 #select 添加 change 相應(yīng)事件, 當(dāng)選取某個父權(quán)限時, 子權(quán)限顯示


    今天就此為止,明天繼續(xù)!
    posted @ 2010-03-13 23:21 d66380022| 編輯 收藏
      2010年3月10日

      

    今天主要實(shí)現(xiàn)的是員工信息的修改和權(quán)限管理基礎(chǔ),修改用AJAX實(shí)現(xiàn)的,權(quán)限看了不少的源代碼,感覺蠻難的,不過今天只是初步介紹,還有時間再學(xué)習(xí)一下!

     

    1.員工信息的修改

     1.struts對表單信息的回顯

     2.對可以進(jìn)行修改的字段

    1.當(dāng)該字段值發(fā)生改變時,confirm”確定修改該信息嗎?

       點(diǎn)擊取消:使該字段恢復(fù)為以前的默認(rèn)值,不做改變,需要使用隱藏域

            

     點(diǎn)擊“確定”:用AJAX改變字段,在配置文件中不需返回任何信息                              

       <script type=”text/javascript”>

        $(function(){

         $(“:text,select”).change(function(){

           var flag = confirm(“確定要修改” + $(this).prev(“label”).text()+”信息嗎?”);

            ...

    });

    }):

    </script>

    信息

    2.集成spring-security 框架

     1. Spring Security 能用 于保護(hù)各種 Java 應(yīng) 用程序(權(quán)限管理框架).

     2.spring-security入門

       需 求:1. Spring-security 應(yīng)用的根目錄下有兩個 Jsp 頁面: index.jsp admin.jsp. admin 用戶有權(quán)限訪問這兩個頁面, user 用戶只能訪問 index.jsp

    2.提供”登出”功能

       搭建環(huán)境:

          首先添加spring環(huán)境

    1.加入spring-security jar 包:

    spring-security-2.0.5"dist"spring-security-core-2.0.5.RELEASE.jar

    2.web.xml 文件中加入加入spring-security 框架的過濾器

    3.新建applicationContext-security.xml 配置文件,并且把security 作為默認(rèn)的命名

    空間, 并將其導(dǎo)入到applicationContext.xml

    applicationContext-security.xml,有幾種重要配置:

    1. 配置 spring-security http 安全屬性   

           <http auto-config="true">

           2. 配置需要保護(hù)那些 資源, 以及訪問這些資源 所需要的權(quán)限, 若有多個 權(quán)限使用 ',' 分隔   

                  <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN"/>

                  <intercept-url pattern="/index-1.jsp" access="ROLE_USER"/>

           3.配置登出服務(wù)   

                  <logout logout-url="/logout"

                         logout-success-url="/loguot-success.jsp"

                         invalidate-session="false" />

           4.配置登錄頁面,

                         default-target-url: 若直接請求登錄頁面, 那么該屬性配置登錄成功之后的相應(yīng)頁面  

                         always-use-default-target: 若請求的目標(biāo)頁面受保護(hù), spring-security 會相應(yīng) login-page 屬性對應(yīng)的頁面, 默認(rèn)情況下, 若登錄成功將相應(yīng)剛才請求的目標(biāo)頁面,

    但這相當(dāng)麻煩,每次都要配置不少信息。下面 有更好的實(shí)現(xiàn),即

    把需要攔截的url,權(quán)限,用戶信息放到放數(shù)據(jù)庫中,實(shí)現(xiàn)如下:

    1.實(shí)體類:

    Authority -- 權(quán)限

    Resource -- 資源

    Role -- 角色

    Employee -- 添加Set<Role> roleSet 屬性

    2.關(guān)系

    Resource Authority 為多對多的對應(yīng)關(guān)系

    Authority Role 為多對多的對應(yīng)關(guān)系

    Role Employee 為多對多的對應(yīng)關(guān)系

    所以還需要3 個額外的關(guān)聯(lián)表


    3.實(shí)現(xiàn)把用戶信息,權(quán)限信息存放到數(shù)據(jù)庫中

      1. 實(shí)現(xiàn)把用戶信息, 權(quán)限信息存放到數(shù)據(jù)庫中

           1). 自定義 UserDetailsService 接口的實(shí)現(xiàn)類, 將該類配置到 Spring IOC 容器中, 并在

               <authentication-provider user-service-ref=""> 節(jié)點(diǎn)的 user-service-ref 屬性中引用該 Bean.

           2). 通過 debug 查看 UserDetailsService 接口的實(shí)現(xiàn)類返回的 UserDetails 對象     

    4. 實(shí)現(xiàn)資源信息存放到數(shù)據(jù)庫中: 訪問資源時, spring-security 能區(qū)分出訪問該資源需要哪些權(quán)限

           1). 自定義 ObjectDefinitionSource 接口的實(shí)現(xiàn)類, 將該類的實(shí)例裝配給 FilterSecurityInterceptor objectDefinitionSource 的 屬性.即可實(shí)現(xiàn)自定義的資 源獲取.

           2). 通過繼承 DefaultFilterInvocationDefinitionSource 類的方法定義    ObjectDefinitionSource 接口的實(shí)現(xiàn)類有困難, 因?yàn)?/span> DefaultFilterInvocationDefinitionSource

                      中沒有無參的構(gòu) 造器, 該構(gòu)造器有兩個參 數(shù): UrlMatcher urlMatcher, LinkedHashMap requestMap.

               urlMatcher 參數(shù)可 以通過 bean 的形式 事先配置, requestMap 參數(shù)類似于: {[/admin.jsp]=[ROLE_ADMIN], [/index.jsp]=[ROLE_USER]}, 需要訪問數(shù)據(jù)庫才能對其初始化, 但這不可能.

           3). 通過查看 spring-security 核心 jar 包的 META-IN spring.handlers 找到 SecurityNamespaceHandler, 在該類中查看 registerBeanDefinitionParser(Elements.HTTP, new HttpSecurityBeanDefinitionParser()); 方法

                     HttpSecurityBeanDefinitionParser 類 中可以看到如何創(chuàng)建 DefaultFilterInvocationDefinitionSource 實(shí)例.

           4). 通過 FactoryBean IOC 容器中注冊 DefaultFilterInvocationDefinitionSource 實(shí)例        

     


    posted @ 2010-03-10 01:00 d66380022| 編輯 收藏
    僅列出標(biāo)題  下一頁
    主站蜘蛛池模板: 永久在线免费观看| 美女被免费视频网站a国产| 四虎免费大片aⅴ入口| 国产中文在线亚洲精品官网| 亚洲视频在线观看地址| 国产亚洲女在线线精品| 88av免费观看| 亚洲精品视频免费| 亚洲av极品无码专区在线观看| 综合一区自拍亚洲综合图区| 久久青草91免费观看| 国产精品色午夜视频免费看| 亚洲电影一区二区| 日韩亚洲人成在线综合| 18禁黄网站禁片免费观看不卡| 亚洲国产一区视频| 中文日韩亚洲欧美制服| 久久99免费视频| 免费v片视频在线观看视频| 亚洲精品网站在线观看你懂的| 欧洲乱码伦视频免费国产| 免费AA片少妇人AA片直播| 国产亚洲老熟女视频| 亚洲av无码专区亚洲av不卡| 日韩精品无码免费一区二区三区| 国产成人无码a区在线观看视频免费 | 色偷偷亚洲第一综合| 99精品在线免费观看| 亚洲日韩精品无码专区网站| 456亚洲人成影院在线观| 久久久久成人片免费观看蜜芽| 免费va在线观看| 亚洲熟妇成人精品一区| 99久久久国产精品免费牛牛四川 | 嫩草影院在线播放www免费观看| 国产精品美女自在线观看免费| 亚洲美女视频一区二区三区| 四虎国产精品免费永久在线| 亚洲 小说区 图片区 都市| 亚洲中文无码永久免| 18观看免费永久视频|