springboot通过过滤器修改数据形式

针对现有后端接口的安全机制和开发不便,本文介绍了如何利用SpringBoot的过滤器来改造接口,以支持Swagger开发文档,同时不改变前端调用方式。通过过滤器实现数据转换,确保后端调试功能和条件参数检查,并在正式环境中保持安全性。详细阐述了过滤器的实现逻辑,包括数据流转换、contentType判断及HttpServletRequestWrapper的使用,最终展示了成功运行的效果。
摘要由CSDN通过智能技术生成

使用背景是部门已有一个框架,所有后端接口的数据都有一个时间戳、验证码以及具体的数据串,但后端接口的接口通过代码生成器生成的word文档,可读性比较差,但是修改接口后,需要手工再来修改;后端接口的单元测试需要前端配合才能调试。不友好。
需要改造,引入swagger生成接口文件,但是已有的安全机制必须保持,前端不需要修改。要达到以下目的:
1、无条件支持swagger 开发文档。
2、不改变前端现有的调用方式。
3、增加后端调试功能。
4、增加后端条件参数自动检查。
5、不增加并降低后端开发难度。
经学习,可以通过过滤器将具体的数据串与controller中接口参数对应,在数据检验过滤器后,再进行过滤完成数据转换。而通过swagger调试的接口通过配置绕过数据检验过滤器和转换过滤器。对接口直接访问。在正式环境中不允许这种绕过配置。
前端访问接口均以.action为后缀,而swagger不需要,所以需要有以下配置:

``

`
    public ServletRegistrationBean servletRegistrationBean(DispatcherServlet dispatcherServlet) {
	ServletRegistrationBean<DispatcherServlet> servletServletRegistrationBean = new ServletRegistrationBean<>(dispatcherServlet);
		servletServletRegistrationBean.addUrlMappings("/*");
//		servletServletRegistrationBean.addUrlMappings("*.action");
}
可以在调测环境中过滤的配置:
 <bean id="dataTranslateFilter" class="com.zjhcsoft.zzsoft.base.filters.DataTranslateFilter">
    </bean>
    <bean id="dataTranslateFilterReg" class="org.springframework.boot.web.servlet.FilterRegistrationBean">
        <property name="filter" ref="dataTranslateFilter"/>
        <property name="initParameters">
            <map>
                <entry key="excludeUrls" value="/sysUser/login.action"/>
                <entry key="includeUrls" value="/visitCount/**"/>
            </map>
        </property>
        <property name="urlPatterns">
            <list>
                <value>*.action</value>
            </list>
        </property>
        <property name="name" value="DataTranslateFilter"/>
        <property name="order" value="3"/>
</bean>

数据转换过滤器做了三件事:
1、将参数data的内容转为数据流。
2、如果参数data的json元素小于等于1时,增加一个参数,contentType不修改。
3、如果参数data的json元素大于1时,contentType修改为application/json。
4、其它参数和内容不变,保持兼容。
上代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值