使用RestTemplate进行基本身份validation – 编译错误 – 构造函数HttpClient()不可见
试图将基本身份validation添加到restTemplate
我遇到的问题是我无法初始化:(在代码片段中都有导入)
HttpClient client = new HttpClient();
此代码解决了编译错误(eclipse没有提供修复此问题的建议)
1)问题是什么?
2)我输入了错误的课程吗?
我的代码片段:
import org.apache.http.client.HttpClient; //OR (not together) import sun.net.www.http.HttpClient; HttpClient client = new HttpClient(); //this line dosent compile UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("USERNAME","PASS"); client.getState().setCredentials( new AuthScope("www.example.com", 9090, AuthScope.ANY_REALM), credentials); CommonsClientHttpRequestFactory commons = new CommonsClientHttpRequestFactory(client); RestTemplate template = new RestTemplate(commons); SomeObject result = template.getForObject( "http://www.example.com:9090/",SomeObject.class );
运行此获取exception:
> failed due to an unhandled exception: java.lang.Error: Unresolved > compilation problems: The constructor HttpClient() is not visible > The method getState() is undefined for the type HttpClient > CommonsClientHttpRequestFactory cannot be resolved to a type > CommonsClientHttpRequestFactory cannot be resolved to a type > SomeObject cannot be resolved to a type The method > getForObject(String, Class, Object...) from the type > RestTemplate refers to the missing type SomeObject SomeObject cannot > be resolved to a type
最后使用以下方法更容易运行基本身份validation:
restTemplate.exchange()
并不是
restTemplate.getForObject()
我的代码片段:
private HttpHeaders createHeaders(final String username, final String password ){ HttpHeaders headers = new HttpHeaders(){ { String auth = username + ":" + password; byte[] encodedAuth = Base64.encodeBase64( auth.getBytes(Charset.forName("US-ASCII")) ); String authHeader = "Basic " + new String( encodedAuth ); set( "Authorization", authHeader ); } }; headers.add("Content-Type", "application/xml"); headers.add("Accept", "application/xml"); return headers; } RestTemplate restTemplate = new RestTemplate(); ResponseEntity response; httpHeaders = this.createHeaders("user", "pass"); String url = "www.example.com" response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity
它的工作原理!
如果使用Apache HttpClient,则实例化DefaultHttpClient
,因为HttpClient
只是一个接口:
HttpClient httpclient = new DefaultHttpClient();
请参阅此处有关使用HttpClient
各种身份validation方案的文档。
我们可以通过以下方式在Spring启动中使用它:
@SpringBootApplication
public class Application实现CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(Application.class); public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Override public void run(String... args) throws Exception { try{ RestTemplate restTemplate = new RestTemplate(); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders = this.createHeaders(); ResponseEntity response; response = restTemplate.exchange("",HttpMethod.GET,new HttpEntity
}