2017-06-19 4 views
0

Ich verwende den folgenden Code, wo ich Credentials für grundlegende HTTP-Authentifizierung für meinen Server, der Spring Security verwendet. Leider habe ich ein Problem mit Sonderzeichen wie é, ò etc ... Ich bekomme auf dem Server das Fragezeichen anstelle des richtigen Zeichens Jemand weiß, wie man es löst? Ich habe zu finden Codierung zu setzen, ohne ErfolgSonderzeichen mit Spring-Authentifizierung

import org.apache.http.auth.AuthScope; 
import org.apache.http.auth.UsernamePasswordCredentials; 
import org.apache.http.client.CredentialsProvider; 
import org.apache.http.client.HttpClient; 
import org.apache.http.impl.client.BasicCredentialsProvider; 
import org.apache.http.impl.client.HttpClients; 
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; 
import org.springframework.web.client.RestTemplate; 

public class RestClient extends RestTemplate { 
    public RestClient(String username, String password) { 
     CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
     credsProvider.setCredentials(
       new AuthScope(null, -1), 
       new UsernamePasswordCredentials(username, password)); 
     HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 
     setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); 
     } 
    } 

Dann rufe ich Web-Service mit Federklasse:

RestClient restClient = new RestClient(username, password); 
response = restClient.getForObject(addQueryParam(url, queryParams), Response.class); 

UPDATE:

diesen Code verwenden ich das gleiche haben Fehler (Fragezeichen statt Sonderzeichen). Irgendeine Idee?

public class RestClient extends RestTemplate { 
    private static RestClient instance; 

    private RestClient(String username, String password) { 
     CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
     credsProvider.setCredentials(
       new AuthScope(null, -1), 
       new UsernamePasswordCredentials(username, password)); 
     HttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 
     setRequestFactory(new HttpComponentsClientHttpRequestFactory(httpClient)); 
    } 

    public static synchronized RestClient getInstance(String username, String password){ 
     if (instance == null){ 
      instance = new RestClient(username, password); 
      instance.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); 
     } 
     return instance; 

    } 
} 
+0

"Ich habe ein Problem mit Sonderzeichen wie é, ò usw. Leider". Ok, was genau ist das Problem? – rmlan

+0

Ich erhalte auf dem Server Fragezeichen anstelle des korrekten Zeichens – luca

Antwort

0

zu web.xml gehen und den URIEncoding auf UTF-8

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" 
     URIEncoding="UTF-8"/> 


<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /> 

gesetzt Source

+0

Auf dem Server oder auf dem Client? Da die Anmeldung von der Formularseite funktioniert – luca

+0

Ändern Sie die web.xml (Dienstseite) – Elmehdi93

+0

Aber beziehen Sie sich auf Tomcat-Konfigurationsdatei? Im Frühjahr verwende ich Java Annotation – luca

0

Sie sollten das Recht Nachrichtenumformer In meinem Fall hinzufügen, wenn ich hatte ein ähnliches Problem Ich habe diese Konfiguration verwendet:

RestTemplate rt = new RestTemplate(); 
rt.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); 

Nach all funktionierte ziemlich gut

Angelo

+0

Was ich normalerweise tue ist: eine Frühlingsbohne zu definieren (Singleton-Bereich oder, wenn Sie eine andere Art von Frühling Bereich benötigen; in meinen Szenarien war Singleton ausreichend) und dann diese Bohne injizieren, was auch immer benötigt. Aber der erste Schritt, den ich Ihnen vorschlage, ist zu testen, ob diese Konfiguration für Sie funktioniert :) –

+0

können Sie posten, wie Sie die Klasse aktualisiert haben und welche Antwort Sie erhalten haben? –

+0

also zum Beispiel statt 'à' hast du '?' Habe ich recht? Wenn dem so ist, scheint das nichts mit dem Frühling zu tun zu haben. Versuchen Sie, die Protokollierung auch für httpclient auf TRACE zu setzen, damit Sie sehen können, was vom Server zum Client –