在Gwt中使用已有的开源验证码
在web系统中,验证码已经是我们不可或缺的一部分了!在项目中我可以自己实现一个验证码的生成以及校验逻辑,也可以使用已有的开源验证码类库。我在开发Gwt的过程中,遇到了需要注册页面需要验证码的需求,接触过Jcaptcha和Patchca和两个验证码类库。
通常验证码的生成以及有效性验证都是放在后台实现,因为这样才是安全的。在Java中使用servlet来完成验证码的生成和校验,同样在Gwt中也是这样的。关于Gwt有一点是要牢记的,那就是在Gwt中后台的代码编译后的代码就是Java字节码,因此对于Gwt中后台的可以完全使用Java自己的所有类库,因此当然它可以使用JavaEE的servlet,而前台使用的类库则是有限的。
在jsp中后台通过servlet生成了验证码之后,然后配置后serlvet的映射,在jsp视图中展示验证码的地方加入这个serlvet的路径即可。Gwt中同样如此,只不过在前视图中把生成验证码的servlet映射路径放在能展示验证码的控件上。
而对于有效性的校验,在jsp中后台通过servlet实现验证码校验的逻辑,在校验逻辑的实现当中是通过request和response来获取输入的验证并作出相应的。由于jsp在于后台的数据的交换过程中是通过表单提交等一系列的操作完成,而Gwt中后台与前台数据交换都是通过方法调用以及rpc通信过程中来传递参数的。所以后台校验逻辑基本相同,数据传递的过程中有些差别。
下面是Patchaca验证码类库生成验证码的代码:
Boolean isResponseCorrect = Boolean.FALSE; HttpServletRequest httpServletRequest = this.getThreadLocalRequest(); // remenber that we need an id to validate! String captchaId = httpServletRequest.getSession().getId(); // Call the Service method try { isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId, response); } catch (CaptchaServiceException e) { Log.error("验证码验证服务异常!"); }