Authentication 在抢占模式下使用groovy http builder

Authentication 在抢占模式下使用groovy http builder,authentication,groovy,httpbuilder,Authentication,Groovy,Httpbuilder,当使用groovy的http builder进行基本身份验证时,默认行为是首先发送未经身份验证的请求,然后在首先收到401之后使用凭据重新发送该请求。 Apache的Httpclient提供在第一次请求时直接发送凭据。 如何在Groovy的http builder中使用抢占式身份验证?欢迎使用任何代码示例。基于示例,您可以执行以下操作: def http = new RESTClient('http://awesomeUrl/') http.client.addRequestIntercept

当使用groovy的http builder进行基本身份验证时,默认行为是首先发送未经身份验证的请求,然后在首先收到401之后使用凭据重新发送该请求。 Apache的Httpclient提供在第一次请求时直接发送凭据。 如何在Groovy的http builder中使用抢占式身份验证?欢迎使用任何代码示例。

基于示例,您可以执行以下操作:

def http = new RESTClient('http://awesomeUrl/')

http.client.addRequestInterceptor(new HttpRequestInterceptor() {
    void process(HttpRequest httpRequest, HttpContext httpContext) {
        httpRequest.addHeader('Authorization', 'Basic ' + 'myUsername:myPassword'.bytes.encodeBase64().toString())
    }
})

def response = http.get(path: "aResource")

println response.data.text

您还可以使用groovy样式解决它

http = new RESTClient('http://awesomeUrl/')
http.headers['Authorization'] = 'Basic '+"myUsername:myPassword".getBytes('iso-8859-1').encodeBase64()

美丽的。我使用SpringSecurityGrails插件和基本身份验证(没有先发制人模式设置)时出现了500个错误(看起来无害,但很烦人)。这把它修好了。注意:我必须添加以下导入:import org.apache.http.HttpRequestInterceptor import org.apache.http.protocol.HttpContext import org.apache.http.HttpRequestAlso,
getBytes('iso-8859-1')
可以简单地替换为
bytes
@tweber。请澄清一下:编码的目的是什么?base64需要它吗?还是通过基本的身份验证协议?编辑:嗯,似乎解决了我的问题。但我还没完全明白。如有任何答复,将不胜感激。