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

SpringBoot項(xiàng)目攔截器獲取Post方法的請求body實(shí)現(xiàn)

 更新時(shí)間:2022年01月27日 15:06:05   作者:mazaiting  
本文主要介紹了SpringBoot項(xiàng)目攔截器獲取Post方法的請求body,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

1). 存在問題
流只能讀取一次

2). 目標(biāo)
多次讀取流

3). 解決方法
創(chuàng)建包裝類

4). RequestWrapper

package com.mazaiting.redeye.wrapper;
?
import com.mazaiting.redeye.utils.StreamUtil;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
?
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 mazaiting
?* @date 2019-06-27
?* @decription HttpServletRequest 包裝器
?* 解決: request.getInputStream()只能讀取一次的問題
?* 目標(biāo): 流可重復(fù)讀
?*/
@Slf4j
public class RequestWrapper extends HttpServletRequestWrapper {
? ? /**
? ? ?* 日志
? ? ?*/
? ? private static final Logger mLogger = LoggerFactory.getLogger(RequestWrapper.class);
?
? ? /**
? ? ?* 請求體
? ? ?*/
? ? private String mBody;
?
? ? public RequestWrapper(HttpServletRequest request) {
? ? ? ? super(request);
? ? ? ? // 將body數(shù)據(jù)存儲起來
? ? ? ? mBody = getBody(request);
? ? }
?
? ? /**
? ? ?* 獲取請求體
? ? ?* @param request 請求
? ? ?* @return 請求體
? ? ?*/
? ? private String getBody(HttpServletRequest request) {
? ? ? ? try {
? ? ? ? ? ? return StreamUtil.getString(request.getInputStream());
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? mLogger.debug(e.getMessage());
? ? ? ? ? ? throw new RuntimeException(e);
? ? ? ? }
? ? }
?
? ? /**
? ? ?* 獲取請求體
? ? ?* @return 請求體
? ? ?*/
? ? public String getBody() {
? ? ? ? return mBody;
? ? }
?
? ? @Override
? ? public BufferedReader getReader() throws IOException {
? ? ? ? return new BufferedReader(new InputStreamReader(getInputStream()));
? ? }
?
? ? @Override
? ? public ServletInputStream getInputStream() throws IOException {
? ? ? ? // 創(chuàng)建字節(jié)數(shù)組輸入流
? ? ? ? final ByteArrayInputStream bais = new ByteArrayInputStream(mBody.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();
? ? ? ? ? ? }
? ? ? ? };
? ? }
}

5).設(shè)置過濾器(必須)

@Component
@WebFilter(filterName = "HttpServletRequestFilter", urlPatterns = "/")
@Order(10000)
public class HttpServletRequestFilter implements Filter {
? ? @Override
? ? public void init(FilterConfig filterConfig) throws ServletException {
?
? ? }
?
? ? @Override
? ? public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
? ? ? ? ServletRequest requestWrapper = null;
? ? ? ? if(servletRequest instanceof HttpServletRequest) {
? ? ? ? ? ? requestWrapper = new RequestWrapper((HttpServletRequest) servletRequest);
? ? ? ? }
? ? ? ? //獲取請求中的流如何,將取出來的字符串,再次轉(zhuǎn)換成流,然后把它放入到新request對象中
? ? ? ? // 在chain.doFiler方法中傳遞新的request對象
? ? ? ? if(null == requestWrapper) {
? ? ? ? ? ? filterChain.doFilter(servletRequest, servletResponse);
? ? ? ? } else {
? ? ? ? ? ? filterChain.doFilter(requestWrapper, servletResponse);
? ? ? ? }
? ? }
?
? ? @Override
? ? public void destroy() {
?
? ? }
}

6). 使用

