<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)一二?

    非常感謝!
    主站蜘蛛池模板: 亚洲中文字幕无码久久2020| 亚洲黄色免费电影| 国产精品亚洲综合网站| 青青青青青青久久久免费观看 | 亚洲a在线视频视频| 中文字幕无码免费久久| 精品国产亚洲一区二区三区| 人妻免费一区二区三区最新| 亚洲精品无码乱码成人| 国产精品免费福利久久| 婷婷亚洲综合五月天小说| 在线免费中文字幕| 亚洲av永久无码嘿嘿嘿| 一级毛片免费播放视频| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲人成电影在线天堂| 毛片无码免费无码播放| 亚洲国产夜色在线观看| 免费人成大片在线观看播放电影| 亚洲精品无码永久在线观看| 久久99精品免费一区二区| 日日夜夜精品免费视频| 免费人成动漫在线播放r18| 亚洲精品亚洲人成人网| 222www免费视频| 亚洲色大成网站www| 免费精品国产自产拍观看| 老司机精品免费视频| 亚洲 自拍 另类小说综合图区| 在线免费观看亚洲| 成人免费无码视频在线网站| 美女被免费网站在线视频免费 | 91在线视频免费看| 亚洲av日韩专区在线观看| 亚洲色偷偷综合亚洲AV伊人| 亚洲一区免费观看| 亚洲国产一成人久久精品| 最近中文字幕免费完整| 噜噜综合亚洲AV中文无码| 亚洲AV无码精品色午夜果冻不卡 | 亚洲人成激情在线播放|