最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Springboot如何使用filter對request body參數(shù)進行校驗

 更新時間:2022年03月15日 10:23:08   作者:Jordan csdn  
這篇文章主要介紹了Springboot如何使用filter對request body參數(shù)進行校驗,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用filter對request body參數(shù)進行校驗

@Slf4j
public class ParameterCheckServletRequestWrapper extends HttpServletRequestWrapper {
    private byte[] requestBody;
    private Charset charSet;
    public ParameterCheckServletRequestWrapper(HttpServletRequest request) {
        super(request);
        //緩存請求body
        try {
            String requestBodyStr = getRequestPostStr(request);
            if (StringUtils.isNotBlank(requestBodyStr)) {
                JSONObject resultJson = JSONObject.fromObject(requestBodyStr.replace("\"", "'"));
                Object[] obj = resultJson.keySet().toArray();
                for (Object o : obj) {
                    resultJson.put(o, StringUtils.trimToNull(resultJson.get(o).toString()));
                }
                requestBody = resultJson.toString().getBytes(charSet);
            } else {
                requestBody = new byte[0];
            }
        } catch (IOException e) {
            log.error("", e);
        }
    }
    public String getRequestPostStr(HttpServletRequest request)
            throws IOException {
        String charSetStr = request.getCharacterEncoding();
        if (charSetStr == null) {
            charSetStr = "UTF-8";
        }
        charSet = Charset.forName(charSetStr);
        return StreamUtils.copyToString(request.getInputStream(), charSet);
    }
    /**
     * 重寫 getInputStream()
     */
    @Override
    public ServletInputStream getInputStream() {
        if (requestBody == null) {
            requestBody = new byte[0];
        }
        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(requestBody);
        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();
            }
        };
    }
    /**
     * 重寫 getReader()
     */
    @Override
    public BufferedReader getReader() {
        return new BufferedReader(new InputStreamReader(getInputStream()));
    }
}
public class ParameterCheckFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        ParameterCheckServletRequestWrapper myWrapper = new ParameterCheckServletRequestWrapper((HttpServletRequest) servletRequest);
        filterChain.doFilter(myWrapper, servletResponse);
    }
    @Override
    public void destroy() {
    }
}
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean authFilterRegistrationBean() {
        FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setName("parameterCheckFilter");
        registrationBean.setFilter(new ParameterCheckFilter());
        registrationBean.setOrder(1);
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }
}

通過filter修改body參數(shù)的思路

知識點

1、HttpServletRequestWrapper

2、filter

步驟

1、新建MyHttpServletRequestWrapper繼承HttpServletRequestWrapper

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.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
/**
?* @author xiaokang
?* @description
?* @date 2021/6/11 10:56
?*/
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
? ? private String tempBody;
? ? public MyHttpServletRequestWrapper(HttpServletRequest request) {
? ? ? ? super(request);
? ? ? ? this.tempBody = getBody(request);
? ? ? ? System.out.println(tempBody);
? ? }
? ? /**
? ? ?* 獲取請求體
? ? ?* @param request 請求
? ? ?* @return 請求體
? ? ?*/
? ? private String getBody(HttpServletRequest request) {
? ? ? ? try {
? ? ? ? ? ? ServletInputStream 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.parseObject(tempBody, MonitorPointQueryPara.class);
? ? ? ? para.setName("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 ServletInputStream getInputStream() throws IOException {
? ? ? ? // 創(chuàng)建字節(jié)數(shù)組輸入流
? ? ? ? final ByteArrayInputStream bais = new ByteArrayInputStream(tempBody.getBytes(Charset.defaultCharset()));
? ? ? ? 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() throws IOException {
? ? ? ? ? ? ? ? return bais.read();
? ? ? ? ? ? }
? ? ? ? };
? ? }
}

1.新建MyFilter 繼承 Filter

2.添加@WebFilter注解

3.啟動類添加@ServletComponentScan(如下)

package com.orisdom.modules.common.filter;
import org.springframework.core.annotation.Order;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
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
?*/
@WebFilter
public class MyFilter implements Filter {
? ? @Override
? ? public void init(FilterConfig filterConfig) throws ServletException {
? ? }
? ? @Override
? ? public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    
? ? ? ? MyHttpServletRequestWrapper myHttpServletRequestWrapper = new MyHttpServletRequestWrapper((HttpServletRequest) servletRequest);
     // 相當(dāng)于賦值
? ? ? ? myHttpServletRequestWrapper.getBody();
     // 自己定義的MyHttpServletRequestWrapper
? ? ? ? filterChain.doFilter(myHttpServletRequestWrapper, servletResponse);
? ? ? ? System.out.println(11111111);
? ? }
? ? @Override
? ? public void destroy() {
? ? }
}

沒加之前

加了之后

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

邻水| 宕昌县| 娄底市| 高雄市| 汉阴县| 铜梁县| 新邵县| 青田县| 和顺县| 康马县| 汕头市| 乌拉特前旗| 科尔| 诸城市| 临西县| 日土县| 黄山市| 科尔| 顺昌县| 报价| 鄂州市| 乌拉特前旗| 奇台县| 吉首市| 白水县| 长岭县| 察雅县| 满城县| 铁力市| 章丘市| 南雄市| 河间市| 临海市| 资源县| 赫章县| 比如县| 桃园市| 且末县| 湾仔区| 庆阳市| 江都市|