/***
?*
?* @author mazaiting
?* @date 2019-06-26
?* @decription Session 攔截器
?*/
public class SessionInterceptor implements HandlerInterceptor {
?
? ? /**
? ? ?* 日志
? ? ?*/
? ? private static final Logger mLogger = LoggerFactory.getLogger(SessionInterceptor.class);
?
? ? @Override
? ? public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
? ? ? ? mLogger.debug("SessionInterceptor");
? ? ? ? // 獲取地址
? ? ? ? String url = request.getRequestURL().toString();
? ? ? ? mLogger.debug("url: " + url);
? ? ? ? // 獲取 session
? ? ? ? HttpSession session = request.getSession();
? ? ? ? String id = session.getId();
? ? ? ? mLogger.debug("sessionId: " + id);
? ? ? ? String requestMethod = request.getMethod();
? ? ? ? mLogger.debug("requestMethod: " + requestMethod);
? ? ? ? String servletPath = request.getServletPath();
? ? ? ? mLogger.debug("servletPath: " + servletPath);
?
? ? ? ? if (isJson(request)) {
? ? ? ? ? ? String body = new RequestWrapper(request).getBody();
? ? ? ? ? ? mLogger.debug("body: " + body);
? ? ? ? }
?
? ? ? ? return true;
? ? }
?
? ? /**
? ? ?* 判斷本次請求的數(shù)據(jù)類型是否為json
? ? ?*
? ? ?* @param request request
? ? ?* @return true: 是 JSON 數(shù)據(jù); false: 非 json 數(shù)據(jù)
? ? ?*/
? ? private boolean isJson(HttpServletRequest request) {
? ? ? ? if (request.getContentType() != null) {
? ? ? ? ? ? return request.getContentType().equals(MediaType.APPLICATION_JSON_VALUE) ||
? ? ? ? ? ? ? ? ? ? request.getContentType().equals(MediaType.APPLICATION_JSON_UTF8_VALUE);
? ? ? ? }
?
? ? ? ? return false;
? ? }
}

到此這篇關(guān)于SpringBoot項(xiàng)目攔截器獲取Post方法的請求body實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot獲取Post方法的請求body內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java之Spring注解開發(fā)案例詳解

    Java之Spring注解開發(fā)案例詳解

    這篇文章主要介紹了Java之Spring注解開發(fā)案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • java如何通過流讀取圖片做base64編碼

    java如何通過流讀取圖片做base64編碼

    這篇文章主要介紹了java如何通過流讀取圖片做base64編碼問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 淺析Java 并發(fā)編程中的synchronized

    淺析Java 并發(fā)編程中的synchronized

    這篇文章主要介紹了Java 并發(fā)編程中的synchronized的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java并發(fā)編程,感興趣的朋友可以了解下
    2020-12-12
  • 基于Java8 函數(shù)式接口理解及測試

    基于Java8 函數(shù)式接口理解及測試

    下面小編就為大家?guī)硪黄贘ava8 函數(shù)式接口理解及測試。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring Cloud Feign的文件上傳實(shí)現(xiàn)的示例代碼

    Spring Cloud Feign的文件上傳實(shí)現(xiàn)的示例代碼

    這篇文章主要介紹了Spring Cloud Feign的文件上傳實(shí)現(xiàn)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 深入學(xué)習(xí)spring cloud gateway 限流熔斷

    深入學(xué)習(xí)spring cloud gateway 限流熔斷

    這篇文章主要介紹了深入學(xué)習(xí)spring cloud gateway 限流熔斷,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中的異步非阻塞AIO模型詳解

    Java中的異步非阻塞AIO模型詳解

    這篇文章主要介紹了Java中的異步非阻塞AIO模型詳解,AIO需要操作系統(tǒng)的支持,在linux內(nèi)核2.6版本中加入了對真正異步IO的支持,java從jdk1.7開始支持AIO,本文提供了部分實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • spring boot jar的啟動原理解析

    spring boot jar的啟動原理解析

    這篇文章主要介紹了 spring boot jar的啟動原理分析,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Java中抽象類的作用及說明

    Java中抽象類的作用及說明

    這篇文章主要介紹了Java中抽象類的作用及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java使用GUI實(shí)現(xiàn)貪吃蛇游戲詳解

    Java使用GUI實(shí)現(xiàn)貪吃蛇游戲詳解

    小時(shí)候經(jīng)常在諾基亞上玩的一個(gè)小游戲-貪吃蛇,你還記得嗎?本篇帶你重溫一下把它實(shí)現(xiàn),做的比較簡單,但還是可以玩的.感興趣的朋友快來看看吧
    2022-05-05

最新評論

新闻| 陇南市| 平江县| 锡林郭勒盟| 高密市| 共和县| 大厂| 扬州市| 荔浦县| 大冶市| 中方县| 平南县| 辰溪县| 大连市| 白河县| 平南县| 乌拉特中旗| 连平县| 乡宁县| 越西县| 昔阳县| 申扎县| 罗山县| 镇沅| 泉州市| 德化县| 启东市| 周至县| 资讯 | 浦北县| 保山市| 罗定市| 新干县| 长岭县| 顺义区| 保亭| 亳州市| 洛宁县| 万源市| 华蓥市| 凤翔县|