L'utilisation de Dropwizard + Jersey pour une application Web qu'un utilisateur connecte avec son nom d'utilisateur/mot de passe et un cookie avec son identifiant est créée. Ils renvoient ce cookie d'identifiant utilisateur avec chaque requête.Comment puis-je faire OkHttp obtenir un paramètre de Jersey et utiliser dans Interceptor?
Je peux obtenir ce cookie très bien à Jersey. Le problème est quand je veux impliquer Retrofit2 et OkHttp.
public interface Interceptor {
Response intercept(Chain chain) throws IOException;
interface Chain {
Request request();
Response proceed(Request request) throws IOException;
/**
* Returns the connection the request will be executed on. This is only available in the chains
* of network interceptors; for application interceptors this is always null.
*/
@Nullable Connection connection();
}
}
Alors que Request
doivent contient User-Id
maintenant le problème est, comment pouvons-nous faire OkHttp obtenir ce numéro d'utilisateur de Jersey?
Nous devons le synchroniser lorsque nous l'envoyons à RequestInterceptor. Je ne vois pas un moyen facile d'injecter des choses dans RequestInterceptor parce que c'est Okhttp. Le problème est Jersey sont Java 1900-2000 où Retrofit et OkHttp sont comme Java 2015+
La seule façon de le faire User-Id
en un seul endroit est utilise RequestInterceptor
Il est une interface et elle doit être partagée si l'utilisateur doit Id somehome viennent de parameter
à l'intérieur intercept
fonction pas du constructeur. Ce paramètre doit avoir User-Id
afin que nous ne devions pas faire de mauvaises choses comme ThreadLocal ou synchroniser.
MISE À JOUR: J'ai fait un projet SAMLE:
https://github.com/andrewarrow/web-wash
Si vous regardez ce fichier:
L'objectif est d'être en mesure de remplacer:
userClient.getSomething (user_id)
avec
userClient.getSomething()
et ont l'auto-magie userClient obtenir le user_id dans un fil de manière sûre. Et garder à l'esprit:
https://github.com/andrewarrow/web-wash/blob/master/src/team/higher/web/client/UserClient.kt
@GET ("utilisateur/test") de getSomething amusant ( @Header ("User-ID") id: String ): String
utilisera l'id dans @Header qui provoque OKHttp et Retrofit2 pour établir une connexion URL et placez cet identifiant dans l'en-tête http de cette http GET à l'api:
https://api.github.com/user/test