You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.1.3.RELEASE调用SOAP服务遇403异常求助

Spring Boot 2.1.3.RELEASE调用SOAP服务时出现403 Forbidden异常

问题描述

使用Spring Boot 2.1.3.RELEASE调用SOAP服务时,触发WebServiceTransportException: Forbidden [403]异常,相关代码及异常信息如下:

客户端类定义

public class Client extends WebServiceGatewaySupport {

    @Autowired
    private MessageSender messageSender ;
}

请求构建代码

RequestTest request = new RequestTest ();
request.setSRequestXML("XML CONTENT");

SOAP服务调用方法

WebServiceTemplate serviceTemplate = getWebServiceTemplate();
serviceTemplate.setMessageSender(messageSender);
ResponseTest response = (ResponseTest) serviceTemplate.marshalSendAndReceive(url, request,
        new SoapActionCallback(callBack));

异常栈信息

org.springframework.ws.client.WebServiceTransportException: Forbidden [403]
    at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:699)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:609)
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)

解决思路

  • 校验服务端认证配置:403异常核心原因多为权限不足。若目标服务要求Basic认证,需给HttpComponentsMessageSender添加认证信息:

    HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender();
    UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("your-username", "your-password");
    messageSender.setCredentials(credentials);
    

    若是NTLM或其他认证方式,需配置对应认证逻辑。

  • 确认SoapAction准确性:检查callBack对应的SoapAction值是否与服务端要求完全匹配,包括字符大小写、路径格式,部分服务对SoapAction校验严格,不匹配会直接返回403。

  • 补充必要请求头:部分SOAP服务要求特定请求头(如User-Agent、Content-Type),可通过ClientInterceptor添加:

    serviceTemplate.setInterceptors(new ClientInterceptor[]{
        new ClientInterceptor() {
            @Override
            public boolean handleRequest(MessageContext messageContext) {
                TransportContext context = TransportContextHolder.getTransportContext();
                HttpUrlConnection conn = (HttpUrlConnection) context.getConnection();
                conn.addRequestProperty("User-Agent", "Spring Boot SOAP Client");
                // 按需添加其他必要请求头
                return true;
            }
    
            @Override
            public boolean handleResponse(MessageContext messageContext) { return true; }
    
            @Override
            public boolean handleFault(MessageContext messageContext) { return true; }
    
            @Override
            public void afterCompletion(MessageContext messageContext, Exception ex) {}
        }
    });
    
  • 排查IP白名单限制:确认客户端所在IP是否在服务端的访问白名单内,企业级SOAP服务常通过IP拦截未授权请求,导致403。

  • 检查MessageSender配置完整性:确认messageSender的实现类配置是否正确,比如自定义实现是否遗漏认证参数,默认HttpUrlConnectionMessageSender是否需要调整超时或其他传输参数。

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 23:41:11