//配置过滤器
import com.paas.filter.InterfaceFilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class WebFileterConfig { /** * 配置过滤器 */ @Bean public FilterRegistrationBean filterRegistration() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new InterfaceFilter()); //设置过滤器URL registrationBean.addUrlPatterns("/*"); registrationBean.setOrder(Integer.MAX_VALUE - 10); return registrationBean; } }
//包装类
import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; public class HttpRequestBodyAndParamsWrapper extends HttpServletRequestWrapper { private String body; private final Map<String , String[]> params = new HashMap<String, String[]>(); public HttpRequestBodyAndParamsWrapper(HttpServletRequest request) throws IOException { super(request); this.params.putAll(request.getParameterMap()); } public HttpRequestBodyAndParamsWrapper(HttpServletRequest request, String context) { super(request); body = context; } @Override public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes(StandardCharsets.UTF_8)); ServletInputStream servletInputStream = new ServletInputStream() { @Override public int read() throws IOException { return byteArrayInputStream.read(); } @Override public boolean isFinished() { return false; } @Override public boolean isReady() { return false; } @Override public void setReadListener(ReadListener listener) { } }; return servletInputStream; } @Override public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(this.getInputStream())); } /** * 添加参数到map中 * @param extraParams */ public void setParameterMap(Map<String, Object> extraParams) { for (Map.Entry<String, Object> entry : extraParams.entrySet()) { setParameter(entry.getKey(), entry.getValue()); } } /** * 添加参数到map中 * @param name * @param value */ public void setParameter(String name, Object value) { if (value != null) { System.out.println(value); 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)}); } } } /** * 重写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]; } /** * 重写getParameterValues方法,从当前类的 map中取值 * @param name * @return */ @Override public String[] getParameterValues(String name) { return params.get(name); } }
//过滤器
package com.paas.filter; import com.paas.common.security.RSAUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpMethod; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @Slf4j public class InterfaceFilter implements Filter { @Override public void destroy() { log.info("过滤器执行结束"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest) request; // 获取请求地址 String url = ((HttpServletRequest) request).getRequestURI().substring(((HttpServletRequest) request).getContextPath().length()); log.info("------------------请求地址,{}---------------",url); HttpRequestBodyAndParamsWrapper httpRequestBodyAndParamsWrapper = new HttpRequestBodyAndParamsWrapper( (HttpServletRequest) request); try { // 根据不同的请求方法类型 做 不同的参数处理业务 if (HttpMethod.POST.matches(httpServletRequest.getMethod())) { String body = getBody(httpServletRequest); //处理加密解密 httpServletRequest = new HttpRequestBodyAndParamsWrapper(httpServletRequest, newBody); chain.doFilter(httpServletRequest,response); } if (HttpMethod.GET.matches(httpServletRequest.getMethod())) { //修改参数值、 请求参数 //httpRequestBodyAndParamsWrapper.setParameter("",""); chain.doFilter(httpRequestBodyAndParamsWrapper, response); } chain.doFilter(httpServletRequest,response); } catch (Exception e) { e.printStackTrace(); } } //获取Request的body数据 private String getBody(ServletRequest request) { StringBuilder stringBuilder = new StringBuilder(); BufferedReader bufferedReader = null; InputStream inputStream = null; try { inputStream = request.getInputStream(); if (inputStream != null) { bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); char[] charBuffer = new char[128]; int bytesRead = -1; while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { stringBuilder.append(charBuffer, 0, bytesRead); } } else { stringBuilder.append(""); } } catch (IOException ex) { } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } } return stringBuilder.toString(); } }