Rest 403内容类型为text/xml的帖子禁止SQL注入错误

Rest 403内容类型为text/xml的帖子禁止SQL注入错误,rest,kotlin,http-status-code-403,feign,Rest,Kotlin,Http Status Code 403,Feign,我需要使用feign发出一个API请求。方法类型:POST;标题必须包括Content Type=text/xml 我的代码: @组件 @ConfigurationProperties(“client.machine”) 类机器属性{ lateinit变量url:字符串 lateinit变量超时:字符串 } @配置 类MachineClientConfig( 私有val连接属性:MachineProperties, 私人val计量登记:计量登记, 私有val对象映射器:对象映射器 ) { @豆子

我需要使用feign发出一个API请求。方法类型:
POST
;标题必须包括
Content Type=text/xml

我的代码:

@组件
@ConfigurationProperties(“client.machine”)
类机器属性{
lateinit变量url:字符串
lateinit变量超时:字符串
}
@配置
类MachineClientConfig(
私有val连接属性:MachineProperties,
私人val计量登记:计量登记,
私有val对象映射器:对象映射器
) {
@豆子
fun machineApi()=Feign.builder()
.addCapability(千分尺容量(计量注册))
.retryer(DefaultEtsmIntegratonRetryer())
.编码器(JacksonEncoder(objectMapper))
.解码器(JacksonDecoder(objectMapper))
.decode404()
.logger(Slf4jLogger(MachineApi::class.java))
.options(Request.options(connectionProperties.timeout.toInt()、connectionProperties.timeout.toInt())
.target(MachineApi::class.java,connectionProperties.url)!!
}
@标题(
HttpHeaders.ACCEPT+“:“+MediaType.TEXT\u XML\u值,
HttpHeaders.CONTENT\u TYPE+“:”+MediaType.TEXT\u XML\u值
)
接口机{
@请求行(“POST/api/v1/charge”)
fun sendRequest(正文:字符串):机器响应
}
@服务
类MachineClient(专用val machineApi:machineApi){
fun sendRequest(正文:字符串,dealId:Long):机器响应{
返回机器pi.sendRequest(正文)
}
}
公共类编码器实现编码器{
私有最终对象映射器映射器;
公共编码器(){
这是(Collections.emptyList());
}
公共编码器(Iterable模块){
这(新的ObjectMapper()
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.configure(SerializationFeature.INDENT_输出,true)
.注册模块(模块);
}
公共JacksonEncoder(对象映射器映射器){
this.mapper=mapper;
}
@凌驾
公共无效编码(对象对象、类型bodyType、请求模板模板){
试一试{
JavaType JavaType=mapper.getTypeFactory().constructType(bodyType);
body(mapper.writerFor(javaType).writeValueAsBytes(object),Util.UTF_8);
}捕获(JsonProcessingException e){
抛出新的EncodeException(e.getMessage(),e);
}
}
}
从MachineClient类调用sendRequest方法时,会出现如下错误:

feign.FeignException$Forbidden: [403 Forbidden] during [POST] to [https://dev.ed.com/tsm/v1/charge] [MachineApi#sendRequest(String)]: [{
    "httpCode": "403",
    "moreInformation": "SQL-Injection Error"
}]
但当我试图通过curl打电话时,效果非常好

curl --location --request POST 'https://dev.ed.com/tsm/v1/charge' \
--header 'Content-Type: text/xml' \
--data-raw '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ChargeRq>...</ChargeRq>'
curl--位置--请求发布'https://dev.ed.com/tsm/v1/charge' \
--标题“内容类型:文本/xml”\
--数据原始'
...'

我的代码中缺少了什么,为什么会出现错误?请帮帮我,我没有更多的想法了

解决方案如下:

因为Content-Type=“text/xml”是必需的,所以我需要使用JAXBEncoder。在本例中,我需要发送的不是字符串,而是ChargeRqType——一个使用jaxb接收的对象

@组件
@ConfigurationProperties(“client.machine”)
类机器属性{
lateinit变量url:字符串
lateinit变量超时:字符串
}
@配置
类MachineClientConfig(
私有val连接属性:MachineProperties,
私人val计量登记:计量登记,
私有val jaxbContextFactory:jaxbContextFactory,
私有val对象映射器:对象映射器
) {
@豆子
fun creditMachineApi()=Feign.builder()
.addCapability(千分尺容量(计量注册))
.retryer(DefaultEtsmIntegratonRetryer())
.encoder(JAXBEncoder(jaxbContextFactory))
.解码器(JacksonDecoder(objectMapper))
.logger(Slf4jLogger(MachineApi::class.java))
.options(Request.options(connectionProperties.timeout.toInt()、connectionProperties.timeout.toInt())
.target(MachineApi::class.java,connectionProperties.url)!!
}
@标题(
HttpHeaders.ACCEPT+“:“+MediaType.TEXT\u XML\u值,
HttpHeaders.CONTENT\u TYPE+“:”+MediaType.TEXT\u XML\u值
)
接口机{
@请求行(“POST/tsm/v1/charge”)
fun sendRequest(主体:充电器QType):机器响应
}
@服务
类MachineClient(专用val machineApi:machineApi){
fun sendRequest(正文:ChargeRqType,dealId:Long)=
machineApi.sendRequest(正文)
}
@配置
类JAXBConfig{
@豆子
fun jaxbContextFactory()=jaxbContextFactory.Builder()
.使用MarshallerJAXbencoding(“UTF-8”)
.withMarshallerSchemaLocation(ClassPathResource(“xsd/SrvCreateApp03.xsd”).path)
.build()
}

body变量的值是多少?你可以打印和检查。另外,我还看到
内容类型
丢失,它出现在curl中request@sidgate
body
是由
Marshaller
JAXBContext
javax.xml.bind
)生成的xml字符串。生成后,我在控制台中打印此xml,并在通过curl检查时使用它(我只是从控制台复制它并将其粘贴到Postman中)。@sidgate我试图发送一个空字符串
,但收到了相同的错误。那么我不明白为什么不发送值:-(