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

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

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

    posts - 122,  comments - 25,  trackbacks - 0
    1、介紹
    通過(guò)證書(shū)驗(yàn)證用戶(hù)身份(瀏覽器),其核心是利用cookie實(shí)現(xiàn)http和https的信息共享(同域名)。如http://test.abc.com/app/index.html 發(fā)現(xiàn)未驗(yàn)證后,跳轉(zhuǎn)到https://test.abc.com:443/app/checkCrt.html身份驗(yàn)證,要求出去證書(shū),確認(rèn)后將身份信息帶入http請(qǐng)求頭部,跳轉(zhuǎn)到原請(qǐng)求頁(yè)面(http://test.abc.com/app/index.html ),讀取身份信息后進(jìn)入頁(yè)面(出于安全考慮Cookie需要加密)。

    流程圖

    流程說(shuō)明:
    登錄流程詳細(xì)介紹:
    1). 未登錄用戶(hù)訪問(wèn)頁(yè)面 如:http://test.abc.com/app/index.html
    2). 【CertAuthValve】判斷是否訪問(wèn)受限制資源,如訪問(wèn)受限制的資源則判斷用戶(hù)身份是否已驗(yàn)證,未驗(yàn)證則將用戶(hù)重定向到身份驗(yàn)證頁(yè)面,原始請(qǐng)求的url做為
    query的一部分,登錄成功后可以跳轉(zhuǎn)回來(lái), 如:https://test.abc.com:443/app/checkCrt.htm?done=/index.html。
    3). 【CertAuthValve】對(duì)于https請(qǐng)求,apache讀取請(qǐng)求提供的用戶(hù)證書(shū),獲取證書(shū)中的郵件地址,并將該信息寫(xiě)入請(qǐng)求頭中。
    4). 【GetUserInfoValve】讀取請(qǐng)求頭,獲取剛剛設(shè)置的用戶(hù)郵件地址信息,進(jìn)一步獲取用戶(hù)的詳細(xì)信息,然后將這些信息加密后放入cookie中。
    5). 登錄完成,將用戶(hù)外部重定向回原始頁(yè)面。
    2、具體實(shí)現(xiàn)
    1)、安裝apache、ssh、java、jboss等環(huán)境,略。
    2)、生成服務(wù)證書(shū)和服務(wù)密碼
    openssl req -new -x509 -nodes -out /home/admin/app/conf/ssl.crt/server.crt -keyout /home/admin/app/conf/ssl.crt/server.key -days 3600
    因?yàn)橐蛢?nèi)網(wǎng)證書(shū)交互,所以需要一個(gè)內(nèi)網(wǎng)證書(shū)公鑰文件,可以通過(guò)以下方式獲取:
    獲取方法:IE->工具->Internet選項(xiàng)->內(nèi)容->證書(shū)->受信任的根證書(shū)頒發(fā)機(jī)構(gòu),找到intranet行,點(diǎn)擊導(dǎo)出,選擇下一步,選擇Base64編碼X.509,將證書(shū)文件保存為intranet-ca.crt,拷貝到目錄/home/admin/app/conf/ssl.crt/。
    3)、apache(httpd.conf)配置
    應(yīng)用和身份驗(yàn)證頁(yè)面放在一起,所以需要同時(shí)配置兩個(gè)虛擬主機(jī),同時(shí)監(jiān)聽(tīng)80(處理http請(qǐng)求)、443(處理https請(qǐng)求)端口。
    #監(jiān)聽(tīng)端口
    Listen 80
    Listen 443

    #app的虛擬主機(jī)配置
    NameVirtualHost *:80
    <VirtualHost *:80>
        ServerAdmin sa@abc.com
        ServerName test.abc.com
        DocumentRoot /home/admin/app/target/app/htdocs/
    </VirtualHost>

    #身份驗(yàn)證的虛擬主機(jī)配置
    NameVirtualHost *:443
    <VirtualHost *:443>
        ServerAdmin sa@abc.com
        ServerName test.abc.com
        DocumentRoot /home/admin/app/target/app/htdocs/
        SSLEngine on
        SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+SSLv3:+EXP:+eNULL

        #該指令為虛擬主機(jī)指定證書(shū)文件名。
        SSLCertificateFile /home/admin/app/conf/ssl.crt/server.crt

        #該指令為證書(shū)指定一個(gè)對(duì)應(yīng)的私鑰文件
        SSLCertificateKeyFile /home/admin/app/conf/ssl.crt/server.key

        #該指令為指定一個(gè)包含Certificate Authority證書(shū)的文件
        #證書(shū)公鑰
        SSLCACertificateFile /home/admin/app/conf/ssl.crt/intranet-ca.cer
        SSLProxyEngine on
        RewriteEngine on
        #設(shè)置客戶(hù)端證書(shū)驗(yàn)證為必須
        SSLVerifyClient require

        #因?yàn)橐粋€(gè)CA證書(shū)能夠被另一個(gè)CA證書(shū)驗(yàn)證,所以可以形成一個(gè)CA證書(shū)鏈.使用該指令可指定服務(wù)器驗(yàn)證用戶(hù)證書(shū)時(shí)可以查找多少個(gè)CA證明。
        #設(shè)置認(rèn)證深度:一般用默認(rèn)10。
        SSLVerifyDepth  10

        #把mod_ssl里的變量變?yōu)槿汁h(huán)境的變量
        SSLOptions +StdEnvVars

        #將證書(shū)中的郵件地址添加到請(qǐng)求頭中
        RequestHeader unset SSL_CLIENT_S_DN_Email
        RequestHeader add SSL_CLIENT_S_DN_Email %{SSL_CLIENT_S_DN_Email}e
    </VirtualHost>

    4)、代碼片段
            //CertAuthValve.java
            
    //判斷session中是否有用戶(hù)郵箱地址
            SessionValue session = SessionHelper.getSessionValue(rundata);
            if (StringUtil.isNotEmpty(session.getCropEmail())) {
                return null;
            }
            
            // 從內(nèi)網(wǎng)證書(shū)中獲取用戶(hù)郵箱地址: SSL_CLIENT_S_DN_Email
            String cropEmail = rundata.getRequest().getHeader(SSL_CLIENT_HEADER_MAIL);
            if (StringUtil.isNotEmpty(cropEmail)) {
                //將郵箱地址保存到session
                session.setCropEmail(cropEmail);
                SessionHelper.saveSessionValue(rundata, session);
                if (log.isDebugEnabled()) {
                    log.debug("用戶(hù)" + session.getCropEmail() + "已經(jīng)通過(guò)證書(shū)驗(yàn)證");
                }
                return null;
            }
            
            URIBrokerService uriBrokerService = (URIBrokerService) getWebxComponent().getService(
                    URIBrokerService.SERVICE_NAME);
            URIBroker noPermissionUriBroker = uriBrokerService.getURIBroker(CHECK_CRT_URL);
            //請(qǐng)求的原始URL & 驗(yàn)證的URL
            String requestPath = rundata.getPathInfo().replace("_", "");
            String checkCrtUrl = (String) noPermissionUriBroker.getPath().get(
                    noPermissionUriBroker.getPath().size() - 1);

            try {
                //原始請(qǐng)求判斷
                if (requestPath.equalsIgnoreCase(checkCrtUrl)) {
                    //當(dāng)前是https請(qǐng)求,但是依然不能得到證書(shū)信息,轉(zhuǎn)到禁止頁(yè)面
                    
    //(要將禁止頁(yè)面加入到允許訪問(wèn)的配置文件中,不然會(huì)導(dǎo)致循環(huán)重定向)
                    URIBroker uriBroker = uriBrokerService.getURIBroker("forbidden");
                    rundata.setRedirectLocation(uriBroker.render());
                } else {
                    //轉(zhuǎn)到證書(shū)驗(yàn)證頁(yè)面
                    rundata.setRedirectLocation(noPermissionUriBroker.render() + "?done=" + rundata.getPathInfo());
                }
            } catch (IOException e) {
                log.error("權(quán)限驗(yàn)證重定向出錯(cuò)", e);
            }
            return new BreakPipeline();

            //GetUserInfoValve.java
            Object user = rundata.getSession().getAttribute("userInfo");
            if (user == null) {
                SessionValue session = SessionHelper.getSessionValue(rundata);
                String email = session.getCropEmail();
                Employe employe = PersonInfoUtil.getPersonInfoByEmail(email);

                // 寫(xiě)入cookie
                session.setEmployeeId(employe.getEmployeId());
                session.setName(employe.getName());
                session.setCropEmail(employe.getEmail());
                SessionHelper.saveSessionValue(rundata, session);
            }

    posted @ 2011-12-09 16:09 josson 閱讀(2441) | 評(píng)論 (0)編輯 收藏
    受限于證書(shū)的原因,以前經(jīng)常不得已用IE打開(kāi)一些應(yīng)用。其實(shí)有一工具可以幫助我們導(dǎo)出IE證書(shū),用于firefox,解決證書(shū)的困惑。

    Jailbreak [https://www.isecpartners.com/application-security-tools/jailbreak.html],win32的一個(gè)小軟件,可以幫助我們導(dǎo)出IE證書(shū),使用很簡(jiǎn)單。
    1、windows環(huán)境(xp\win7均可),以adminstrator登錄;
    2、下載jailbreak,解包后,運(yùn)行jailbreak.exe(非jailbreak.msc);
    3、導(dǎo)出證書(shū):Certificates - Current User > 個(gè)人 > 證書(shū),選所有任務(wù)導(dǎo)出;


    選擇導(dǎo)出私鑰。
    4、在firefox中導(dǎo)入證書(shū):選項(xiàng) > 高級(jí) > 查看證書(shū)(您的證書(shū)) > 導(dǎo)入(剛導(dǎo)出證書(shū)文件);

    5、搞定。
    posted @ 2011-12-09 13:54 josson 閱讀(3107) | 評(píng)論 (1)編輯 收藏

    互聯(lián)網(wǎng)的產(chǎn)品大都是面向海量用戶(hù)的服務(wù),且用戶(hù)分布區(qū)域廣泛,其教育水平、習(xí)慣也大多不同,具有高度不確定性,我們必須非常關(guān)注用戶(hù)的行為和反饋。因而,在互聯(lián)網(wǎng)產(chǎn)品服務(wù)的整個(gè)用戶(hù)研究,需求分析、產(chǎn)品研發(fā)及交付服務(wù)的過(guò)程中,都采用探索式、適應(yīng)性的研發(fā)理念進(jìn)行產(chǎn)品的研發(fā)。通常,會(huì)把整個(gè)產(chǎn)品研發(fā)周期劃分為若干個(gè)迭代,采用迭代式的演進(jìn)過(guò)程,不斷的去交付新的產(chǎn)品特性,并通過(guò)觀察用戶(hù)的行為和反饋獲取,進(jìn)而隨時(shí)調(diào)整產(chǎn)品的思路和方向。一切以用戶(hù)價(jià)值為核心是互聯(lián)網(wǎng)產(chǎn)品最核心的特點(diǎn),而以?xún)r(jià)值驅(qū)動(dòng)的敏捷開(kāi)發(fā)方法非常符合這一特點(diǎn)。

    一、敏捷項(xiàng)目管理實(shí)踐


    從阿里軟件開(kāi)始,內(nèi)貿(mào)團(tuán)隊(duì)就一直在實(shí)行著敏捷項(xiàng)目管理實(shí)踐,通過(guò)小步快跑,快速迭代、增量交付用戶(hù)價(jià)值,不斷獲取用戶(hù)反饋,持續(xù)、快速的調(diào)整產(chǎn)品,驗(yàn)證并適合用戶(hù)價(jià)值。正是通過(guò)這些實(shí)踐活動(dòng),我們以迭代的、增量的交付用戶(hù)價(jià)值,最大限度的保證產(chǎn)品朝著符合用戶(hù)實(shí)際需求方向發(fā)展。目前,在內(nèi)貿(mào)團(tuán)隊(duì)?wèi)?yīng)用較成熟的敏捷實(shí)踐活動(dòng)有:

    1)、迭代計(jì)劃(Sprint Planning Meeting)

    2)、每日晨會(huì)(Daily Scrum Meeting) & 任務(wù)墻(Task Wall)

    3)、功能預(yù)演(Spring Review)

    4)、項(xiàng)目總結(jié)(Retrospect Meeting)

    5)、結(jié)對(duì)編程(Pair Programming)

    6)、其他技術(shù)實(shí)踐活動(dòng)等

     二、敏捷團(tuán)隊(duì)

    1)、自組織文化

    如google、facebook等互聯(lián)網(wǎng)企業(yè),他們很少甚至沒(méi)有特定的項(xiàng)目流程,通常怎么敏捷怎么做,具有濃厚的工程師驅(qū)動(dòng)文化。我們則有較完整的開(kāi)發(fā)流程指導(dǎo)和規(guī)范我們的項(xiàng)目研發(fā)工作,相比而言,喪失了一些靈活性和積極性,不利于我們工程師自我管理、自我驅(qū)動(dòng)意識(shí)的培養(yǎng)。臃腫、缺乏靈活性的流程同互聯(lián)網(wǎng)產(chǎn)品快速更新、快速發(fā)展是不相適應(yīng)的,同時(shí)也弱化我們的責(zé)任心意識(shí)。除了遵守詳盡的流程,我們是否可以換個(gè)角度、換種方法,提倡和營(yíng)造一種自我管理、自我驅(qū)動(dòng)的開(kāi)發(fā)文化,省卻一些并不能給我們帶來(lái)幫助卻影響效率的流程呢?

    敏捷團(tuán)隊(duì)的自組織特性弱化了團(tuán)隊(duì)技術(shù)領(lǐng)導(dǎo)這個(gè)角色,強(qiáng)調(diào)自我管理和自我驅(qū)動(dòng)。雖然這對(duì)工程師的素質(zhì)要求更高,相對(duì)技術(shù)能力更難提高。但是,團(tuán)隊(duì)導(dǎo)向很重要,我們努力營(yíng)造這樣的氛圍,從小團(tuán)隊(duì)做起,逐漸鍛煉和培養(yǎng)自組織團(tuán)隊(duì)。相信在這樣的開(kāi)發(fā)氛圍下,會(huì)讓我們做的更高效、更敏捷,可以走的更穩(wěn)、更遠(yuǎn)。

    2)、追求一體化

    一體化團(tuán)隊(duì)作為敏捷開(kāi)發(fā)方法中最具精益思想基因的實(shí)踐,是指每個(gè)項(xiàng)目團(tuán)隊(duì)包括分析,開(kāi)發(fā),測(cè)試等角色,使團(tuán)隊(duì)滿(mǎn)足一個(gè)需求從設(shè)計(jì),開(kāi)發(fā)到測(cè)試各個(gè)階段順利完成,達(dá)到符合質(zhì)量標(biāo)準(zhǔn)并滿(mǎn)足需求的軟件。這種以項(xiàng)目/產(chǎn)品為單位的虛擬團(tuán)隊(duì),坐在一起,全身心的為共同的目標(biāo)而努力,可以更好的凝聚項(xiàng)目組中的各種角色,消除部門(mén)墻。 

     3)、追求全功能

    這里所指的全功能是希望項(xiàng)目團(tuán)隊(duì)能打破工程師角色之間的邊界,如研發(fā)、測(cè)試和前端工程師的界線,消除開(kāi)發(fā)、測(cè)試流程中一些潛在浪費(fèi),提高效率。在項(xiàng)目團(tuán)隊(duì)內(nèi)部通過(guò)角色互換,不限角色的結(jié)對(duì)工作,加強(qiáng)不同角色,不同模塊間的知識(shí)傳遞,打破技術(shù)壁壘,幫助員工從不同視角理解項(xiàng)目,鍛煉技能,進(jìn)而增加團(tuán)隊(duì)均衡生產(chǎn)的能力。

    為什么要提倡打破邊界?項(xiàng)目整體效率依賴(lài)于項(xiàng)目過(guò)程中各環(huán)節(jié)的工作效率,而整體效率的優(yōu)化往往依賴(lài)于均衡生產(chǎn)(精益思想的按需生產(chǎn)),即消除生產(chǎn)的波峰(過(guò)度生產(chǎn))和波谷(生產(chǎn)不足),只有局部效率的增加無(wú)法直接轉(zhuǎn)換為整體效率的增加(就象桶能裝多少水,決定于最短的那塊板)。整體效率的優(yōu)化要求IT團(tuán)隊(duì)消除技能壁壘,培養(yǎng)多面手,根據(jù)計(jì)劃的的變動(dòng),彈性地調(diào)整任務(wù),達(dá)到各角色和流程之間的平衡。

    三、質(zhì)量保證

    我們追求開(kāi)發(fā)效率,同時(shí)也注重項(xiàng)目質(zhì)量。如何去保證質(zhì)量?就象美國(guó)的一位教授愛(ài)德化.戴明(W.Edwards Deming)所說(shuō):“我們應(yīng)該停止依靠大量檢驗(yàn)來(lái)保證質(zhì)量,而是要改進(jìn)工藝流程,從一開(kāi)始就生產(chǎn)出優(yōu)質(zhì)的產(chǎn)品”。我們要在整個(gè)開(kāi)發(fā)過(guò)程中多個(gè)環(huán)節(jié)去保證質(zhì)量。同時(shí),質(zhì)量保證是整個(gè)團(tuán)隊(duì)的責(zé)任,就如同前面所說(shuō)的追求全功能團(tuán)隊(duì),打破邊界。

    至于在哪些環(huán)節(jié)采用哪些實(shí)踐,我們先做個(gè)分類(lèi),按是否能被系統(tǒng)用戶(hù)感知將質(zhì)量問(wèn)題區(qū)分內(nèi)部質(zhì)量和外部質(zhì)量。外部質(zhì)量指能直接被系統(tǒng)用戶(hù)感知,如運(yùn)行緩慢,不可操作或是操作復(fù)雜就屬于外部質(zhì)量低劣。而不能直接為系統(tǒng)用戶(hù)所直接感知的要素,對(duì)產(chǎn)品鍵壯性、可維護(hù)性有深遠(yuǎn)影響的問(wèn)題就屬于外部質(zhì)量,如系統(tǒng)設(shè)計(jì)的一致性、代碼可讀性、邏輯完整性等。內(nèi)部質(zhì)量對(duì)用戶(hù)的影響比較間接,但比外部質(zhì)量意義更深遠(yuǎn)。一般來(lái)說(shuō),系統(tǒng)內(nèi)部質(zhì)量?jī)?yōu)秀,外部質(zhì)量仍有可能很差。而內(nèi)部質(zhì)量差的系統(tǒng),外部質(zhì)量肯定也不怎么樣。

    1)、外部質(zhì)量保證

    在外部質(zhì)量保證上,大部分會(huì)在開(kāi)發(fā)后期介入,可以通過(guò)性能測(cè)試、自動(dòng)化測(cè)試及工程師的功能測(cè)試來(lái)保證,通過(guò)這些實(shí)踐活動(dòng)發(fā)現(xiàn)并保證例如運(yùn)行緩慢、不可操作等質(zhì)量問(wèn)題不會(huì)存在。針對(duì)交互特別復(fù)雜的web應(yīng)用,可以更多的考慮采用webui自動(dòng)化測(cè)試工具,如selenium、pwaitr(b2b)、automan(淘寶)等,可以很好的完成那些簡(jiǎn)單、重復(fù)的TC用例,可以大大提高測(cè)試效率,解決測(cè)試工程師的資源瓶頸。

    2)、內(nèi)部質(zhì)量保證

    相對(duì)于外部質(zhì)量,內(nèi)部質(zhì)量問(wèn)題影響更為深遠(yuǎn),在開(kāi)發(fā)開(kāi)始階段就應(yīng)該去保證。如通過(guò)單元測(cè)試、靜態(tài)代碼掃描(PMD\findbugs)、持續(xù)集成、重構(gòu)、結(jié)對(duì)編程、code review等多種實(shí)踐活動(dòng)來(lái)保證項(xiàng)目代碼的健康。

    除了一些實(shí)踐活動(dòng)去檢查代碼質(zhì)量外,更為重要的是研發(fā)工程師對(duì)內(nèi)部質(zhì)量的重視,如果工程師沒(méi)有形成良好的質(zhì)量意識(shí),很可能這些實(shí)踐也只是停留于形式,并不能帶來(lái)較好的結(jié)果。如我們?cè)陂_(kāi)發(fā)過(guò)程中的編碼規(guī)范、單元測(cè)試的質(zhì)量及覆蓋率,code review的及時(shí)性及問(wèn)題是否持續(xù)跟進(jìn)等等。此外,有選擇的采用結(jié)對(duì)編程實(shí)踐,有助于質(zhì)量的提高。

    本文以敏捷、精益(消除浪費(fèi)、按需生產(chǎn))思想的角度試圖去探討一種適合互聯(lián)網(wǎng)公司的產(chǎn)品開(kāi)發(fā)體系,上述概要的介紹了項(xiàng)目管理、團(tuán)隊(duì)、質(zhì)量方面的一些敏捷實(shí)踐活動(dòng),主要涉及了我們對(duì)敏捷方面的經(jīng)驗(yàn)分享或者是些正在研究探討的課題。文中涉及的實(shí)踐活動(dòng),后續(xù)我將逐一展開(kāi)詳細(xì)介紹,幫助大家更好的理解和認(rèn)識(shí)。希望本文的分享能成為一個(gè)引子,引起大家對(duì)敏捷開(kāi)發(fā)的思考和討論,或者更好的了解敏捷和精益思想。
    posted @ 2011-06-13 15:53 josson 閱讀(524) | 評(píng)論 (0)編輯 收藏
    <2011年6月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    常用鏈接

    留言簿(3)

    隨筆分類(lèi)

    隨筆檔案

    收藏夾

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成人免费视频一区二区三区| 久久精品国产亚洲精品2020| 无码专区永久免费AV网站| 国产精品免费一区二区三区 | 2021精品国产品免费观看| free哆拍拍免费永久视频| 亚洲欧美日韩自偷自拍| 亚洲毛片免费视频| 亚洲高清专区日韩精品| 中文字幕无码精品亚洲资源网| 日韩毛片免费在线观看| 啦啦啦高清视频在线观看免费| 久久久久久国产精品免费无码| 国产一级婬片A视频免费观看| 免费毛片毛片网址| 亚洲精品国产综合久久久久紧| 亚洲免费在线视频播放| 亚洲欧洲日产韩国在线| 久久久久亚洲Av无码专| 久久精品国产亚洲av麻豆 | 一级做a爰全过程免费视频毛片| 亚洲高清一区二区三区电影 | 免费观看日本污污ww网站一区| 在线观看免费大黄网站| 成人午夜免费福利| 野花高清在线观看免费3中文| 97性无码区免费| av无码久久久久不卡免费网站| 在线永久免费的视频草莓| 成人免费在线看片| 国产妇乱子伦视频免费| 久久精品免费一区二区喷潮| 国产va精品免费观看| 最近最好的中文字幕2019免费| 免费无码AV电影在线观看| 无码永久免费AV网站| 欧洲乱码伦视频免费| 热久久精品免费视频| 国产精品无码一二区免费| 亚洲av麻豆aⅴ无码电影 | 午夜肉伦伦影院久久精品免费看国产一区二区三区 |