<div>Hello. I have a question about rabbitmq http api basic auth.</div><div><br></div><div>I use rabbitmq v3.1.0 and my code is below.</div><div><br></div><div>--</div><div>package com.foo.bar.controller;</div><div><br></div><div>import java.io.BufferedReader;</div><div>import java.io.IOException;</div><div>import java.io.InputStreamReader;</div><div>import java.net.URLEncoder;</div><div><br></div><div>import javax.servlet.http.HttpServletRequest;</div><div>import javax.servlet.http.HttpServletResponse;</div><div><br></div><div>import org.apache.commons.logging.Log;</div><div>import org.apache.commons.logging.LogFactory;</div><div>import org.apache.http.HttpHost;</div><div>import org.apache.http.HttpResponse;</div><div>import org.apache.http.auth.AuthScope;</div><div>import org.apache.http.auth.UsernamePasswordCredentials;</div><div>import org.apache.http.client.AuthCache;</div><div>import org.apache.http.client.methods.HttpPut;</div><div>import org.apache.http.client.protocol.ClientContext;</div><div>import org.apache.http.impl.auth.BasicScheme;</div><div>import org.apache.http.impl.client.BasicAuthCache;</div><div>import org.apache.http.impl.client.DefaultHttpClient;</div><div>import org.apache.http.protocol.BasicHttpContext;</div><div>import org.apache.http.protocol.HTTP;</div><div>import org.springframework.stereotype.Controller;</div><div>import org.springframework.web.bind.annotation.RequestMapping;</div><div><br></div><div>@Controller</div><div>public class HealthCheckController {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>private Log log = LogFactory.getLog(HealthCheckController.class);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space: pre;">        </span>private final String IP = "000.000.000.000";<br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>private final String OK = "ok";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>private String ID = "account";</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>private String PW = "passwd";</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>@RequestMapping({"/monitor/check"})</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>public void check(HttpServletRequest request, HttpServletResponse response) throws IOException {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; DefaultHttpClient httpclient = new DefaultHttpClient();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; HttpHost targetHost = new HttpHost(IP, 15672, "http");</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; HttpPut rq = new HttpPut("/api/aliveness-test/%2ffoo%2fbar");</div><div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; try {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; httpclient.getCredentialsProvider().setCredentials(</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new AuthScope(targetHost.getHostName(), targetHost.getPort()),</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; new UsernamePasswordCredentials(ID, URLEncoder.encode(PW, HTTP.UTF_8)));</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AuthCache authCache = new BasicAuthCache();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BasicScheme basicAuth = new BasicScheme();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; authCache.put(targetHost, basicAuth);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BasicHttpContext localcontext = new BasicHttpContext();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);</div><div><br></div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HttpResponse rp = httpclient.execute(targetHost, rq, localcontext);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.info("===================");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.info(rp);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BufferedReader rd = new BufferedReader(new InputStreamReader(rp.getEntity().getContent()));</div><div>&nbsp; &nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">                </span>String line = "";</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while ((line = rd.readLine()) != null) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="Apple-tab-span" style="white-space:pre">        </span>log.info(line);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp;</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.info("===================");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; } finally {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; httpclient.getConnectionManager().shutdown();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>}</div><div>--</div><div><br></div><div>I call '/monitor/check' from web browser.</div><div>but...</div><div><br></div><div>11:21:08 [WARN ](DefaultRequestDirector.java:1095) Authentication error: basic authorization challenge expected, but not found</div><div>11:21:08 [INFO ](HealthCheckController.java:103) ===================</div><div>11:21:08 [INFO ](HealthCheckController.java:104) HTTP/1.1 401 Unauthorized [Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue), Date: Wed, 15 May 2013 02:21:08 GMT</div><div>, Content-Length: 50]</div><div>11:21:08 [INFO ](HealthCheckController.java:108) {"error":"not_authorised","reason":"Login failed"}</div><div>11:21:08 [INFO ](HealthCheckController.java:110) ===================</div><div><br></div><div><br></div><div>account, password, ip and api are all correct. but I cannot authorized.</div><div><br></div><div>What's wrong in my code?</div><div><br></div><div>Thank you.</div>