`

Spring与jcaptcha集成

 
阅读更多

Spring与jcaptcha集成

    博客分类:
    J2ee



需求:

验证码非常常见,那么在spring中使用jcaptcha进行认证那么需要集成

实现:

mvn:
Xml代码  收藏代码

    <!-- code check captcha start --> 
    <dependency> 
        <groupId>com.octo.captcha</groupId> 
        <artifactId>jcaptcha</artifactId> 
        <version>1.0</version> 
    </dependency> 
    <!-- code check captcha end --> 

一般仓库中没有对应的jar,比如imaging-01012005.jar那么需要手动添加仓库
Xml代码  收藏代码

    <repository> 
        <id>atlassian</id> 
        <name>atlassian</name> 
        <url>http://maven.jahia.org/maven2</url> 
        <releases> 
            <enabled>true</enabled> 
        </releases> 
        <snapshots> 
            <enabled>false</enabled> 
        </snapshots> 
    </repository> 

基于注解mvc,那么图片的请求路径为Controller,流程为请求path:/anon/getcode产生验证码

这样spring的配置信息为:
Xml代码  收藏代码

    <context:component-scan base-package="com.someabcd.csr" /> 
    <!-- check code start --> 
    <bean id="captchaService" 
        class="com.octo.captcha.service.multitype.GenericManageableCaptchaService"> 
        <description>验证码服务</description> 
        <constructor-arg index="0"> 
            <ref bean="com.someabcd.csr.web.crsCaptchaEngine" /> 
        </constructor-arg> 
        <constructor-arg index="1"> 
            <value>300</value> 
        </constructor-arg><!--超时时间 秒 --> 
        <constructor-arg index="2"> 
            <value>20000</value> 
        </constructor-arg><!--最大并发数 --> 
        <constructor-arg index="3"> 
            <value>20000</value> 
        </constructor-arg> 
    </bean> 

com.someabcd.csr.web.crsCaptchaEngine类为:
Java代码  收藏代码

    @Component("com.someabcd.csr.web.crsCaptchaEngine") 
    public class CSRCaptchaEngine extends ListImageCaptchaEngine { 
     
        @Override 
        protected void buildInitialFactories() { 
            int minWordLength = 4; 
            int maxWordLength = 5; 
            int fontSize = 50; 
            int imageWidth = 152; 
            int imageHeight = 100; 
            WordGenerator wordGenerator = new RandomWordGenerator( 
                    "0123456789abcdefghijklmnopqrstuvwxyz"); 
            TextPaster randomPaster = new DecoratedRandomTextPaster(minWordLength, 
                    maxWordLength, new RandomListColorGenerator(new Color[] { 
                            new Color(23, 170, 27), new Color(220, 34, 11), 
                            new Color(23, 67, 172) }), new TextDecorator[] {}); 
            BackgroundGenerator background = new UniColorBackgroundGenerator( 
                    imageWidth, imageHeight, Color.white); 
            FontGenerator font = new RandomFontGenerator(fontSize, fontSize, 
                    new Font[] { new Font("nyala", Font.BOLD, fontSize), 
                            new Font("Bell MT", Font.PLAIN, fontSize), 
                            new Font("Credit valley", Font.BOLD, fontSize) }); 
     
            ImageDeformation postDef = new ImageDeformationByFilters( 
                    new ImageFilter[] {}); 
            ImageDeformation backDef = new ImageDeformationByFilters( 
                    new ImageFilter[] {}); 
            ImageDeformation textDef = new ImageDeformationByFilters( 
                    new ImageFilter[] {}); 
     
            WordToImage word2image = new DeformedComposedWordToImage(font, 
                    background, randomPaster, backDef, textDef, postDef); 
            addFactory(new GimpyFactory(wordGenerator, word2image)); 
        } 
    } 

处理请求的Controller:
Java代码  收藏代码

    @Controller 
    @RequestMapping("anon") 
    public class AnonController { 
     
        @Autowired 
        private GenericManageableCaptchaService captchaService; 
     
        @RequestMapping(value = "/getcode", method = RequestMethod.GET) 
        public void getCode(HttpServletRequest httpServletRequest, 
                HttpServletResponse httpServletResponse) { 
     
            byte[] captchaChallengeAsJpeg = null; 
            // 输出jpg的字节流 
            ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); 
            try { 
                String captchaId = httpServletRequest.getSession().getId(); 
                BufferedImage challenge = (BufferedImage) captchaService 
                        .getChallengeForID(captchaId, 
                                httpServletRequest.getLocale()); 
     
                // a jpeg encoder 
                JPEGImageEncoder jpegEncoder = JPEGCodec 
                        .createJPEGEncoder(jpegOutputStream); 
                jpegEncoder.encode(challenge); 
                captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); 
     
                // flush it in the response 
                httpServletResponse.setHeader("Cache-Control", "no-store"); 
                httpServletResponse.setHeader("Pragma", "no-cache"); 
                httpServletResponse.setDateHeader("Expires", 0); 
                httpServletResponse.setContentType("image/jpeg"); 
                ServletOutputStream responseOutputStream = httpServletResponse 
                        .getOutputStream(); 
                responseOutputStream.write(captchaChallengeAsJpeg); 
                responseOutputStream.flush(); 
                responseOutputStream.close(); 
            } catch (Exception e) { 
                try { 
                    httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND); 
                } catch (IOException e1) { 
                    e1.printStackTrace(); 
                } 
                return; 
            } 
     
        } 
    } 

验证码的显示:
Java代码  收藏代码

    <tr> 
        <td colspan="2" align="center"> 
            <img  
                    src="${basePath}anon/getcode" 
                    onclick="this.src='${basePath}anon/getcode?d='+new Date()*1" width="160" height="30"/> 
        </td> 
    </tr> 
    <tr> 
        <td height="40" align="right"> 
            <strong> 
                验证码: 
            </strong> 
        </td> 
        <td> 
            <input name="code" type="text" id="code" vld="{required:true}" class="input"/> 
        </td> 
    </tr> 

验证码验证代码块:
Java代码  收藏代码

    Boolean isCorrect = Boolean.FALSE; 
    String captchaId = request.getSession().getId(); 
    String code = request.getParameter("code"); 
    try { 
        isCorrect = captchaService.validateResponseForID(captchaId, 
                code); 
        if (!isCorrect) { 
            log.info("check code error!"); 
            return "usr/tologin"; 
        } 
    } catch (Exception e) { 
        log.error(e.getMessage()); 
    } 

    

备注:

可以把CaptchaEngine也配置的配置文件中,好处是可以随时修改,缺点是20%的事情缺耗费了80%时间,且这20%不重要
分享到:
评论

相关推荐

    通过spring整合jcaptcha来处理验证码

    在"通过spring整合jcaptcha来处理验证码"这个主题中,我们需要理解以下几个关键知识点: 1. **jCaptcha介绍**: jCaptcha是一个基于Java的验证码解决方案,它能够生成包括字母、数字、甚至是图片元素在内的复杂...

    jcaptcha学习spring整合

    总结,Jcaptcha与Spring的整合是一项增强Web应用安全性的重要任务。通过理解Jcaptcha的核心功能和原理,以及掌握Spring框架的Bean管理,我们可以有效地将二者结合,为用户提供安全、可靠的验证码服务。同时,源码...

    验证码 spring jcaptcha

    在Web开发中,Spring框架是广泛应用的Java后端开发框架,而Jcaptcha则是一个基于Java的验证码库,它能够与Spring集成,提供图像验证码服务。 Spring框架提供了强大的依赖注入(DI)和面向切面编程(AOP)功能,使得...

    JCaptcha

    3. **Java实现**:JCaptcha是用Java语言开发的,因此它与Java应用程序和Web应用框架(如Spring、Struts等)有很好的兼容性,可以方便地集成到Java项目中。 4. **图像生成**:JCaptcha的核心功能是生成复杂的图像...

    验证码 验证码例子 jcaptcha jcaptcha例子

    5. 与Web框架的集成:jCaptcha可以很容易地与各种Web应用框架(如Spring、Struts等)结合,提供便捷的API和标签库,便于在Servlet中实现验证码的生成和验证。 在实际应用中,使用jCaptcha的步骤大致如下: 1. 引入...

    jcaptcha的验证码例子

    `extensions`、`docs`、`fisheyebackgrounds`、`gimpybackgrounds`和`integrations`这些目录提供了`jCaptcha`的扩展功能、文档、预设背景样式以及与其他框架的集成示例。例如,`fisheyebackgrounds`和`...

    security+jcaptcha(验证码)+mybatis框架搭建

    4. **集成Jcaptcha**:配置Jcaptcha来生成验证码图片,并在登录页面上展示。 5. **数据持久化**:利用MyBatis进行数据库操作,如用户信息的增删改查等。 6. **测试**:编写测试用例来验证系统的功能性和安全性。 ...

    JCaptcha验证码生成

    6. **JCaptcha与Web应用集成** 在一个典型的Servlet环境中,可以在`init()`方法中配置JCaptcha,然后在处理用户请求的Servlet中生成和验证验证码。在Spring MVC等框架中,可以通过配置拦截器或控制器来实现验证码的...

    SpringMVC中使用Jcaptcha实现校验码验证

    下面将详细介绍如何在Spring MVC中集成Jcaptcha,并讨论其优缺点。 首先,我们需要理解验证码的基本工作原理。验证码通常由一组随机字符组成,这些字符可能包括数字、字母甚至符号,它们以一种难以被计算机程序识别...

    jcaptcha-sample_验证码生成

    4. **Web 应用集成**:在 Spring MVC 或其他 Web 框架中,你可以将 `jCaptcha` 集成到控制器中,处理验证码的生成和验证。这通常涉及到在请求处理方法中生成验证码,在表单提交时验证验证码。 5. **安全存储与清理*...

    java验证码组件Jcaptcha

    5. **互操作性**:由于是基于Java的,Jcaptcha可以与各种后端技术(如Spring、Struts、JSF等)无缝配合。 在JcaptchaDemo中,通常会包含以下示例代码: 1. **初始化配置**:首先需要创建Jcaptcha配置对象,设置...

    jcaptcha验证码

    在实际应用中,JCAPTCHA可以轻松集成到各种Java Web框架中,如Spring、Struts等。对于导入后的使用,开发者需要按照JCAPTCHA的文档进行配置,这可能涉及到Maven或Gradle的依赖管理,以及在Web应用的配置文件中设定...

    jcaptcha咋包及案例

    5. **易于集成**:Jcaptcha可以轻松地集成到各种Java Web框架中,如Spring、Struts等。 6. **安全性**:Jcaptcha采用安全的哈希算法来存储和验证验证码,确保每次请求的验证码都是唯一的,并且在使用后立即失效。 ...

    spring+redis需要的jar包

    首先,Spring与Redis的集成使得在Java应用中高效地使用缓存成为可能。本文将深入探讨这些关键概念,以及提供的压缩包中包含的相关资源。 1. **Spring与Redis的集成**:Spring框架提供了一种简单的方法来连接和操作...

    语音验证码所需要的包jcaptcha-1.0-all.jar

    5. **易于集成**:通过简单的API调用,开发者可以将JCAPTCHA无缝集成到他们的Web应用中,无论是基于Servlet、Spring MVC还是其他框架。 6. **可配置性**:开发者可以根据安全性、用户体验等需求调整验证码的生成参数...

    java通过JCaptcha生成验证码

    8. **Web 应用集成**:在 Spring 或其他 Web 框架中,可以将验证码服务注册为 Spring Bean,然后在控制器中注入并使用。在 JSP 或者其他视图技术中,可以将验证码图像作为响应的一部分发送给客户端。 9. **无障碍性...

    jcaptcha写验证码要用到的jar包

    - Jcaptcha可以与各种Java Web框架(如Spring MVC、Struts2等)无缝集成。例如,在Spring MVC中,可以通过拦截器或控制器方法处理验证码的生成和验证。 9. **可访问性**: - 对于视力障碍的用户,Jcaptcha还支持...

    JCaptcha 开源的验证码组件

    4. **易于集成**:JCaptcha支持多种Web框架,如Servlet、Spring MVC等,方便开发者快速集成到自己的项目中。 ### 二、JCaptcha工作原理 1. **生成验证码**:当用户请求验证码时,JCaptcha会随机生成一个字符串,...

    jcaptcha 彩色验证码-下载即可使用

    4. **易于集成**:由于是用 Java 编写的,jCaptcha 可以轻松地与各种基于 Java 的Web应用框架(如Spring、Struts等)集成。 在描述中提到,“该要的都配置好了,即可调试,立马看到效果!彩色”意味着下载后的项目...

    jcaptcha-1.0-sources.zip

    6. **兼容性**:Jcaptcha可以轻松地集成到各种Java Web应用中,如Servlet、Struts、Spring MVC等,提供API方便开发者调用。 在`jcaptcha-1.0-sources.jar`中,我们可以看到Jcaptcha的主要类和接口,例如`...

Global site tag (gtag.js) - Google Analytics