HttpServletRequestWrapper,HandlerMethodArgumentResolver,ResponseBodyAdvice,WebMvcConfigurerAdapter
HttpServletRequestWrapper
package com.example.springboot.core; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import java.io.*; import java.util.Map; @Slf4j public class RequestWrapper extends HttpServletRequestWrapper { private String body; public RequestWrapper(HttpServletRequest request) throws IOException { super(request); // body=getBodyStr(request); } public String getBodyStr(){ return body; } //方法1 // private String getBodyStr(HttpServletRequest request) throws IOException { // // BufferedReader reader=request.getReader(); // String line=null; // StringBuilder stringBuilder=new StringBuilder(); // while ((line=reader.readLine())!=null){ // // stringBuilder.append(line); // } // return stringBuilder.toString(); // // } //方法2 private String getBodyStr(HttpServletRequest request) throws IOException { InputStreamReader reader=new InputStreamReader(request.getInputStream()); int line=0; StringBuilder stringBuilder=new StringBuilder(); while ((line=reader.read())!=-1){ stringBuilder.append((char) line); log.info("par="+(char)line); } return stringBuilder.toString(); } /*重写getParameterValues方法 * 通过循环取出每一个请求结果 * 再对请求结果进行过滤*/ @Override public Map<String,String[]> getParameterMap() { log.info("getParameterValues.123"); Map<String,String[]> map=super.getRequest().getParameterMap(); log.info("map={}", JSON.toJSONString(map)); return map; } @Override public Object getAttribute(String var1){ log.info("getAttribute.123={}",var1); return var1; } }
package com.example.springboot.core; import lombok.extern.slf4j.Slf4j; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.nio.charset.StandardCharsets; @Slf4j //@Component @WebFilter @Order(1) public class AuthFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { Filter.super.init(filterConfig); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest; RequestWrapper requestWrapper=new RequestWrapper(httpServletRequest); // log.info("aaa={}",requestWrapper.getBodyStr()); //servletResponse.getOutputStream().write("abc001".getBytes(StandardCharsets.UTF_8)); // httpServletRequest.getParameterMap(); filterChain.doFilter(servletRequest ,servletResponse); } @Override public void destroy() { Filter.super.destroy(); } }
HandlerMethodArgumentResolver
package com.example.springboot.core; import com.example.springboot.domain.User; import lombok.extern.slf4j.Slf4j; import org.springframework.core.MethodParameter; import org.springframework.stereotype.Service; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; import java.util.Date; @Service @Slf4j public class UserArgumetResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter methodParameter) { Boolean result=methodParameter.getParameterType()== User.class; log.info("supportsParameter.reuslt={}",result); return result; } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { User user=new User(); user.setUserId(1); user.setLastIp("127.0.0.1"); user.setLastVisit(new Date()); user.setUserName("abc"); user.setCredits(100); user.setPassword("***"); return user; } }
ResponseBodyAdvice
package com.example.springboot.common; import com.alibaba.fastjson.JSON; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; @ControllerAdvice public class CommonResultAdvice implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { return true; } @Override public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { Result<Object> result=new Result<>(); result.setCode(200); result.setMsg("ok"); result.setData(body); if (body instanceof String){ return JSON.toJSONString(result); } return result; } }
WebMvcConfigurerAdapter
package com.example.springboot.core; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.List; @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Autowired UserArgumetResolver userArgumentResolver; @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(userArgumentResolver); } }