Kaptcha是Google提供的一个图形验证码插件,可以从官网https://code.google.com/p/kaptcha/了解更多的详情。
它的源代码是公开的,在上面的官网提供的download项,可以下载一个zip包,里面包含了jar包和源代码。
从源代码中,可以获得Kaptcha这个项目的结构(整体的Kaptcha是由Producer
实现的):
- 生成一个text,使用
TextProducer
。 - 基于text,把包裹它的图片生成出来:
- Render the text (word),使用
WordRenderer
- Background (add background),使用
BackgroundProducer
- Gimpy (distort image),使用
GimpyEngine
- Noise,使用
NoiseProducer
- Noise,使用
- Draw box,单独方法实现
- Render the text (word),使用
可以看到,整体的业务逻辑思路都是用Interface来连接的,这给了后面的实现极大的灵活性。
如上图所示,为了让Kaptcha可以使用配置文件被灵活配置,专门提供了一个Configurable
接口。如果你需要自己实现一个可配置的类,仅需implement Configurable
就可以了。
在Configurable
中,提供了一个代理Config
来处理/返回具体的事务/配置参数。而在Config
中,又提供了一个ConfigHelper
专门做配置文件的解析。
这样的代理模式,让整体结构清晰而灵活。
而作为整个项目的核心入口,当然是KaptchaServlet
,里面做的工作就是简单地实现Servlet的doGet()
方法:根据Properties创建出一个Config
。有了它,便可以创建出相应的KaptchaProducer
。