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.