1、构建request扩展类
package com.example.demo.wrapper;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.HashMap;
import java.util.Map;
public class RequestWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params = new HashMap<String, String[]>();
public RequestWrapper(HttpServletRequest request) {
super(request);
//将现有parameter传递给params
this.params.putAll(request.getParameterMap());
}
/**
* 重载构造函数
* @param request
* @param extraParams
*/
public RequestWrapper(HttpServletRequest request, Map<String, Object> extraParams) {
this(request);
addParameters(extraParams);
}
public void addParameters(Map<String, Object> extraParams) {
for (Map.Entry<String, Object> entry : extraParams.entrySet()) {
addParameter(entry.getKey(), entry.getValue());
}
}
/**
* 重写getParameter,代表参数从当前类中的map获取
* @param name
* @return
*/
@Override
public String getParameter(String name) {
String[]values = params.get(name);
if(values == null || values.length == 0) {
return null;
}
return values[0];
}
/**
* 同上
* @param name
* @return
*/
@Override
public String[] getParameterValues(String name) {
return params.get(name);
}
/**
* 添加参数
* @param name
* @param value
*/
public void addParameter(String name, Object value) {
if (value != null) {
if (value instanceof String[]) {
params.put(name, (String[]) value);
} else if (value instanceof String) {
params.put(name, new String[]{(String) value});
} else {
params.put(name, new String[]{String.valueOf(value)});
}
}
}
}
2、创建过滤器,修改request中的值
package com.example.demo.filter;
import com.example.demo.wrapper.RequestWrapper;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
public class RequestFilter 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 {
HttpServletRequest request=(HttpServletRequest)servletRequest;
Enumeration<String> en = request.getParameterNames();
Map<String, Object> extraParams = new HashMap<String, Object>();
while (en.hasMoreElements()) {
String key = en.nextElement();
String[] arr = request.getParameterValues(key);
String value = "";
if (arr != null && arr.length > 0) {
value = arr[0] + "_change";
}
System.out.println(key+"解密后:"+value);
extraParams.put(key, value);
}
//利用原始的request对象创建自己扩展的request对象并添加自定义参数
RequestWrapper requestParameterWrapper =new RequestWrapper(request);
requestParameterWrapper.addParameters(extraParams);
filterChain.doFilter(requestParameterWrapper, servletResponse);
}
}
3、添加过滤器配置
package com.example.demo.config;
import com.example.demo.filter.RequestFilter;
import com.example.demo.filter.ResponseFilter;
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 ServletInitializer {
@Bean
public FilterRegistrationBean requestFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
RequestFilter requestFilter=new RequestFilter();
filterRegistrationBean.setFilter(requestFilter);
List<String> urls = new ArrayList<>();
urls.add("/*");
filterRegistrationBean.setUrlPatterns(urls);//配置过滤规则
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
@Bean
public FilterRegistrationBean responseFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
ResponseFilter responseFilter=new ResponseFilter();
filterRegistrationBean.setFilter(responseFilter);
List<String> urls = new ArrayList<>();
urls.add("/*");
filterRegistrationBean.setUrlPatterns(urls);//配置过滤规则
filterRegistrationBean.setOrder(2);
return filterRegistrationBean;
}
}