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

spring使用Filter過濾器對Response返回值進(jìn)行修改的方法

 更新時間:2023年09月14日 15:40:46   作者:謝小濤  
這篇文章主要介紹了spring使用Filter過濾器對Response返回值進(jìn)行修改,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

返回值輸出代理類:這個類主要是為了吧Response里面的返回值獲取到,因為直接Response沒有提供直接拿到返回值的方法。所以要通過代理來取得返回值

package com.channel.filter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
 * 返回值輸出代理類
 * 
 * @Title: ResponseWrapper
 * @Description:
 * @author kokJuis
 * @date 上午9:52:11
 */
public class ResponseWrapper extends HttpServletResponseWrapper
{
    private ByteArrayOutputStream buffer;
    private ServletOutputStream out;
    public ResponseWrapper(HttpServletResponse httpServletResponse)
    {
        super(httpServletResponse);
        buffer = new ByteArrayOutputStream();
        out = new WrapperOutputStream(buffer);
    }
    @Override
    public ServletOutputStream getOutputStream()
        throws IOException
    {
        return out;
    }
    @Override
    public void flushBuffer()
        throws IOException
    {
        if (out != null)
        {
            out.flush();
        }
    }
    public byte[] getContent()
        throws IOException
    {
        flushBuffer();
        return buffer.toByteArray();
    }
    class WrapperOutputStream extends ServletOutputStream
    {
        private ByteArrayOutputStream bos;
        public WrapperOutputStream(ByteArrayOutputStream bos)
        {
            this.bos = bos;
        }
        @Override
        public void write(int b)
            throws IOException
        {
            bos.write(b);
        }
        @Override
        public boolean isReady()
        {
            // TODO Auto-generated method stub
            return false;
        }
        @Override
        public void setWriteListener(WriteListener arg0)
        {
            // TODO Auto-generated method stub
        }
    }
}

過濾器類:

package com.channel.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import com.channel.util.RsaEncryptUtil;
/**
 * 返回值輸出過濾器,這里用來加密返回值
 * 
 * @Title: ResponseFilter
 * @Description:
 * @author kokJuis
 * @date 上午9:52:42
 */
public class ResponseFilter implements Filter
{
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
        throws IOException, ServletException
    {
        ResponseWrapper wrapperResponse = new ResponseWrapper((HttpServletResponse)response);//轉(zhuǎn)換成代理類
        // 這里只攔截返回,直接讓請求過去,如果在請求前有處理,可以在這里處理
        filterChain.doFilter(request, wrapperResponse);
        byte[] content = wrapperResponse.getContent();//獲取返回值
	//判斷是否有值
        if (content.length > 0)
        {
            String str = new String(content, "UTF-8");
            System.out.println("返回值:" + str);
            String ciphertext = null;
            try
            {
                //......根據(jù)需要處理返回值
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
		//把返回值輸出到客戶端
            ServletOutputStream out = response.getOutputStream();
            out.write(ciphertext.getBytes());
            out.flush();
            out.close();
        }
    }
    @Override
    public void init(FilterConfig arg0)
        throws ServletException
    {
    }
    @Override
    public void destroy()
    {
    }
}

啟動配置:

 /**
     * 配置過濾器,這里過濾器主要是對返回值做后繼處理
     * 
     * @return
     */
    @Bean
    public FilterRegistrationBean someFilterRegistration()
    {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new ResponseFilter());// 配置一個返回值加密過濾器
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("responseFilter");
        return registration;
    }

如果是spring mvc 在web.xml下添加配置即可

<!-- 返回值過濾器 -->
	<filter>
		<filter-name>responseFilter</filter-name>
		<filter-class>com.im.filter.ResponseFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>responseFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

