Giter Club home page Giter Club logo

xultimate-captcha's Introduction

xultimate-captcha

可分布式部署作为验证码生成服务器和验证服务器,支持图片和声音的验证码框架。

  • 整套环境基于Spring进行构建,主要采用服务来驱动贫血模型完成无状态服务。
  • 声音部分推荐采用配置文件方式、图片推荐采用自定义FactoryBean完成,默认提供了4个实现,声音和图片的各个层次都是无状态的服务类,因此可通过Spring灵活配置。
  • 通过过滤器做起始点,内部通过组合方式配置一个生成器和多个拦截器。拦截器可实现前置和后置处理。
  • 验证码作为一个操作实体,通过拦截器机制进行灵活扩展,包括记录日志、验证参数、向客户端响应图片或声音等。
  • 实体域和和相关服务域通通采用泛型类。其中Q: 问题所属类型;A: 问题答案所属类型;UA: 用户输入的答案所属类型;R: 与Q配合,表示对应问题的结果类型(图象、音频)。

实体

  • Captcha<Q, A>: 验证码实体域,包括问题实体域和答案实体域。DefaultCaptcha<Q, A>为其默认实现。
  • Question<Q>: 问题实体域。DefaultQuestion<Q>为其默认实现。
  • Answer<A>: 答案实体域。DefaultAnswer<A>为其默认实现。
  • Validatable<A, UA>: 定义可验证接口,提供了验证方法,类似于Comparable。
  • Validator<A, UA>: 验证器,用于定义用户输入的和自己生成的答案之间的验证规则,类似于Comparator。StringStringValidator为其默认实现,用于验证用户输入String类型,答案为String类型的验证器。
  • ValidatableAnswer<A, UA>: 继承了DefaultAnswer<A>,并且实现了Validatable<A, UA>接口,提供验证方法,包含一个Validator<A, UA>实例,用于定于验证规则。
  • AnswerDto<UA>: 客户端进行远程验证时需要的传输对象。

实体域服务器

  • CaptchaGenerator<Q, A>: 验证码实体域生成器。生成方式提供从指定字符、数字、单词、组合单词等。
  • QuestionHandler<Q, R>: 问题实体域处理器,用于根据问题实体域转换为图片或声音。
  • AnswerHandler<UA>: 答案实体域处理器,传输AnswerDto<UA>用于判断是否验证成功。

声音

  • 声音实体Sample和声音合成类Mixer是采用SimpleCaptcha的实现。
  • 声音部分主要通过配置来指定字符声音文件、字符匹配表达式、替换KEY、整体渲染声音文件。合成部分主要通过随机生成器和渲染器完成。
  • 提供VoiceGenerator,用于根据字符产生声音片段,默认实现DefaultVoiceGenerator。
  • 提供DefaultNoiseRenderer,用于将声音片段(多个声音实体)和背景渲染声音实体组合成一个声音实体。
  • 提供AudioQuestionHandler,QuestionHandler<String, Sample>形式的默认实现,内部封装多个生成器和多个渲染器,实现随机功能。
  • 声音部分的各个组建都是采用Spring配置的方式来定义,各个组建提供无状态服务组合完成。

图片

  • 图片处理部分主要依据JCaptcha,在保留功能的情况下,进行重构。保留Glyphs。
  • 构建后的结构为BackgroundGenerator、BufferedImageRenderer、GlyphsDecorator、GlyphsVisitors。
  • 提供AbstractQuestionHandler<Q>,实现了QuestionHandler<Q, BufferedImage>接口,定义了宽度、高度、背景图片生成器、北京图片渲染器、最终图片渲染器。定义基本操作,由子类具体完成特效处理并返回新的BufferedImage。
  • 提供GlyphsQuestionHandler,AbstractQuestionHandler<String>子类,为JCaptcha的功能最终合成类。
  • 提供DeformedComposedQuestionHandler<Q>,实现了QuestionHandler<Q, BufferedImage>,提供高级处理,内部封装QuestionHandler<Q, BufferedImage>,主要实现添加边框和重新渲染功能。
  • 主要思路是去除其复杂化(各种自定义类型)、并实现各个部分都可以通过Spring配置的方式定义,提供无状态服务。
  • 如果觉得通过Spring配置过于麻烦,可通过自定义FactoryBean完成,默认提供了GmailQuestionHandlerFactoryBean、Hotmail2008QuestionHandlerFactoryBean、HotmailQuestionHandlerFactoryBean为原有功能的重新实现,LikeTBQuestionHandlerFactory则是一个类taobao的实现,添加模糊处理和若干干扰。

Web

  • 提供CaptchaInterceptor<Q, A>,包括前置处理和后置处理。前置方法包括request和response,后置方法包括request、response、Captcha<Q, A>。
  • 提供AbstractCaptchaInterceptor<Q, A>,多了一个获取优先级方法,优先级越高,前置和后置方法分别越先执行。
  • 提供CaptchaFilter<Q, A>,通用实现,封装一个CaptchaGenerator<Q, A>和多个AbstractCaptchaInterceptor<Q, A>,拦截器的前置和后置分别在Captcha<Q, A>生成前后被调用。
  • 若有新的需求,可通过扩展AbstractCaptchaInterceptor<Q, A>实现,而不必修改CaptchaFilter<Q, A>。
  • 默认提供拦截器BrowserCacheCaptchaInterceptor<Q, A>,实现客户端缓存功能。
  • 默认提供拦截器AbstractErrorBufferedImageCaptchaInterceptor<Q, A>,提供输出错误图片功能。
  • 默认提供拦截器LoggerRecordStringCaptchaInterceptor<Q, A>,记录日志信息,包括identity(所属站点)、sessionId(用户标识,非会话ID)、remoteAddr(客户端IP)、currentTime。
  • 默认提供拦截器BufferedImageCaptchaInterceptor<Q, A>,根据sessionid是否存在,发送错误图片或通过QuestionHandler<Q, BufferedImage>生成图片发送给客户端。
  • 默认提供拦截器AudioCaptchaInterceptor<Q, A>,根据sessionid是否存在,发送错误图片或通过QuestionHandler<Q, Sample>生成音频发送给客户端。
  • 默认提供拦截器XMemcachedClientCaptchaInterceptor<Q, A>,通过验证码ID表达式、替换表达式、格式化器、sessionId生成captchaId作为memcached的key,value使用Answer<A>(答案实体域)进行存储。
  • 过滤器和拦截器都是通过Spring配置的方式来定义和提供无状态服务。

客户端验证

  • 提供ValidatableAnswerHandler<A, UA>,通过验证码ID表达式、替换表达式、格式化器、sessionId生成captchaId作为memcached的key进行查找,返回ValidatableAnswer<A, UA>并调用validateTo(UA userAnswer)方法完成验证。并记录验证行为日志。

xultimate-captcha's People

Contributors

daniellitoc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.