前后端分离,还能使用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());

JFinal

2020-08-06 10:08

@贺月月 基本照抄现有的 CaptcahRender()即可

你好啊世界

2020-12-31 14:34

太好了,今天刚好用到~

konguwmang

2022-02-15 11:54

@JFinal 大佬,这一段没有理解, img 的 src指向renderCaptcha(); 而form的action指向login方法。前后端分离时想要处理验证码验证问题该怎么做呢?

热门反馈

扫码入社