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

Java中的HttpServletRequestWrapper用法解析

 更新時(shí)間:2024年01月10日 08:30:22   作者:愛(ài)學(xué)習(xí)的小白菜!  
這篇文章主要介紹了Java中的HttpServletRequestWrapper用法解析,HttpServletRequest 對(duì)參數(shù)值的獲取實(shí)際調(diào)的是org.apache.catalina.connector.Request,沒(méi)有提供對(duì)應(yīng)的set方法修改屬性,所以不能對(duì)前端傳來(lái)的參數(shù)進(jìn)行修改,需要的朋友可以參考下

一.HttpServletRequestWrapper

1.為什么會(huì)有HttpServletRequestWrapper類

HttpServletRequest 對(duì)參數(shù)值的獲取實(shí)際調(diào)的是org.apache.catalina.connector.Request,沒(méi)有提供對(duì)應(yīng)的set方法修改屬性,所以不能對(duì)前端傳來(lái)的參數(shù)進(jìn)行修改,實(shí)際場(chǎng)所像過(guò)濾xss攻擊,獲取認(rèn)證token統(tǒng)一去除token前綴等需要進(jìn)行請(qǐng)求參數(shù)的處理,此時(shí)HttpServletRequestWrapper 就應(yīng)運(yùn)而生。

2.原理

HttpServletRequestWrapper 采用裝飾者模式對(duì)HttpServletRequest進(jìn)行包裝,我們可以通過(guò)繼承HttpServletRequestWrapper 類去重寫(xiě)getParameterValues,getParameter等方法,實(shí)際還是調(diào)用HttpServletRequest的相對(duì)應(yīng)方法,但是可以對(duì)方法的結(jié)果進(jìn)行改裝。

3.實(shí)戰(zhàn)

給所有方法自動(dòng)提供token字段參數(shù)

3.1 新增wrapper類

/**
 * @Auther 
 * @Date 2023-06-06 8:38
 */
public class MyHttpServletRequestWrapper extends HttpServletRequestWrapper {
    /**
     * 定義參數(shù)
     */
    private Map<String, String[]> parameterMaps;
    /**
     * @param request
     */
    public MyHttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
        parameterMaps = new HashMap<>(request.getParameterMap());
    }
    @Override
    public String[] getParameterValues(String name) {
        String[] values = parameterMaps.get(name);
        if (values == null) {
            values = super.getParameterValues(name);
        }
        return values;
    }
    /**
     * 設(shè)置參數(shù)
     * @param name
     * @param value
     */
    public void setParameter(String name, String... value) {
        parameterMaps.put(name, value);
    }
}

3.2新增 filter類傳遞MyHttpServletRequestWrapper

/**
 * @Auther 
 * @Date 2023-06-06 8:38
 */
@WebFilter(urlPatterns = {"/**"})
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        MyHttpServletRequestWrapper MyHttpServletRequest = new MyHttpServletRequestWrapper((HttpServletRequest) request);
        MyHttpServletRequest.setParameter("name", "zhangsan");
        chain.doFilter(MyHttpServletRequest, response);
    }
}

3.3結(jié)果

結(jié)果可以看到 name前端沒(méi)傳,但是因?yàn)槲覀冊(cè)谶^(guò)濾器設(shè)值了name的值所以在controller打印出了name的值,此方法也可以去修改原有參數(shù)的值。

二.HttpServletRequest的getInputStream方法和getParameter方法

根據(jù)Servlet規(guī)范,如果同時(shí)滿足下列條件,則請(qǐng)求體(Entity)中的表單數(shù)據(jù),將被填充到request的parameter集合中(request.getParameter系列方法可以讀取相關(guān)數(shù)據(jù)):

  • 這是一個(gè)HTTP/HTTPS請(qǐng)求
  • 請(qǐng)求方法是POST(querystring無(wú)論是否POST都將被設(shè)置到parameter中)
  • 請(qǐng)求的類型(Content-Type頭)是application/x-www-form-urlencoded
  • Servlet調(diào)用了getParameter系列方法

