直接从 HttpServletRequest 中拿
用 @
RequestBody 映射的,SpringMCV 根据 Content-Type 选择对应的转换器进行转换,如:
org.springframework.http.converter.StringHttpMessageConverter 只对 text/plain 生效
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter 对 application/json 生效
如果对方请求不是 text/plain, 你拿到的 String 就不是原始的了
建议的验签方式应该是在 Filter 层,对业务代码无侵入
ContentCachingRequestWrapper
@
Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 用 ContentCachingRequestWrapper 的目的时把请求体读出来的内容缓存起来,后续 SpringMVC 还可以再读一遍,原始的 InputStream 是不能重置再读的
ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request);
String requestContent = new String(requestWrapper.getContentAsByteArray());
checkSign(requestContent);
chain.doFilter(requestWrapper, response);
}