SpringBoot中如何在过滤器中取post的参数值

简介: SpringBoot中如何在过滤器中取post的参数值

写在前面


我们在上篇文章中说到了如何在过滤器中取get请求的参数值,也给出了一些方法的应用示例,大家如果感兴趣,可以看一下。


SpringBoot中如何在过滤器中取get的参数值


今天我们要来学习的也是同样的系列,那就是如何在过滤器中取post请求的参数值。


应用场景


如果获取到post请求的参数,我们一般都在过滤器,或者是拦截器,甚至解析器中想要修改相关的参数,或者是在原来的基础上增加一些参数的话。


那么现在我们就要用到接下来的解决方案了,一起来看一下吧。


解决方案


我们一般都是通过继承HttpServletRequestWrapper类,来实现具体的参数处理方法。


假设我们现在要在过滤器中获取post请求的数据。


首先要创建一个RequestWrapper.java类,下面我们就直接先贴一下代码了。


@Data
public class RequestWrapper extends HttpServletRequestWrapper {
    private byte[] body;
    public RequestWrapper(HttpServletRequest request) throws IOException {
        super(request);
        body = this.toByteArray(request.getInputStream());
    }
    private byte[] toByteArray(ServletInputStream inputStream) throws IOException {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024 * 4];
        int n = 0;
        while ((n = inputStream.read(buffer)) != -1) {
            out.write(buffer, 0, n);
        }
        return out.toByteArray();
    }
    @Override
    public BufferedReader getReader() {
        return new BufferedReader(new InputStreamReader(getInputStream()));
    }
    @Override
    public ServletInputStream getInputStream() {
        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body);
        return new ServletInputStream() {
            @Override
            public boolean isFinished() {
                return false;
            }
            @Override
            public boolean isReady() {
                return false;
            }
            @Override
            public void setReadListener(ReadListener readListener) {
            }
            @Override
            public int read() {
                return byteArrayInputStream.read();
            }
        };
    }
}


上述类中,继承了HttpServletRequestWrapper类,继承重写了父类的getReader、getInputStream方法,其实我们从字面意思上来看也能看出来相关的意思。


getReader():读取数据并返回一个BufferReader类。


getInputStream():获取文件输入流。


有了这个类,我们就可以将Post请求的参数值成功的拿出来了,让我们且接着看。


在过滤器的方法中,我们能拿到request对象,所以我们就不贴出太多代码了,只跟大家说一下重点代码。


RequestWrapper requestWrapper = new RequestWrapper(req);
byte[] bytes = requestWrapper.getBody();
Map<String, String> map = ByteUtils.changeByteToMap(bytes);


我这里使用了一个工具类,之后也和大家分享一下哈,本篇文章里就不赘述了,大家赶紧去试试吧。


相关文章
|
2月前
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
162 4
如何在SpringBoot项目中使用过滤器和拦截器
|
6月前
|
Java Spring 容器
【二十二】springboot整合拦截器实战并对比过滤器
【二十二】springboot整合拦截器实战并对比过滤器
81 0
|
3月前
|
SQL Java 测试技术
在Spring boot中 使用JWT和过滤器实现登录认证
在Spring boot中 使用JWT和过滤器实现登录认证
202 0
|
4天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
18 2
|
22天前
|
Java API Spring
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中过滤器的基础知识和实战项目应用的教程。
20 0
springboot学习六:Spring Boot2.x 过滤器基础入门&实战项目场景实现
|
2月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
39 6
|
5月前
|
Java API 数据安全/隐私保护
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
在Spring Boot中,过滤器(Filter)是一种非常有用的组件
80 6
|
4月前
|
安全 Java Spring
Spring Boot中的自定义过滤器
Spring Boot中的自定义过滤器
|
5月前
|
安全 Java Spring
Spring Boot中的自定义过滤器
Spring Boot中的自定义过滤器
|
6月前
|
存储 前端开发 NoSQL
【二十一】springboot整合过滤器实战
【二十一】springboot整合过滤器实战
40 0