报错:HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input

问题:

测试接口发送请求时后端报错:org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unexpected end-of-input: expected close marker for Object (start marker at [Source: (PushbackInputStream); line: 1, column: 1]); nested exception is com.fasterxml.jackson…

出现这个错误的时候postman传的参数格式是这样子的:

在这里插入图片描述

后端代码接收参数是:

在这里插入图片描述

分析:

因为其实这个接口传送的方式是Form表单方式的,而且使用到了@ApiImplicitParam,若有多个参数的话使用@ApiImplicition进行包裹,接收x-www-form-urlencoded类型的关键点就在于@ApiImplicitParam。免去了使用@RequestBody在写一个接收类的繁琐步骤,加上@ApiImplicitParam之后直接接收即可。Form表单方式在Body选项卡中选择x-www-form-urlencoded格式,然后在键值对中填写参数,例如:
name=John
age=30

有关x-www-form-urlencoded格式和json格式的区别,请参考博文

在这里插入图片描述

解决方法:

postman发送请求body变成x-www-form-urlencoded格式,详情查看链接: 详情

后端接收方式修改为ModelAttribute在这里插入图片描述

另:

如果报错XssHttpServletRequestWrapper 接口不符合XSS规则时,也就是你发送的参数是html标签的时候会被认为是XSS攻击,在跨站脚本(XSS)攻击中,攻击者可以在受害者的浏览器中执行恶意脚本。这种攻击通常是通过在网页中插入恶意代码 (JavaScript) 来完成的。攻击者在使用攻击后一般能够:

  1. 修改网页内容
  2. 将用户重定向到其他网站
  3. 访问用户的 Cookie 并利用此信息来冒充用户
  4. 访问有关用户系统的关键信息,例如地理位置,网络摄像头,文件系统
  5. 将木马功能注入应用程序

如果被攻击的用户在应用程序中具有更高的权限。攻击者可以完全控制应用程序,并破坏所有用户及其数据。
常见的 XSS 攻击主要有三种:存储型 XSS 攻击反射型 XSS 攻击DOM-based 型 XSS 攻击。

  1. 存储型主要是将 XSS 代码保存在服务端(数据库、文件系统等),当用户以后再次请求该资源时重新解析该 XSS 代码,从而出现攻击。
  2. 反射型主要发生在一个应用程序使用动态页面向用户显示错误消息时,如果消息中注入了恶意代码就会造成 XSS 反射型攻击。
  3. DOM-based 主要是通过脚本直接修改客户端的 DOM 结构,一般这种都是属于前端 JavaScript 的漏洞。

所以避免 XSS 攻击最有效的办法就是对用户输入的数据进行转义,然后存储到数据库里面。等到视图层渲染 HTML 页面的时候。转义后的文字是不会被当做 JavaScript 执行的,这就可以抵御 XSS攻击。

即在web配置文件中配置XssFilter

${ms.xss.filterUrl}是在appclication.yml配置文件中设置的

在这里插入图片描述
webconfig文件中

	//XSS过滤器
    @Bean
    public FilterRegistrationBean xssFilterRegistration(@Value("${ms.xss.xssEnable:false}") boolean xssEnable,
                                                        @Value("${ms.xss.filterUrl}") String filterUrl,
                                                        @Value("${ms.xss.excludeUrl}") String excludeUrl) {
        XSSEscapeFilter xssFilter = new XSSEscapeFilter();
        Map<String, String> initParameters = new HashMap();
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setName("XSSFilter");
        registration.addUrlPatterns(new String[]{"/*"});
        registration.setOrder(-2147483648);
        xssFilter.includes.add("/**");
        xssFilter.excludes.add(MSProperties.manager.path + "/**");
        if (filterUrl != null && StrUtil.isNotBlank(filterUrl.toString())) {
            xssFilter.includes.addAll(Arrays.asList(filterUrl.toString().split(",")));
        }
        if (excludeUrl != null && StrUtil.isNotBlank(excludeUrl.toString())) {
            xssFilter.excludes.addAll(Arrays.asList(excludeUrl.toString().split(",")));
        }
        initParameters.put("isIncludeRichText", "false");
        registration.setInitParameters(initParameters);
        registration.setFilter(xssFilter);
        registration.setEnabled(xssEnable);
        return registration;
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容来看,这个错误出现在使用`JSON.parse`函数时,表示JSON输入的结尾意外地出现了。这通常发生在传递给`JSON.parse`的字符串不完整或格式不正确时。在这种情况下,可能是因为通过`JSON.stringify`序列化对象时出现了错误,导致传递给`JSON.parse`的字符串不完整。 为了解决这个问题,需要确保在序列化对象时没有出错,并且在传递字符串给`JSON.parse`时没有任何格式问题。请仔细检查代码,确保所有的对象都被正确地序列化为字符串,并且在传递给`JSON.parse`之前没有任何编码或解码问题。 同时,还要确保传递给`JSON.parse`的字符串是完整的,没有任何缺失的部分。如果问题仍然存在,建议在代码中使用调试工具来跟踪变量的值,并检查传递给`JSON.parse`的字符串是否符合预期。 总结来说,`JSON.parse SyntaxError: Unexpected end of JSON input`错误通常是由于传递给`JSON.parse`的字符串不完整或格式不正确导致的。确保正确序列化对象为字符串,并在传递给`JSON.parse`之前检查字符串是否完整和格式正确,以解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [uniapp报错:SyntaxError: Unexpected end of JSON input](https://blog.csdn.net/qq_53742811/article/details/127648107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JSON.parse报错 SyntaxErrorUnexpected end of JSON input](https://blog.csdn.net/qq_51081319/article/details/125990801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值