首页 > 作文

Springboot如何使用filter对request body参数进行校验

更新时间:2023-04-06 03:52:26 阅读: 评论:0

使用filter对request body参数进行校验

@slf4jpublic class parametercheckrvletrequestwrapper extends httprvletrequestwrapper {    private byte[] requestbody;    private chart chart;    public parametercheckrvletrequestwrapper(httprvletrequest request) {        super(request);        //缓存请求body        try {            string requestbodystr = getrequestpoststr(request);            if (stringutils.isnotblank(requestbodystr)) {                jsonobject resultjson = jsonobject.fromobject(requestbodystr.replace("\"", "'"));                object[] obj = resultjson.keyt().toarray();                for (object o : obj) {                    resultjson.put(o, stringutils.trimtonull(resultjson.get(o).tostring()));            追梦 作文    }                requestbody = resultjson.tostring().getbytes(chart);            } el {                requestbody = new byte[0];            }        } catch (ioexception e) {            log.error("", e);        }    }    public string getrequestpoststr(httprvletrequest request)            throws ioexception {        string chartstr = request.getcharacterencoding();        if (chartstr == null) {            chartstr = "utf-8";        }        chart = chart.forname(chartstr);        return streamutils.copytostring(request.getinputstream(), chart);    }    /**     * 重写 getinputstream()     */    @override    public rvletinputstream getinputstream() {        if (requestbody == null) {            requestbody = new byte[0];        }        final bytearrayinputstream bytearrayinputstream = new bytearrayinputstream(requestbody);        return new rvletinputstream() {            @override            public boolean isfinished() {                return fal;            }            @override            public boolean isready() {                return fal;            }            @override            public void treadlistener(readlistener readlistener) {            }            @override            public int read() {                return bytearrayinputstream.read();            }        };    }    /**     * 重写 getreader()     */    @override    public bufferedreader getreader() {        return new bufferedreader(new inputstreamreader(getinputstream()));    }}
public class parametercheckfilter implements filter {    @override    public void init(filterconfig filterconfig) throws rvletexception {    }    @override    public void dofilter(rvletrequest rvletrequest, rvletrespon rvletrespon, filterchain filterchain) throws ioexception, rvletexception {        parametercheckrvletrequestwrapper mywrapper = new parametercheckrvletrequestwrapper((httprvletrequest) rvletrequest);        filterchain.dofilter(mywrapper, rvletrespon);    }    @override    public void destroy() {    }}
@configurationpublic class filterconfig {    @bean    public filterregistrationbean authfilterregistrationbean() {        filterregistrationbean<filter> registrationbean = new filterregistrationbean<>();        registrationbean.tname("parametercheckfilter");        registrationbean.tfilter(new parametercheckfilter());        registrationbean.torder(1);        registrationbean.addurlpatterns("/*");        return registrationbean;    }}

通过filter修改body参数的思路

知识点

1、httprvletrequestwrapper

2、filter

步骤

1、新建myhttprvletrequestwrapper继承httprvletrequestwrapper

2、讲传入的body赋值给自己的body(如下)

package com.orisdom.modules.common.filter;import com.alibaba.fastjson.json;import com.alibaba.fastjson.jsonobject;import com.orisdom.modules.monitor.dto.input.monitorpointquerypara;import javax.rvlet.readlistener;impor电脑突然自动关机t javax.rvlet.rvletinputstream;import javax.rvlet.http.httprvletrequest;import javax.rvlet.http.httprvletrequestwrapper;import java.io.bufferedreader;import java.io.bytearrayinputstream;import java.io.ioexception;import java.io.inputstreamreader;import java.nio.chart.chart;/*** @author xiaokang* @description* @date 2021/6/11 10:56*/public class myhttprvletrequestwrapper浪淘沙其一 extends httprvletrequestwrapper {  private string tempbody;  public myhttprvletrequestwrapper(httprvletrequest request) {    super(request);    this.tempbody = getbody(request);    system.out.println(tempbody);  }  /**  * 获取请求体  * @param request 请求  * @return 请求体  */  private string getbody(httprvletrequest request) {    try {      rvletinputstream stream = request.getinputstream();      string read = "";      stringbuilder stringbuilder = new stringbuilder();      byte[] b = new byte[1024];      int lens = -1;      while ((lens = stream.read(b)) > 0) {        stringbuilder.append(new string(b, 0, lens));      }      return stringbuilder.tostring();    } catch (ioexception e) {      throw new runtimeexception(e);    }  }  /**  * 获取请求体  * @return 请求体  */  public string getbody() {    monitorpointquerypara para = json.parobject(tempbody, monitorpointquerypara.class);    para.tname("1232321321");    tempbody = jsonobject.tojsonstring(para);    return tempbody;  }  /**  * 需要重写这个方法  * @return  * @throws ioexception  */  @override  public bufferedreader getreader() throws ioexception {    return new bufferedreader(new inputstreamreader(getinputstream()));  }  /**  * 需要重写这个方法  * @return  * @throws ioexception  */  @override  public rvletinputstream getinputstream() throws ioexception {    // 创建字节数组输入流    final bytearrayinputstream bais = new bytearrayinputstream(tempbody.getbytes(chart.defaultchart()));    return new rvletinputstream() {      @override      public boolean isfinished() {        return fal;      }      @override      public boolean isready() {        return fal;      }      @override      public void treadlistener(readlist热点题材ener readlistener) {      }      @override      public int read() throws ioexception {        return bais.read();      }    };  }}

1.新建myfilter 继承 filter

2.添加@webfilter注解

3.启动类添加@rvletcomponentscan(如下)

package com.orisdom.modules.common.filter;import org.springframework.core.annotation.order;import javax.rvlet.*;import javax.rvlet.annotation.webfilter;import javax.rvlet.http.httprvletrequest;import javax.rvlet.http.httprvletrequestwrapper;import java.io.bufferedreader;import java.io.ioexception;import java.util.hashmap;import java.util.map;/*** @author xiaokang* @description* @date 2021/6/11 9:47*/@webfilterpublic class myfilter implements filter {  @override  public void init(filterconfig filterconfig) throws rvletexception {  }  @override  public void dofilter(rvletrequest rvletrequest, r小学一年级口算题vletrespon rvletrespon, filterchain filterchain) throws ioexception, rvletexception {        myhttprvletrequestwrapper myhttprvletrequestwrapper = new myhttprvletrequestwrapper((httprvletrequest) rvletrequest);     // 相当于赋值    myhttprvletrequestwrapper.getbody();     // 自己定义的myhttprvletrequestwrapper    filterchain.dofilter(myhttprvletrequestwrapper, rvletrespon);    system.out.println(11111111);  }  @override  public void destroy() {  }}

没加之前

加了之后

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。

本文发布于:2023-04-06 03:52:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d8877ba8567bcce8cd237a3bcda429f4.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Springboot如何使用filter对request body参数进行校验.doc

本文 PDF 下载地址:Springboot如何使用filter对request body参数进行校验.pdf

标签:重写   赋值   自己的   参数
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图