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
相关产品推荐
相关产品推荐

