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

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

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

    京山游俠

    專注技術(shù),拒絕扯淡
    posts - 50, comments - 868, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
    在目前的網(wǎng)絡(luò)上,想必大家對(duì)驗(yàn)證圖片已經(jīng)司空見(jiàn)慣了。驗(yàn)證圖片是區(qū)分人和計(jì)算機(jī)的一種既有效又簡(jiǎn)單的方法。為了提高網(wǎng)站的安全性,防止黑客利用計(jì)算機(jī)進(jìn)行暴力破解和防止黑客使用程序自動(dòng)提交大量垃圾信息,在我們的網(wǎng)站中引入驗(yàn)證碼機(jī)制是必要的。

    在SpringSide 3的Showcase中,江南白衣演示了JCaptcha。Captcha是Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自動(dòng)區(qū)分計(jì)算機(jī)和人類(lèi)的圖靈測(cè)試)的簡(jiǎn)稱,而JCaptcha是一個(gè)在該理論下的基于Java的一個(gè)實(shí)現(xiàn)。我終于開(kāi)始看Showcase中的一些特性了,下面來(lái)談?wù)劙袹Captcha集成到項(xiàng)目中的一些想法。

    首先要把如下四個(gè)jar包拷貝到項(xiàng)目中:
    jcaptcha-1.0.jar
    jcaptcha-api-1.0.jar
    imaging-01012005.jar
    springside3-jee-3.1.5.jar
    以上四個(gè)jar文件前兩個(gè)不用我多解釋,imaging-01012005.jar是必須要的,因?yàn)樗峁┝薐Captcha需要的WaterFilter類(lèi),而springside3-jee-3.1.5.jar里面包含的就是SpringSide 3對(duì)JCaptcha的擴(kuò)展。SpringSide 3對(duì)JCaptcha做了哪些擴(kuò)展呢?主要表現(xiàn)在兩個(gè)方面:一是編寫(xiě)了一個(gè)Filter,用來(lái)配合SpringSecurity,二是實(shí)現(xiàn)了一個(gè)圖片生成引擎,即GMailEngine。

    事實(shí)上,JCaptcha是可以直接使用的,即直接使用CaptchaService類(lèi)來(lái)生成和驗(yàn)證圖片中的信息,而CaptchaService可以使用Spring管理;但是一旦和SpringSecurity配合起來(lái)使用就比較麻煩了,因?yàn)槲覀儾豢赡苋バ薷腟pringSecurity的代碼,所以就只能在web.xml中配置Filter了。但是在不和SpringSecurity配合的情況下,我們還是少不了直接使用CaptchaService類(lèi),因?yàn)镕ilter是定制死了的,不靈活,如果我們要返回供AJAX使用的字符串,就必須得自己寫(xiě)代碼。

    好了,下面看看具體步驟。

    1、先在Spring的配置文件中配置CaptchaService的Bean,如下:
    <!--JCaptcha驗(yàn)證碼服務(wù) -->
        
    <bean id="captchaService" class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService">
            
    <property name="captchaEngine">
                
    <bean class="org.springside.modules.security.jcaptcha.GMailEngine" />
            
    </property>
            
    <property name="minGuarantedStorageDelayInSeconds" value="600" />
        
    </bean>

    2、在web.xml中配置Filter,如下:
    <!-- SpringSide's JCaptcha filter -->
        
    <filter>
            
    <filter-name>jcaptchaFilter</filter-name>
            
    <filter-class>org.springside.modules.security.jcaptcha.JCaptchaFilter</filter-class>
            
    <init-param>
                
    <param-name>failureUrl</param-name>
                
    <param-value>/login.action?error=2</param-value>
            
    </init-param>
        
    </filter>

    <!-- jcaptcha圖片生成URL. -->
        
    <filter-mapping>
            
    <filter-name>jcaptchaFilter</filter-name>
            
    <url-pattern>/security/jcaptcha.jpg</url-pattern>
        
    </filter-mapping>

        
    <!-- jcaptcha登錄表單處理URL.
                     必須放在springSecurityFilter的filter-mapping定義之前 
    -->
        
    <filter-mapping>
            
    <filter-name>jcaptchaFilter</filter-name>
            
    <url-pattern>/j_spring_security_check</url-pattern>
        
    </filter-mapping>

    3、在所有需要顯示驗(yàn)證圖片的JSP文件中使用如下代碼:
    <img id="captchaImage" src="${ctx}/security/jcaptcha.jpg" width="100" height="40" align="middle" onclick="onImageClick(this);">(如看不清,可點(diǎn)擊圖片更換)
    這里的onclick函數(shù)主要是為了實(shí)現(xiàn)點(diǎn)擊圖片更換的效果,其代碼如下:
    function onImageClick(o){
        o.src 
    = "/PureText/security/jcapthcha.jpg?update=" + Math.random();
    }

    這時(shí)候,符合SpringSecurity要求的登錄界面就會(huì)自動(dòng)驗(yàn)證用戶的輸入了。

    但是,我們并不是只有登錄這一個(gè)地方需要使用驗(yàn)證圖片,在用戶注冊(cè)、發(fā)表文章等這些地方都需要用到,而且為了不讓用戶離開(kāi)輸入界面,一般使用AJAX,這時(shí)候怎么辦呢?不使用Filter,我們依然可以手動(dòng)驗(yàn)證,如下代碼片斷,則是在Action類(lèi)中截取的:
    // 驗(yàn)證cpatchaImage
            boolean flag = false;
            
    try {
                HttpServletRequest request 
    = Struts2Utils.getRequest();
                String captchaID 
    = request.getSession().getId();
                String captchaValue 
    = request.getParameter("captchaValue");
                ApplicationContext context 
    = WebApplicationContextUtils
                        .getWebApplicationContext(Struts2Utils.getSession()
                                .getServletContext());
                CaptchaService captchaService 
    = (CaptchaService) context
                        .getBean(
    "captchaService");
                flag 
    = captchaService
                        .validateResponseForID(captchaID, captchaValue);
            } 
    catch (Exception e) {
                flag 
    = false;
            }
            
    if (!flag) {
                success 
    = false;
                result 
    += "captcha_err.innerHTML='驗(yàn)證碼輸入錯(cuò)誤。';";
            } 
    else {
                result 
    += "captcha_err.innerHTML='';";
            }
            
    if (success == false) {
                result 
    += "failed();";
                Struts2Utils.renderHtml(result, 
    "encoding:UTF-8");

    就這么簡(jiǎn)單。祝大家愉快!

    評(píng)論

    # re: 在SpringSide 3 中使用JCaptcha  回復(fù)  更多評(píng)論   

    2009-08-27 14:54 by crabboy
    沒(méi)寫(xiě)完吧。
    用ajax前臺(tái)怎么寫(xiě)?

    # re: 在SpringSide 3 中使用JCaptcha  回復(fù)  更多評(píng)論   

    2009-08-27 19:16 by 海邊沫沫
    @crabboy
    前臺(tái)的AJAX當(dāng)然是各有各的搞法啦,每一個(gè)程序員使用的方法都不一定一樣,每一個(gè)框架使用的方法都不一定一樣啊。

    重要的是能夠把數(shù)據(jù)傳遞給AJAX前臺(tái),至于數(shù)據(jù)采取什么樣的組織方式也沒(méi)有一定之規(guī)。

    # re: 在SpringSide 3 中使用JCaptcha[未登錄](méi)  回復(fù)  更多評(píng)論   

    2009-09-21 19:21 by 笨笨
    與樓主心有靈犀,謝謝分享。

    # re: 在SpringSide 3 中使用JCaptcha  回復(fù)  更多評(píng)論   

    2009-11-30 20:57 by flyliying
    沫沫,你太能折騰了,厲害

    # re: 在SpringSide 3 中使用JCaptcha  回復(fù)  更多評(píng)論   

    2012-03-23 16:40 by d
    沫沫您好,請(qǐng)問(wèn)springside是怎樣和JAX-WS集成使用的?能否指點(diǎn)一二?

    非常感謝!
    主站蜘蛛池模板: 国产最新凸凹视频免费| 亚洲国产欧美一区二区三区 | 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 亚洲中文字幕无码mv| 亚洲AV午夜成人片| 亚洲成A人片在线观看中文| 一二三四影视在线看片免费| 久久这里只精品热免费99| 全部一级一级毛片免费看| 亚洲国产精品网站在线播放 | 亚洲成AV人片高潮喷水| 亚洲性无码av在线| 亚洲AV无码久久寂寞少妇| 中文字幕亚洲激情| 亚洲?V无码乱码国产精品| 日韩免费无砖专区2020狼| 亚洲第一成年免费网站| 16女性下面扒开无遮挡免费| 中文字幕乱码一区二区免费| 东北美女野外bbwbbw免费| 无码免费又爽又高潮喷水的视频 | 国产亚洲欧美在线观看| 亚洲中文字幕无码亚洲成A人片| 亚洲国产成人久久77| 亚洲黄网在线观看| 久久精品国产亚洲av日韩| 久久亚洲成a人片| 亚洲VA中文字幕无码毛片| 亚洲国产综合无码一区| 亚洲一区二区女搞男| 亚洲一区AV无码少妇电影☆| 丝袜熟女国偷自产中文字幕亚洲| 亚洲精品亚洲人成在线观看下载| 亚洲av无码天堂一区二区三区| 免费人成年激情视频在线观看| 又粗又大又猛又爽免费视频| 亚洲成av人片一区二区三区| 91麻豆国产自产在线观看亚洲| 亚洲精品制服丝袜四区| 亚洲AV无码日韩AV无码导航| 无码专区—VA亚洲V天堂|