Jfinal扩展将验证码保存到Redis或其它缓存中

388人浏览 / 0人评论

Jfinal扩展将验证码保存到Redis或其它缓存中

因为jfianl 生成的验证码保存在当前的Web应用中,浏览器中只有键。在验证验证码的时候,是通过读取cookie中的键,然后在服务器中通过键读取到值,然后进行比较的。所有在集群部署的情况下,将会出现验证码输入正常。而服务器返回错误的问题。这个时候,我们只需要在自己的类中实现ICaptchaCache接口,重写里面的几个方法,使用Redis 或者其他方式集中保存就可以了。

import com.jfinal.captcha.Captcha;
import com.jfinal.captcha.ICaptchaCache;
 
public class RedisICaptchaCache implements ICaptchaCache{
 
	@Override
	public void put(Captcha captcha) {
		// 保存验证码信息
	}
 
	@Override
	public Captcha get(String key) {
		// 读取验证码
		return null;
	}
 
	@Override
	public void remove(String key) {
		// 删除验证码
		
	}
 
	@Override
	public void removeAll() {
		// 删除所有验证码
		
	}
 
}

然后在Jfinal项目启动类中配置一下即可:

/**
 * 配置常量
 */
public void configConstant(Constants me) {
    loadConfig();

    me.setDevMode(myProp.getBoolean("devMode", false));
//		me.setViewExtension(".html");

    // 支持 Controller、Interceptor 之中使用 @Inject 注入业务层,并且自动实现 AOP
    me.setInjectDependency(true);

    me.setError404View("/errorPage/404.html");
    me.setError500View("/errorPage/500.html");
    me.setError401View("/errorPage/401.html");
    me.setError403View("/errorPage/403.html");
//        me.setErrorView(503,"/errorPage/500.html");

    me.setCaptchaCache(new RedisICaptchaCache());
}

打完收工。

全部评论