前后端分离,还能使用jfinal自带的验证码吗

使用vue和webpack,前后端分离,数据请求用axios,现在有个问题,想前端弄验证码,jfianl自带的验证码还能使用吗?

评论区

JFinal

2018-03-30 15:42

当然可以,在 img 的 src 中直接指向 action ,而 action 中直接 renderCaptcha()

lyq027

2018-03-30 15:47

@JFinal 已解决,jfinal真心强大。感谢

liugz

2019-08-16 00:36

@JFinal app中没有cookie,如何获取captchaKey校验验证码

JFinal

2019-08-16 08:23

@liugz 在不支持 cookie 的场景下,参过在 url 中问号挂参,或者表单传参的方式传给服务端

liugz

2019-08-16 13:23

@JFinal 刚看了下源码,没太明白,
如果前端不支持cookie,那么后台renderCaptcha()给前端 组件上后,后台如何获取验证码的key传给前端的?
否则用户在前端输入验证码传给后端进行校验时,后端不知道验证码的key无法进行校验吧,
源码上这个校验方法:public static boolean validate(String captchaKey, String userInputString) {...}

JFinal

2019-08-16 14:08

@liugz 这样来简单理解:
1:以前的验证码的 key 是存放在 cookie 中的,现在 cookie 不能用的,需要扩展一个 MyCaptchaRender

2:在扩展出来的 MyCaptchaRender 中原先的:
Cookie cookie = new Cookie(captchaName, captcha.getKey());
改成:
request.setAttribute(captchaName, captcha.getKey());

3:在页面中拿到这个 captchaName 的值,并放在隐藏表单域中,或者问号挂参的方式在提交的时候将该值提交到服务端,例如:
localhost/action?captchaName=xxxx

4:在服务端仿照 validateCaptcha(...) 方法,将原来从 cookie 取值的方式改成使用下面的方式取:
getPara(captchaName);

总之,就是将原先通过 cookie 存取的代码改成使用 controller 中的 HttpServletRequest

liugz

2019-08-16 14:28

好的谢谢,我想也只能额外扩展一个方法了

JFinal

2019-08-16 14:42

@liugz 扩展出来以后的使用是非常简单的:
render(new MyCaptchaRender());