欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中的HttpServletRequestWrapper用法解析

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

一.HttpServletRequestWrapper

1.為什么會有HttpServletRequestWrapper類

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

2.原理

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

3.實戰(zhàn)

給所有方法自動提供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前端沒傳,但是因為我們在過濾器設(shè)值了name的值所以在controller打印出了name的值,此方法也可以去修改原有參數(shù)的值。

二.HttpServletRequest的getInputStream方法和getParameter方法

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

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

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

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

相關(guān)文章

  • IDEA 2020.1 for Mac 下載安裝配置及出現(xiàn)的問題小結(jié)

    IDEA 2020.1 for Mac 下載安裝配置及出現(xiàn)的問題小結(jié)

    這篇文章主要介紹了IDEA 2020.1 for Mac 下載安裝配置及出現(xiàn)的問題小結(jié),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 編譯大型Java項目class沖突導致報錯的解決方案

    編譯大型Java項目class沖突導致報錯的解決方案

    這篇文章給大家盤點編譯大型項目class沖突導致報錯的解決方案,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-10-10
  • Java的Dialog和FileDialog你知道啊

    Java的Dialog和FileDialog你知道啊

    這篇文章主要為大家詳細介紹了Java的Dialog和FileDialog,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Java編程實現(xiàn)計算兩個日期的月份差實例代碼

    Java編程實現(xiàn)計算兩個日期的月份差實例代碼

    這篇文章主要介紹了Java編程實現(xiàn)計算兩個日期的月份差實例代碼,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 前后端分離跨域springBoot跨域有效解決問題

    前后端分離跨域springBoot跨域有效解決問題

    這篇文章主要介紹了前后端分離跨域springBoot跨域有效解決問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java.net.ConnectException: Connection refused問題解決辦法

    java.net.ConnectException: Connection refused問題解決辦法

    這篇文章主要介紹了java.net.ConnectException: Connection refused問題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • java中將漢字轉(zhuǎn)換成拼音的實現(xiàn)代碼

    java中將漢字轉(zhuǎn)換成拼音的實現(xiàn)代碼

    java中將漢字轉(zhuǎn)換成拼音的實現(xiàn)代碼。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Spring中的Actuator使用詳解

    Spring中的Actuator使用詳解

    這篇文章主要介紹了Spring中的Actuator使用詳解,在生產(chǎn)環(huán)境中運行的程序,并不總是穩(wěn)定、安靜、正確的,往往會遇到各式各樣的現(xiàn)場狀況,這個時候,就需要獲取該程序足夠多的運行狀態(tài)信息,然后分析并對其進行有效管理,需要的朋友可以參考下
    2023-09-09
  • Spring Boot使用Servlet及Filter過程詳解

    Spring Boot使用Servlet及Filter過程詳解

    這篇文章主要介紹了Spring Boot使用Servlet及Filter過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Spring框架學習常用注解匯總

    Spring框架學習常用注解匯總

    這篇文章主要為大家介紹了Spring框架學習中一些經(jīng)常用的注解匯總及示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10

最新評論