转载

SpringBoot设置Filter过滤请求参数

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。

作者|杨旭

来源|https://my.oschina.net/alexnine

问题描述

在使用springBoot进行项目开发时,遇到的需求是需要对用户上传的数据进行过滤,比如去除“< ' ^ %”等敏感字符。 自己在做的时候想到了两个办法去实现。

方法一

写一个过滤方法,在有数据操作的地方调用方法进行过滤,将过滤以后的字符串重新赋值。 在百度中找到了一个前辈写的blog,觉得很不错就直接拿过来用了。

SpringBoot设置Filter过滤请求参数

然后在需要进行操作的地方调用就可以了,但是每次都调用就显得有些麻烦和尴尬。 于是就进行尝试第二个办法。

方法二

在request到达controller之前,对参数进行过滤,将特殊字符过滤掉后,再将数据写入request。 首先是新建一个SecFilter类,实现Filter接口,重写其中的方法,在dofilter中实现过滤。但是在实际的操作中遇到了一些问题。在使用 并对返回值进行操作和修改的时候出现了。

java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap 

查询相关资料后得知,以上方法的返回值是不可变的,不能直接进行操作与赋值。 所以需要把返回值赋值给一个新的map即可。

new HashMap(request.getParameterMap());

在对得到的数据进行操作完成后,需要把过滤以后的map写到request里面,通过百度和Google查询资料以后,找到了解决办法。 要把修改以后的map加入到request中需要

SpringBoot设置Filter过滤请求参数

SpringBoot设置Filter过滤请求参数

然后在filter里面的操作是:

SpringBoot设置Filter过滤请求参数

通过以上的操作即可实现修改请求参数。

总结

不过,在使用以上方法后,虽然实现了功能需求,但是还是有一些不对的地方,这种做法仅供参考,还需要进一步的优化。或者使用其他更好的办法实现,欢迎大家指正。

where2go 团队

微信号:算法与编程之美

SpringBoot设置Filter过滤请求参数

长按识别二维码关注我们!

温馨提示: 点击页面右下角 “写留言” 发表评论,期待您的参与!期待您的转发!

原文  http://mp.weixin.qq.com/s?__biz=MzI5MTQ5NDY1MA==&mid=2247487299&idx=1&sn=a1ba86e5d941c8d2a32e969ce04f33c4
正文到此结束
Loading...