Möglichkeiten zum Proxying eines InputStreams

8

Ich verwende Android-Universal-Image-Loader , um Bilder vom Remote-Server über% co_de zu laden % auf meiner Android-Anwendung. Um Zugriff auf Bilder zu erhalten, sollte der Client ein gültiges Token bereitstellen und manchmal kann der Server den Fehler "abgelaufenes crsf-Token" zurückgeben. Um dieses Verhalten zu behandeln, sollte ein benutzerdefinierter ImageDownloader definiert werden. Unten ist die Basisimplementierung der Methode, die in meiner Implementierung übergangen werden sollte.

%Vor%

Ich möchte es umschreiben, um ungültige Token-Fehler zu behandeln. Wenn der Server beispielsweise einen solchen Fehler zurückgibt, sollte er erkannt werden, das Token sollte neu generiert und die Anforderung wiederholt werden.

Die einzige Lösung, die mir einfällt, ist wie folgt (verkürzter Code):

%Vor%

Ist es sicher, eine solche Lösung zu verwenden, wenn ich bedenke, dass ich es nur für Thumbnails mit einer maximalen Größe von 80 KB verwende? Gibt es andere Lösungen?

    
bvk256 14.12.2015, 10:14
quelle

3 Antworten

3

Ihre Lösung ist sicher, obwohl es schöner ist, wenn Sie Ihre ImageDownloaderInputStream -Klasse erstellen, die InputStream implementiert, und die ursprüngliche InputStream umschließt. Sie können einige Chunks aus dem zugrunde liegenden Eingabestream vorab laden (puffern), um festzustellen, ob der Inhalt gültig ist oder nicht.

Die einzige Methode, die Sie außer Kraft setzen sollten, ist read () .

Wenn der Inhalt gültig ist, können Sie den Pufferinhalt dem Aufrufer bereitstellen, wenn der Puffer leer ist, direkt aus dem zugrunde liegenden InputStream streamen.

Wenn der Inhalt ungültig ist, lesen Sie einfach einen anderen Stream oder geben Sie einen Stream mit der Länge null zurück.

%Vor%     
gaborsch 14.12.2015, 11:44
quelle
1

Sie können nach einem gültigen Token suchen, nachdem Sie überprüft haben, dass die Antwort 200 OK lautet:

%Vor%

Wenn diese Bedingungen nicht erfüllt sind, behandeln Sie es entsprechend, d. h. wiederholen Sie die Anfrage x-mal.

Ich würde eine Methode isValidToken(...) anstelle von isInvalidToken(...) in Betracht ziehen, damit Sie die Antwort der Methode nicht negieren müssen.

    
kstandell 14.12.2015 11:05
quelle
0

Haben Sie so etwas in Erwägung gezogen?

%Vor%     
Zain 14.12.2015 10:30
quelle

Tags und Links