中文乱码 和 验证码验证错误 问题

来源:3-4 引入kaptcha实现验证码

hsbzzhz

2019-08-02 21:17:02

老师您好,

1. 换到路由路径访问html页面以后,中文就都变成了乱码:http://img.mukewang.com/climg/5d4436a2000161d113690866.jpg

2. 验证码验证错误

http://img.mukewang.com/climg/5d4436e90001886416580840.jpg

// 获取表单里输入的验证码
var verifyCodeActual = $('#j_captcha').val();
if (!verifyCodeActual) {
    $.toast('请输入验证码!');
    return;
}
formData.append('verifyCodeActual', verifyCodeActual);
package com.imooc.o2o.util;

import javax.servlet.http.HttpServletRequest;

public class CodeUtil {
    /**
     * 检查验证码是否和预期相符
     *
     * @param request
     * @return
     */
    public static boolean checkVerifyCode(HttpServletRequest request) {
        String verifyCodeExpected = (String) request.getSession()
                .getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
        String verifyCodeActual = HttpServletRequestUtil.getString(request, "verifyCodeActual");
        if (verifyCodeActual == null || !verifyCodeActual.equals(verifyCodeExpected)) {
            return false;
        }
        return true;
    }
}
@RequestMapping(value = "/registershop",method = RequestMethod.POST)
    @ResponseBody
    private Map<String, Object> registerShop(HttpServletRequest request) {
        Map<String, Object> modelMap = new HashMap<String, Object>();
        if (!CodeUtil.checkVerifyCode(request)) {
            modelMap.put("success", false);
            modelMap.put("errMsg", "输入了错误的验证码");
            return modelMap;
        }


写回答

6回答

芝芝兰兰

2019-08-04

同学你好。

1、首先是字符集的问题,鉴于同学说,index页面是显示正常的,但shopoperation页面是乱码。并且,shopoperation页面中,从后台获取的值的中文是没有乱码的。

1)可以猜想两个页面的编码并不一样。同学可以看看自己的shopoperation页面的编码是什么。将其更改为index页面的编码试试:

http://img.mukewang.com/climg/5d46b5b80001d17b19201045.jpg

2)如果不能修改,打开设置,将编码全部改为utf-8,然后重新编译

http://img.mukewang.com/climg/5d46b7080001a03f12790880.jpg

使用 maven 的 clean install 来重新生成target文件:

http://img.mukewang.com/climg/5d46b7be000123f419201045.jpg

2、有关验证码问题:

1)看到同学获取的参数截图,在想同学是否是js中有错误,同学可以检查一下isEdit是否正确:

http://img.mukewang.com/climg/5d46baa100010f6804710046.jpg

2)然后使用断点来查看,提交时验证码是否包含其中:

使用F12开发者工具,找到source窗口,找到js文件,点击行号打断点,然后填写好表单,点击提交,即可触发断点,页面会暗下来,会出现悬浮窗,此时将鼠标悬停在存储验证码的位置,可以看到验证码值是否顺利获取,如果没有获取,那么是html或者js有问题,可以检查下id为j_captcha的标签。

http://img.mukewang.com/climg/5d46ba7a0001da5419200927.jpg

祝学习愉快~

0

hsbzzhz

提问者

2019-08-03

回复柯南老师,

老师你好,

1. 字符集改在这里了

http://img.mukewang.com/climg/5d457d55000101e214880535.jpg

2. 参数跟老师的debug出来的好像不太一样

 http://img.mukewang.com/climg/5d457d940001f20f14870712.jpg

0

好帮手慕柯南

2019-08-03

同学你好!

  1. 乱码问题:

    1)建议同学将字符过滤器放在xml的最上面

    2)同学查看一下自己所使用的浏览器是什么编码集。更改为utf-8。

  2. 验证码问题:

    获取到的验证码为NUll:

    1)同学先检查前台是否有传值,在Controller中打一个断点,看一下request中验证码是否为NUll:

    http://img.mukewang.com/climg/5d4545d00001c36e14520624.jpg


    2)如果不为null,可能是 HttpServletRequestUtil.getString()方法中有问题:

    http://img.mukewang.com/climg/5d45426b000116da08670220.jpg

    3)如果为null,说明同学的值前台没有传过来。同时同学检查一下前后台的verifyCodeActual是否有拼写错误。确保前台取值、保存值正确。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0
hsbzzhz
h 通过调试现在在controller里能取到验证码了,但是提交后会报POST http://localhost:8080/o2o/shopadmin/registershop?_=1564840389207 500 请问老师这大概是什么原因呢
h019-08-03
共2条回复

hsbzzhz

提问者

2019-08-03

在这里更新我的问题,js里是可以取到验证码的

但是在Controller里验证的时候就取不到验证码了,是null

http://img.mukewang.com/climg/5d45305c000180f611630315.jpg

时间隔太久了 前面怎么写的都忘了,有哪位知道这个问题怎么解决 请告知谢谢

0

hsbzzhz

提问者

2019-08-03

请老师帮忙看一下,谢谢  手动@老师,

http://img.mukewang.com/climg/5d4508010001fb1812880452.jpg

http://img.mukewang.com/climg/5d45080300012a3517620261.jpg

http://img.mukewang.com/climg/5d45080800019afd15450791.jpg

http://img.mukewang.com/climg/5d45082e0001321912560604.jpg

回复柯南老师,

尝试了在xml里添加过滤器,html页面里也指定了字符集,还是乱码;打印出来了验证码和图片里的一致

0

好帮手慕柯南

2019-08-03

同学你好!

  1. 同学的html页面是否指定了编码集

    http://img.mukewang.com/climg/5d44f5040001106303480093.jpg

  2. 如果制定了,可以在xml文件中添加一下字符过滤器测试一下:

<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

2.看同学的代码验证码这里没有问题。这里的验证码区分大大小写。同学是否大小写有误呢。如果还是有问题,建议同学将传到后台以及后台获取到生成的验证码的值。打印输出对比一下。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

0
hsbzzhz
h 老师,关于验证码的问题,我照您的指导去操作了一下,发现js里是可以取到验证码的,但是在Controller里验证的时候就取不到验证码了
h019-08-03
共2条回复

0 学习 · 8263 问题

查看课程