我知道我们可以通过在JAXB中将抽象类XMLInputFactory中的属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false来防止XXE攻击。
我也看过这个stackoverflow的答案。
我的问题是,
如何创建XMLInputFactory的实例并在Spring应用程序加载时将此IS_SUPPORTING_EXTERNAL_ENTITIES属性设置为false。并且该特定的XMLInputFactory实例应仅用于所有使用javax. xml.ind.注解包的类的所有JAXB转换。
Spring使用Request estMappingHandlerAdapter
,它是一个AbstractHandlerFacodAdapter
,它支持带有签名的Handler方法——方法参数和返回类型,在@Request estMaps
中定义。
有7个HttpMessageConverters
,其中一个是Jaxb2RootElementHttpMessageConverter
Jaxb2RootElementHttpMessageConverter
来自spring-web包。
从spring-web的3.2.8版本开始,Jaxb2RootElementHttpMessageConverter将进程外部实体设置为false,这反过来将XMLInputFactory属性IS_SUPPORTING_EXTERNAL_ENTITIES设置为false。
参考:来自Spring的Jaxb2RootElementHttpMessageConverter
回答使用
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>