Alapvető hitelesítés a RestTemplate-tal
Tartalomjegyzék
- 1. Áttekintés
- 2. A RestTemplate tavasszal
- 3. Az Engedélyezés HTTP fejléc kézi kezelése
- 4. Az Engedélyezés HTTP fejléc automatikus kezelése
- 5. Maven-függőségek
- 6. Következtetés
1. Áttekintés
Ez a cikk bemutatja a Springs használatát RestTemplate nak nek alapvető hitelesítéssel biztosított RESTful szolgáltatást kell fogyasztani.
Miután beállította az alap hitelesítést a sablonhoz, minden kérést elküldünk megelőzően tartalmazza a teljes igazolást szükséges a hitelesítési folyamat végrehajtásához. A hitelesítő adatokat kódolják, és a Engedélyezés HTTP fejléc, az alap hitelesítési séma specifikációival összhangban. Egy példa így néz ki:
Engedélyezés: Alap QWxhZGRpbjpvcGVuIHNlc2FtZQ ==
2. A RestTemplate
Bootstrapping a RestTemplate a tavaszi kontextusban egyszerűen babot jelenthet be érte; azonban a RestTemplate val vel Alapvető hitelesítés kézi beavatkozást igényel, ezért a bab közvetlen deklarálása helyett egy Spring FactoryBean a nagyobb rugalmasság érdekében. Ez a gyár az inicializáláskor létrehozza és konfigurálja a sablont:
@Component public class RestTemplateFactory megvalósítja a FactoryBean, InitializingBean {private RestTemplate restTemplate; public RestTemplate getObject () {return restTemplate; } public class getObjectType () {return RestTemplate.class; } nyilvános logikai isSingleton () {return true; } public void afterPropertiesSet () {HttpHost host = new HttpHost ("localhost", 8082, "http"); restTemplate = new RestTemplate (új HttpComponentsClientHttpRequestFactoryBasicAuth (host)); }}
A házigazda és kikötő az értékeknek a környezettől függenek - lehetővé téve az ügyfél számára, hogy rugalmasan meghatározhassa az egyik értékkészletet az integrációs teszteléshez, a másikat pedig a termeléshez. Az értékeket a tulajdonságfájlok első osztályú Spring támogatása kezelheti.
3. Az engedélyezés HTTP fejlécének kézi kezelése
A. Létrehozásának folyamata Engedélyezés a fejléc viszonylag egyszerű az alap hitelesítéshez, így nagyjából kézzel is elvégezhető néhány kódsorral:
HttpHeaders createHeaders (String felhasználónév, String jelszó) {return new HttpHeaders () {{String auth = username + ":" + password; byte [] encodedAuth = Base64.encodeBase64 (auth.getBytes (Charset.forName ("US-ASCII"))); String authHeader = "Basic" + új String (encodedAuth); set ("Engedélyezés", authHeader); }}; }
Ezután a kérés elküldése ugyanolyan egyszerűvé válik:
restTemplate.exchange (uri, HttpMethod.POST, új HttpEntity (createHeaders (felhasználónév, jelszó)), clazz);
4. Az engedélyezés HTTP fejlécének automatikus kezelése
A 3.0 és a 3.1, valamint a 4.x egyaránt nagyon jó támogatást nyújt az Apache HTTP könyvtárakhoz:
- 3.0 tavasz, a CommonsClientHttpRequestFactory integrálva a mostval az élet végeHttpClient 3.x
- A 3.1 tavasz bevezette a jelenlegi támogatást HttpClient 4.x keresztül HttpComponentsClientHttpRequestFactory (támogatás hozzáadva a JIRA SPR-6180-hoz)
- A 4.0 tavasz aszinkron támogatást vezetett be a HttpComponentsAsyncClientHttpRequestFactory
Kezdjük a HttpClient 4 és a Spring 4 beállításával.
A RestTemplate eddig egy HTTP kérés gyárra lesz szükség - egy olyan gyárra, amely támogatja az alap hitelesítést -, így jó. A meglévő felhasználásával azonban HttpComponentsClientHttpRequestFactory közvetlenül nehéznek bizonyul, mivel a RestTemplate a megfelelő támogatás nélkül készült HttpContext - a puzzle egyik darabja. Tehát alosztályt kell adnunk HttpComponentsClientHttpRequestFactory és felülírja a createHttpContext módszer:
public class HttpComponentsClientHttpRequestFactoryBasicAuth extends HttpComponentsClientHttpRequestFactory {HttpHost host; public HttpComponentsClientHttpRequestFactoryBasicAuth (HttpHost host) {super (); this.host = host; } védett HttpContext createHttpContext (HttpMethod httpMethod, URI uri) {return createHttpContext (); } privát HttpContext createHttpContext () {AuthCache authCache = új BasicAuthCache (); BasicScheme basicAuth = új BasicScheme (); authCache.put (gazdagép, basicAuth); BasicHttpContext localcontext = új BasicHttpContext (); localcontext.setAttribute (HttpClientContext.AUTH_CACHE, authCache); return localtext; }}
Itt van - a HttpContext - hogy az alapvető hitelesítési támogatás be van építve. Amint láthatja, a megelőző alapvető hitelesítés HttpClient 4.x használatával kissé megterhelő: a hitelesítési információk tárolva vannak, és a hitelesítési gyorsítótár beállításának folyamata nagyon kézi és nem intuitív .
És ezzel minden a helyén van - a RestTemplate mostantól csak az a hozzáadásával tudja támogatni az alap hitelesítési sémát BasicAuthorizationInterceptor;
restTemplate.getInterceptors (). add (új BasicAuthorizationInterceptor ("felhasználónév", "jelszó"));
És a kérés:
restTemplate.exchange ("// localhost: 8082 / spring-security-rest-basic-auth / api / foos / 1", HttpMethod.GET, null, Foo.class);
Ha mélyreható vitát szeretne folytatni arról, hogy miként biztosíthatja magát a REST szolgáltatást, tekintse meg ezt a cikket.
5. Maven-függőségek
A következő Maven-függőségekre van szükség a RestTemplate maga és a HttpClient könyvtár:
org.springframework spring-webmvc 5.0.6.RELEASE org.apache.httpcomponents httpclient 4.5.3
Opcionálisan, ha a HTTP Engedélyezés fejléc manuálisan épül fel, akkor a kódolás támogatásához további könyvtárra van szükség:
commons-kodek commons-kodek 1.10
A legújabb verziókat a Maven tárházban találja.
6. Következtetés
Bár az Apache HttpClient 3.x fejlesztési ága egy ideje már az élet végéhez ért, és ennek a verziónak a tavaszi támogatása teljesen elavult, az itt található információk RestTemplate és a biztonság még mindig nem számol a jelenlegi HttpClient 4.x kiadások. Ez a cikk kísérlet ennek megváltoztatására egy részletes, lépésről lépésre megtárgyalva, hogy miként állíthatja be az alap hitelesítést a RestTemplate és hogyan lehet használni egy biztonságos REST API használatához.
Annak érdekében, hogy túllépjünk a cikkben található kódmintákon, mind az itt vizsgált fogyasztó oldal, mind a tényleges RESTful szolgáltatás megvalósításával, tekintse át a projektet a Githubon.
Ez egy Maven-alapú projekt, ezért könnyen importálhatónak és futtathatónak kell lennie.