到此這篇關(guān)于spring使用Filter過濾器對Response返回值進(jìn)行修改的文章就介紹到這了,更多相關(guān)spring Response返回值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring中Eureka的自我保護(hù)詳解

    Spring中Eureka的自我保護(hù)詳解

    這篇文章主要介紹了Spring中Eureka的自我保護(hù)詳解,當(dāng)Eureka Server節(jié)點在短時間內(nèi)丟失過多客戶端時(可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么這個節(jié)點就會進(jìn)入自我保護(hù)模式,一旦進(jìn)入該模式,Eureka Server就會保護(hù)服務(wù)注冊表中的信息,需要的朋友可以參考下
    2023-11-11
  • 深入探究Spring IOC和DI的區(qū)別

    深入探究Spring IOC和DI的區(qū)別

    很多人都會把ioc和di說成同一個東西,其實IOC和DI雖然在概念上可以籠統(tǒng)地視為同一事物,但其本質(zhì)上存在區(qū)別,因此,我們希望能夠更加嚴(yán)謹(jǐn)?shù)貐^(qū)分這兩個概念,以更好地理解和應(yīng)用它們,需要的朋友可以參考閱讀本文
    2023-10-10
  • SQL子查詢與MyBatis映射過程

    SQL子查詢與MyBatis映射過程

    本文介紹了使用SQL別名、MyBatis字段映射及代碼復(fù)用優(yōu)化SQL片段的完整案例,通過子查詢將統(tǒng)計邏輯封裝化,減少數(shù)據(jù)庫交互次數(shù),提高性能,字段映射確保數(shù)據(jù)庫字段與Java屬性一致,處理命名差異,SQL代碼復(fù)用統(tǒng)一管理公共字段,只需一處修改
    2026-04-04
  • MyBatis-Plus中最簡單的查詢操作教程(Lambda)

    MyBatis-Plus中最簡單的查詢操作教程(Lambda)

    這篇文章主要給大家介紹了關(guān)于MyBatis-Plus中最簡單的查詢操作的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-03-03
  • SpringBoot?Test的webEnvironment源碼解讀

    SpringBoot?Test的webEnvironment源碼解讀

    這篇文章主要為大家介紹了SpringBoot?Test的webEnvironment源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 詳解JAVA設(shè)計模式之模板模式

    詳解JAVA設(shè)計模式之模板模式

    這篇文章主要介紹了詳解JAVA設(shè)計模式之模板模式的的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 關(guān)于java編譯過程中的bug說明

    關(guān)于java編譯過程中的bug說明

    本篇文章是對java編譯過程中的bug進(jìn)行了詳細(xì)的說明介紹,需要的朋友參考下
    2013-05-05
  • 自定義注解基本概念和使用方式

    自定義注解基本概念和使用方式

    這篇文章主要介紹了自定義注解基本概念和使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • springboot實現(xiàn)調(diào)用百度ocr實現(xiàn)身份識別+二要素校驗功能

    springboot實現(xiàn)調(diào)用百度ocr實現(xiàn)身份識別+二要素校驗功能

    本文介紹了如何使用Spring Boot調(diào)用百度OCR服務(wù)進(jìn)行身份識別,并通過二要素校驗確保信息準(zhǔn)確性,感興趣的朋友一起看看吧
    2025-03-03
  • SpringBoot項目多層級多環(huán)境yml設(shè)計詳解

    SpringBoot項目多層級多環(huán)境yml設(shè)計詳解

    這篇文章主要為大家介紹了SpringBoot項目多層級多環(huán)境yml設(shè)計詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評論

永济市| 织金县| 景洪市| 清远市| 衡阳市| 永安市| 女性| 吉木萨尔县| 波密县| 龙门县| 图木舒克市| 玉屏| 高青县| 黄龙县| 自贡市| 河北省| 石渠县| 和平区| 墨玉县| 鸡泽县| 唐河县| 江华| 安义县| 上饶市| 江陵县| 砀山县| 滁州市| 资中县| 卫辉市| 温宿县| 仁怀市| 莱阳市| 海林市| 石家庄市| 进贤县| 大石桥市| 本溪市| 定兴县| 甘谷县| 宣威市| 大安市|