如果上述條件沒(méi)有同時(shí)滿足,則相關(guān)的表單數(shù)據(jù)不會(huì)被設(shè)置進(jìn)request的parameter集合中,相關(guān)的數(shù)據(jù)可以通過(guò)request.getInputStream()來(lái)訪問(wèn)。反之,如果上述條件均滿足,相關(guān)的表單數(shù)據(jù)將不能再通過(guò)request.getInputStream()來(lái)讀取。

到此這篇關(guān)于Java中的HttpServletRequestWrapper用法解析的文章就介紹到這了,更多相關(guān)HttpServletRequestWrapper用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java可視化之實(shí)現(xiàn)文本的加密和解密

    Java可視化之實(shí)現(xiàn)文本的加密和解密

    這篇文章主要介紹了Java可視化之實(shí)現(xiàn)文本的加密和解密,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java中的位運(yùn)算符全解

    Java中的位運(yùn)算符全解

    這篇文章主要為大家詳細(xì)介紹了Java中的位運(yùn)算符,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • SpringBoot使用編程方式配置DataSource的方法

    SpringBoot使用編程方式配置DataSource的方法

    這篇文章主要介紹了SpringBoot使用編程方式配置DataSource的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 使用feign調(diào)用接口時(shí)調(diào)不到get方法的問(wèn)題及解決

    使用feign調(diào)用接口時(shí)調(diào)不到get方法的問(wèn)題及解決

    這篇文章主要介紹了使用feign調(diào)用接口時(shí)調(diào)不到get方法的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中MessageFormat的使用詳解

    Java中MessageFormat的使用詳解

    本文主要介紹了Java中MessageFormat的使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • SpringBoot實(shí)現(xiàn)單文件上傳

    SpringBoot實(shí)現(xiàn)單文件上傳

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)單文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Spring?Boot源碼實(shí)現(xiàn)StopWatch優(yōu)雅統(tǒng)計(jì)耗時(shí)

    Spring?Boot源碼實(shí)現(xiàn)StopWatch優(yōu)雅統(tǒng)計(jì)耗時(shí)

    這篇文章主要為大家介紹了Spring?Boot源碼實(shí)現(xiàn)StopWatch優(yōu)雅統(tǒng)計(jì)耗時(shí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 一文揭秘Java內(nèi)存模型的隱匿陷阱與解決方案

    一文揭秘Java內(nèi)存模型的隱匿陷阱與解決方案

    這篇文章主要為大家詳細(xì)介紹了Java中內(nèi)存模型的隱匿陷阱與解決方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-06-06
  • 解決使用gateway后靜態(tài)資源失效的問(wèn)題

    解決使用gateway后靜態(tài)資源失效的問(wèn)題

    這篇文章主要介紹了解決使用gateway后靜態(tài)資源失效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 分布式消息隊(duì)列RocketMQ概念詳解

    分布式消息隊(duì)列RocketMQ概念詳解

    RocketMQ?是阿里開(kāi)源的分布式消息中間件,跟其它中間件相比,RocketMQ?的特點(diǎn)是純JAVA實(shí)現(xiàn),是一套提供了消息生產(chǎn),存儲(chǔ),消費(fèi)全過(guò)程API的軟件系統(tǒng),本文詳細(xì)介紹了分布式消息隊(duì)列RocketMQ概念,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

北宁市| 石楼县| 宁波市| 班戈县| 高雄市| 周宁县| 天柱县| 砚山县| 南充市| 柯坪县| 云林县| 汾阳市| 弥渡县| 确山县| 凌海市| 昌黎县| 武定县| 灌云县| 丹凤县| 肇州县| 喀喇| 岫岩| 常宁市| 靖远县| 石景山区| 德江县| 九江县| 方正县| 德庆县| 化隆| 巴东县| 精河县| 阿城市| 白玉县| 新巴尔虎右旗| 大厂| 余姚市| 平江县| 丹江口市| 奎屯市| 彩票|