过滤器修改response的返回值
1. 继承httpservletresponsewrapper
重新覆盖response对象,用来获取response中的返回值

package com.example.demo.wrapper;
import javax.servlet.servletoutputstream;
import javax.servlet.writelistener;
import javax.servlet.http.httpservletresponse;
import javax.servlet.http.httpservletresponsewrapper;
import java.io.*;
public class responsewrapper extends httpservletresponsewrapper {
private bytearrayoutputstream buffer = null;
private servletoutputstream out = null;
private printwriter writer = null;
public responsewrapper(httpservletresponse resp) throws ioexception {
super(resp);
buffer = new bytearrayoutputstream();// 真正存储数据的流
out = new wapperedoutputstream(buffer);
writer = new printwriter(new outputstreamwriter(buffer));
}
@override
public servletoutputstream getoutputstream() throws ioexception {
return out;
}
@override
public printwriter getwriter() throws unsupportedencodingexception {
return writer;
}
@override
public void flushbuffer() throws ioexception {
if (out != null) {
out.flush();
}
if (writer != null) {
writer.flush();
}
}
@override
public void reset() {
buffer.reset();
}
public byte[] getresponsedata() throws ioexception {
flushbuffer();
return buffer.tobytearray();
}
public string getcontent() throws ioexception {
flushbuffer();
return buffer.tostring();
}
private class wapperedoutputstream extends servletoutputstream {
private bytearrayoutputstream bos = null;
public wapperedoutputstream(bytearrayoutputstream stream) throws ioexception {
bos = stream;
}
@override
public void write(int b) throws ioexception {
bos.write(b);
}
@override
public void write(byte[] b) throws ioexception {
bos.write(b, 0, b.length);
}
@override
public void write(byte[] b, int off, int len) throws ioexception {
bos.write(b, off, len);
}
@override
public boolean isready() {
return false;
}
@override
public void setwritelistener(writelistener writelistener) {
}
}
}
2、创建过滤器
修改response中的内容,返回

package com.example.demo.filter;
import com.example.demo.wrapper.responsewrapper;
import org.apache.commons.lang.stringutils;
import org.springframework.http.mediatype;
import org.springframework.stereotype.component;
import javax.servlet.*;
import javax.servlet.http.httpservletresponse;
import java.io.ioexception;
import java.io.outputstream;
import java.io.printwriter;
@component
public class responsefilter implements filter {
@override
public void init(filterconfig filterconfig) throws servletexception {
}
@override
public void destroy() {
}
@override
public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception {
responsewrapper responsewrapper = new responsewrapper((httpservletresponse) servletresponse);
filterchain.dofilter(servletrequest, responsewrapper);
string contenttype = responsewrapper.getcontenttype();
byte[] content = responsewrapper.getresponsedata();
string str="";
if (stringutils.isnotblank(contenttype) && (contenttype.contains(mediatype.application_json_value) || contenttype.contains(mediatype.text_html_value))) {
str = new string(content);
str=str+"xiaoming";
system.out.println("filter:"+str);
httpservletresponse response=(httpservletresponse)servletresponse;
writeresponse(response,200,str);
}
}
public static void writeresponse(httpservletresponse response, int status, string json) {
try {
response.reset();//很重要
response.setheader("access-control-allow-origin", "*");
response.setheader("access-control-allow-methods", "*");
response.setcontenttype("application/json;charset=utf-8");
response.setstatus(status);
response.getwriter().write(json);
} catch (ioexception e) {
e.printstacktrace();
}
}
}3、配置过滤器

package com.example.demo.config;
import com.example.demo.filter.responsefilter;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.springbootconfiguration;
import org.springframework.boot.web.servlet.filterregistrationbean;
import org.springframework.context.annotation.bean;
import java.util.arraylist;
import java.util.list;
@springbootconfiguration
public class filterconfig {
@autowired
private responsefilter responsefilter;
@bean
public filterregistrationbean getfilterconfig(){
filterregistrationbean filterregistrationbean=new filterregistrationbean();
filterregistrationbean.setfilter(responsefilter);
list<string> filterlist=new arraylist<>();
filterlist.add("/*");
filterregistrationbean.seturlpatterns(filterlist);
return filterregistrationbean;
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论