mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-11 05:19:00 +08:00
fix(core): avoid replacing projecting jackson converter
This commit is contained in:
1 parent
a6af889ccf
commit
bdeba4ce3d
1 file changed
+11
-3
+11
-3
@@ -82,6 +82,7 @@ public class JacksonConfiguration implements WebMvcConfigurer {
|
||||
* <li>yyyy-MM-dd -> LocalDate</li>
|
||||
* <li>yyyy-MM-dd HH:mm:ss -> LocalDateTime</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param registry
|
||||
*/
|
||||
@Override
|
||||
@@ -95,6 +96,7 @@ public class JacksonConfiguration implements WebMvcConfigurer {
|
||||
|
||||
/**
|
||||
* 避免form 提交 context-type 不规范中文乱码
|
||||
*
|
||||
* @return Filter
|
||||
*/
|
||||
@Bean
|
||||
@@ -119,14 +121,19 @@ public class JacksonConfiguration implements WebMvcConfigurer {
|
||||
* 替换策略:用 {@link ListIterator#set} 原地替换 Jackson 3 converter;找不到时把 Jackson 2
|
||||
* converter 插到队首作为 fallback。不做 clear,以免破坏 byte[]、String、multipart
|
||||
* 等其它默认 converter。
|
||||
*
|
||||
* @param converters 消息转换器列表
|
||||
*/
|
||||
@Override
|
||||
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
|
||||
ObjectMapper objectMapper = objectMapperProvider.getIfAvailable();
|
||||
if (objectMapper == null) {
|
||||
log.warn("ObjectMapper 不可用,跳过 Spring MVC Jackson 2 替换;保留 Spring Boot 默认 converter 链。");
|
||||
return;
|
||||
// 本类存在的唯一目的就是把 MVC 链路桥接回 Jackson 2,拿不到 Jackson 2 ObjectMapper
|
||||
// 说明 jackson2 autoconfigure 未生效,属于环境配置错误。若静默降级到 Jackson 3,
|
||||
// pigx-common-xss 的反序列化 XSS 清洗、Long->String、时间格式都会失效且难以察觉,
|
||||
// 因此在启动期 fail-fast 暴露,而不是带病运行。
|
||||
throw new IllegalStateException("Jackson 2 ObjectMapper 不可用,无法将 Spring MVC 桥接到 Jackson 2;"
|
||||
+ "请检查 jackson2 autoconfigure 是否生效(XSS 清洗、Long 字符串化、时间格式均依赖于此)。");
|
||||
}
|
||||
|
||||
org.springframework.http.converter.json.MappingJackson2HttpMessageConverter jackson2Converter =
|
||||
@@ -134,9 +141,10 @@ public class JacksonConfiguration implements WebMvcConfigurer {
|
||||
ListIterator<HttpMessageConverter<?>> it = converters.listIterator();
|
||||
boolean replaced = false;
|
||||
while (it.hasNext()) {
|
||||
if (it.next() instanceof JacksonJsonHttpMessageConverter) {
|
||||
if (it.next().getClass() == JacksonJsonHttpMessageConverter.class) {
|
||||
it.set(jackson2Converter);
|
||||
replaced = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!replaced) {
|
||||
|
||||
Reference in new issue
Block a user