100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > filter 拦截器 获取http请求参数

filter 拦截器 获取http请求参数

时间:2022-08-18 22:37:39

相关推荐

filter 拦截器 获取http请求参数

里面一些方法使用了hutool的工具类 可以替换成你自己习惯的 工具类不是记录的主要东西。

记录点

1.怎么创建拦截器

2.怎么统一管理拦截器是否启用和输用顺序

3.怎么获取传入的参数

4.怎么获取返回值

直接上代码===================================================

filter配置

@Configuration public class FilterConfig { //log拦截器启动@Beanpublic FilterRegistrationBean logFilterRegistration() {FilterRegistrationBean registration = new FilterRegistrationBean();registration.setDispatcherTypes(DispatcherType.REQUEST);registration.setFilter(new LogFilter());registration.addUrlPatterns("/*");registration.setName("logFilter");registration.setOrder(Integer.MAX_VALUE-1);return registration;} }

LogFilter

/*** log过滤** @author Teler*/public class LogFilter implements Filter {@Overridepublic void init(FilterConfig config) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)throws IOException, ServletException {//为了在post的时候能继续传递LogHttpServletRequestWrapper request = new LogHttpServletRequestWrapper((HttpServletRequest) servletRequest);MyResponseWrapper response = new MyResponseWrapper((HttpServletResponse) servletResponse);StaticLog.info("=====================LogFilter前置start=====================>");//封装log实体类Map<String, Object> parameterMap=new LinkedHashMap<>();if("GET".equals(request.getMethod())){parameterMap= JSONUtil.parseObj(ServletUtil.getParams(request));}else{parameterMap= JSONUtil.parseObj(request.getBody());}StaticLog.info("请求来源: =》{}", request.getRemoteAddr());StaticLog.info("请求URI:{}", request.getRequestURI());StaticLog.info("请求方式:{}", request.getMethod());StaticLog.info("请求参数:{}", parameterMap);StaticLog.info("=====================LogFilter前置 end=====================>");//消耗时间long start = System.currentTimeMillis();// 执行主体方法start==================================================================chain.doFilter(request, response);// 执行主体方法 end==================================================================//耗时long time = System.currentTimeMillis() - start;StaticLog.info("=====================LogFilter后置start=====================>");byte[] content=response.getContent();String resultParams=new String();if (content.length > 0) {resultParams= new String(content, "UTF-8");}StaticLog.info("返回值:{}", resultParams);StaticLog.info("耗时(毫秒):", time);//返回消息 否则前台收不到消息servletResponse.getOutputStream().write(resultParams.getBytes());StaticLog.info("=====================LogFilter后置 end=====================>");}@Overridepublic void destroy() {}}

LogHttpServletRequestWrapper.java

public class LogHttpServletRequestWrapper extends HttpServletRequestWrapper {private final String body;public LogHttpServletRequestWrapper(HttpServletRequest request) {super(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();}}}body = stringBuilder.toString();}@Overridepublic ServletInputStream getInputStream() throws IOException {final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(body.getBytes());ServletInputStream servletInputStream = new ServletInputStream() {@Overridepublic boolean isFinished() {return false;}@Overridepublic boolean isReady() {return false;}@Overridepublic void setReadListener(ReadListener readListener) {}@Overridepublic int read() throws IOException {return byteArrayInputStream.read();}};return servletInputStream;}@Overridepublic BufferedReader getReader() throws IOException {return new BufferedReader(new InputStreamReader(this.getInputStream()));}public String getBody() {return this.body;}}

MyResponseWrapper.java

public class MyResponseWrapper extends HttpServletResponseWrapper {private ByteArrayOutputStream buffer;private ServletOutputStream out;public MyResponseWrapper(HttpServletResponse httpServletResponse) {super(httpServletResponse);buffer = new ByteArrayOutputStream();out = new WrapperOutputStream(buffer);}@Overridepublic ServletOutputStream getOutputStream() throws IOException {return out;}@Overridepublic 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;}@Overridepublic void write(int b)throws IOException {bos.write(b);}@Overridepublic boolean isReady() {// TODO Auto-generated method stubreturn false;}@Overridepublic void setWriteListener(WriteListener arg0) {// TODO Auto-generated method stub}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。