springboot Post 請求攔截Body參數
應用場景
- 想捕獲請求發過來的所有參數(包含也許 接收類 不包含的字段)
- 想查看
Feign
遠程接口 進行的序列化是否如願簡單問一句,你知道
Feign
接口參數類如果包含一個域 是Class
類型的話,序列化的結果是啥嗎?還有如果 Feign 如果傳遞時間Date
是否會有問題呢?
注意事項
- 記得body裏面的參數是儲存在 輸入流 裏的,如果你的攔截器讀取了輸入流,那麼這個輸入流就不會再有參數了,即到達
Controller
的參數爲空的
代碼
攔截器
@Component
public class AuthSecurityInterceptor extends HandlerInterceptorAdapter {
private Logger logger = LoggerFactory.getLogger(AuthSecurityInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String body = getBody(httpServletRequest);
System.out.println(body);
return true;// true 則繼續執行
}
public String getBody(HttpServletRequest 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();
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
配置類
@Configuration
public class WebSecurityConfig extends WebMvcConfigurerAdapter {
@Bean
public AuthSecurityInterceptor getSecurityInterceptor() {
return new AuthSecurityInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor());
// 攔截配置
addInterceptor.addPathPatterns("/**");
}
}
參考
做個筆記,以免以後忘記