Spring OAuth2 Rest异常吞下HttpResponse代码

时间:2018-06-08 18:33:32

标签: java spring spring-security spring-security-oauth2 apache-commons-httpclient

我正在使用oauth2resttemplate调用的Restservice返回状态代码为403的响应。我看到我的ClientHttpRequestInterceptor日志行注入了resttemplate。

这是拦截请求和响应的拦截器。 traceResponse()将响应状态代码记录为403,这是我期望的。

public class RequestInterceptor implements ClientHttpRequestInterceptor {
    @Override
    public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
        try
        {
            traceRequest(request, body);
        } catch (Exception e)
        {
            ManagerLog.alertLog("Exception occurred", e);
        }
        ClientHttpResponse response = execution.execute(request, body);
        traceResponse(response);
        return response;
    }

    private void traceRequest(HttpRequest request, byte[] body) throws Exception {
        ManagerLog.infoLog("===========================request begin================================================");
        ManagerLog.infoLog("URI          : "+request.getURI());
        ManagerLog.infoLog("Method       : "+request.getMethod());
        ManagerLog.infoLog("Headers      : "+request.getHeaders() );
        ManagerLog.infoLog("Request body : "+new String(body, "UTF-8"));
        ManagerLog.infoLog("==========================request end================================================");
    }

    private void traceResponse(ClientHttpResponse response) throws IOException {
        ManagerLog.infoLog("============================response begin==========================================");
        ManagerLog.infoLog("Response Status code  : "+ response.getStatusCode());
        ManagerLog.infoLog("Response Status text  : "+ response.getStatusText());
        ManagerLog.infoLog("Response Headers      : "+ response.getHeaders());
        // ManagerLog.infoLog("Response body         : "+ StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
        ManagerLog.infoLog("=======================response end=================================================");

    }
}

但是在这里我看到的是400而不是403.但我在Spring源代码中看到它实际上硬编码为InvalidGrantException的父类(OAuth2Exception.java)中的400。

try{
objectResponseEntity = oauth2RestTemplate.exchange(url, httpMethod, httpEntity, pojo) -- throws an InvalidGrantException
} catch (HttpStatusCodeException e)
{
...
} catch(InvalidGrantException e)
{
  errorCode = e.getHttpErrorCode(); -- was expecting 403 but returning 400
...
}

如何从异常中获取实际的http响应代码?

0 个答案:

没有答案