Я ищу помощь. Я хочу иметь возможность вернуть сообщение XML SOAP в ответе моего сервлета. Я пытаюсь вернуть этот ответ во время процесса аутентификации в методе doFilter
в классе, который расширяет класс GenericFilterBean
.
К сожалению, на данный момент следующий код:
try
{
//some logic that may throw AuthenticationException;
}
catch (final AuthenticationException authenticationException)
{
SecurityContextHolder.clearContext();
HttpServletResponse httpResponse = WebUtils.getNativeResponse(response, HttpServletResponse.class);
httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "MSG");
}
Возвращает JSON ответ:
{
"timestamp": "2020-02-21T15:09:28.689+0000",
"status": 401,
"error": "Unauthorized",
"message": "MSG",
"path": "/testPath"
}
Это своего рода ожидаемое поведение по умолчанию.
Дело в том, что я использую метод POST для отправки моего SOAP сообщения. Ответное сообщение уже сгенерировано следующим распознавателем:
@Component
public class SomeResolver extends SoapFaultMappingExceptionResolver
{
@Override
protected SoapFaultDefinition getFaultDefinition(Object endpoint, Exception exception)
{
String defaultFaultCode = "SOME:CODE";
final String nameSpaceUri = "somenamespace";
final String localPart = exception instanceof BadCredentialsException ? "SOAP-MSG:TEST : "SOAP-MSG:SOMETHINGELSE;
final QName faultCode = new QName(nameSpaceUri, localPart);
SoapFaultDefinitionEditor editor = new SoapFaultDefinitionEditor();
editor.setAsText("Test");
return (SoapFaultDefinition) editor.getValue();
}
Я знаю, что ответ должен установить тип содержимого ответа. Но я не знаю, как связать Resolver
с телом ответа.