복붙노트

[SPRING] RestTemplate을 사용한 기본 인증 - 컴파일 오류 - 생성자 HttpClient ()가 표시되지 않습니다.

SPRING

RestTemplate을 사용한 기본 인증 - 컴파일 오류 - 생성자 HttpClient ()가 표시되지 않습니다.

기본 인증을 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<SomeObject>, Object...) from the type
> RestTemplate refers to the missing type SomeObject    SomeObject cannot
> be resolved to a type

해결법

  1. ==============================

    1.결국 기본 인증을 훨씬 쉽게 실행할 수 있습니다.

    결국 기본 인증을 훨씬 쉽게 실행할 수 있습니다.

    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<MyClass> response;
        httpHeaders = this.createHeaders("user", "pass");
    
        String url = "www.example.com"
        response = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<Object>(httpHeaders), MyClass.class);
    

    그리고 그것은 작동합니다!

  2. ==============================

    2.Apache HttpClient를 사용하는 경우 HttpClient가 인터페이스이기 때문에 DefaultHttpClient를 인스턴스화하십시오.

    Apache HttpClient를 사용하는 경우 HttpClient가 인터페이스이기 때문에 DefaultHttpClient를 인스턴스화하십시오.

    HttpClient httpclient = new DefaultHttpClient();
    

    여기에서 HttpClient와 함께 다양한 인증 체계 사용에 대한 설명서를 참조하십시오.

  3. ==============================

    3.우리는 스프링 부트에서 다음과 같이 사용할 수 있습니다 :

    우리는 스프링 부트에서 다음과 같이 사용할 수 있습니다 :

       @SpringBootApplication
    

    공용 클래스 응용 프로그램 구현 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<String> response;
        response  = restTemplate.exchange("<url>",HttpMethod.GET,new HttpEntity<Object>(httpHeaders),String.class);
        log.info(response.toString());
        }
        catch(Exception e)
        {
            System.out.println("Exception"+e);
        }
    
    
    }
    
    private HttpHeaders createHeaders(){
        HttpHeaders headers =  new HttpHeaders(){
              {            
                 set( "Authorization", "3ee140");
              }
           };
    
           return headers;
    }
    

    }

  4. from https://stackoverflow.com/questions/15462128/basic-authentication-with-resttemplate-compilation-error-the-constructor-htt by cc-by-sa and MIT license