Alapvető, UAA által védett JHipster Microservice kiépítése

1. Áttekintés

Korábbi cikkekben a JHipster alapjairól és annak mikroszolgáltatás-alapú alkalmazás előállításának módjáról volt szó.

Ebben az oktatóanyagban felfedezzük a JHipster felhasználói fiókját és engedélyezési szolgáltatását - röviden UAA - és hogyan kell használni egy teljes értékű JHispter-alapú mikroszolgáltatás alkalmazás biztosításához. Még jobb, hogy mindez elérhető egyetlen kódsor megírása nélkül!

2. Az UAA alapvető jellemzői

Az előző cikkekben épített alkalmazások fontos jellemzője, hogy a felhasználói fiókok szerves részét képezték ezeknek. Ez rendben van, ha egyetlen alkalmazásunk van, de mi van, ha meg akarjuk osztani a felhasználói fiókokat több JHipster által generált alkalmazás között? Itt jön be a JHipster UAA.

A JHipster UAA egy mikroszolgáltatás az alkalmazásunk egyéb szolgáltatásaitól függetlenül építjük, telepítjük és futtatjuk. Ez szolgál:

  • OAuth2-hitelesítő kiszolgáló, a Spring Boot megvalósításán alapul
  • Identity Management Server, amely egy felhasználói fiók CRUD API-t tesz ki

A JHipster UAA olyan tipikus bejelentkezési funkciókat is támogat, mint az önregisztráció és az „emlékezzen rám”. És természetesen teljes mértékben integrálódik a többi JHipster szolgáltatással.

3. Fejlesztői környezet beállítása

A fejlesztés megkezdése előtt először meg kell győződnünk arról, hogy környezetünk minden előfeltételét fel van-e állítva. Az Intro To JHipster cikkünkben leírt összes eszköz mellett szükségünk lesz egy működő JHipster Registry-re. Gyors összefoglalásként a rendszerleíró adatbázis szolgáltatás lehetővé teszi, hogy az általunk létrehozott különböző szolgáltatások megtalálják és beszéljenek egymással.

A rendszerleíró adatbázis létrehozásának és futtatásának teljes eljárását a JHipster with a Microservice Architecture cikkünk 4.1 szakasza ismerteti, ezért itt nem ismételjük meg. Docker kép is elérhető, és alternatívaként is használható.

4. Új JHipster UAA szolgáltatás létrehozása

Generáljuk az UAA szolgáltatásunkat a JHipster parancssori segédprogram segítségével:

$ mkdir uaa $ cd uaa $ jhipster 

Az első kérdésre válaszolnunk kell, hogy melyik típusú alkalmazást szeretnénk létrehozni. A nyílbillentyűkkel kiválasztjuk a „JHipster UAA (a microservice OAuth2 hitelesítéshez)” lehetőséget:

Ezután néhány kérdést fogunk kérni a létrehozott szolgáltatással kapcsolatos konkrét részletekről, például az alkalmazás nevéről, a kiszolgáló portjáról és a szolgáltatás felfedezéséről:

Az alapértelmezett válaszok többnyire rendben vannak. Ami az alkalmazás alapnevét illeti, ami a keletkezett műtárgyak sokaságát érinti, úgy döntöttünk „Uaa” (kisbetű) - értelmes név. Ha akarjuk, játszhatunk a többi értékkel, de ez nem változtatja meg a létrehozott projekt főbb jellemzőit.

Miután megválaszolta ezeket a kérdéseket, a JHipster létrehozza az összes projektfájlt és telepíti npm csomagfüggőségek (amelyeket ebben az esetben nem igazán használnak).

Most már használhatjuk a helyi Maven szkriptet az UAA szolgáltatásunk felépítéséhez és futtatásához:

$ ./mvnw ... kihagyott üzenetek 2018-10-14 14: 07: 17.995 INFO 18052 --- [restartedMain] com.baeldung.jhipster.uaa.UaaApp: ------------ ---------------------------------------------- "uaa" alkalmazás fut! Hozzáférési URL-ek: Helyi: // localhost: 9999 / Külső: //192.168.99.1:9999/ Profil (ok): [dev, swagger] ------------------- --------------------------------------- 2018-10-14 14: 07: 18.000 INFO 18052 --- [restartedMain] com.baeldung.jhipster.uaa.UaaApp: --------------------------------- ------------------------- Config Server: Csatlakoztatva a JHipster Registry konfigurációs kiszolgálóhoz! -------------------------------------------------- -------- 

A legfontosabb üzenet, amelyre oda kell figyelni, az az, hogy az UAA csatlakozik a JHipster Registry-hez. Ez az üzenet azt jelzi, hogy az UAA képes volt regisztrálni magát, és elérhetővé válik majd más mikroszolgáltatások és átjárók számára.

5. Az UAA szolgáltatás tesztelése

Mivel a létrehozott UAA szolgáltatásnak önmagában nincs felhasználói felülete, közvetlen API-hívásokat kell használnunk annak tesztelésére, hogy a várakozásoknak megfelelően működik-e.

Két funkcióval kell megbizonyosodnunk arról, hogy működnek-e, mielőtt más alkatrészekkel vagy rendszerünkkel használnánk: OAuth2-tokenek létrehozása és fiókkeresés.

Először nézzük szerezzen be egy új tokent az UAA OAuth végpontjából, egy egyszerű használatával becsavar parancs:

$ curl -X POST --data \ "felhasználónév = felhasználó & jelszó = felhasználó & grant_type = jelszó & hatókör = openid" \ // web_app: [e-mail védett]: 9999 / oauth / token 

Itt használtuk a jelszó megadása folyamatot, két pár hitelesítő adat felhasználásával. Ebben a folyamatban kliens hitelesítő adatokat küldünk alap HTTP hitelesítéssel, amelyet közvetlenül az URL-be kódolunk.

A végfelhasználói hitelesítő adatokat a törzs részeként küldjük el, a szokásos felhasználónév és jelszó paraméterek felhasználásával. A megnevezett felhasználói fiókot is használjuk „Felhasználó”, amely alapértelmezés szerint elérhető a tesztprofilban.

Feltéve, hogy minden részletet helyesen adtunk meg, kapunk egy választ, amely hozzáférési tokent és frissítési tokent tartalmaz:

{"access_token": "eyJh ... (token kihagyva)", "token_type": "hordozó", "refresh_token": "eyJ ... (token kihagyva)", "expires_in": 299, "hatókör": " openid "," iat ": 1539650162," jti ":" 8066ab12-6e5e-4330-82d5-f51df16cd70f "}

Most már tehetünk használja a visszaküldöttet access_token hogy információkat kapjon a társított fiókról a számla forrás, amely elérhető az UAA szolgáltatásban:

$ curl -H "Engedélyezés: Bemutató eyJh ... (a hozzáférési token elhagyva)" \ // localhost: 9999 / api / account {"id": 4, "login": "user", "firstName": "User" , "vezetékNév": "Felhasználó", "e-mail": "[e-mail védett]", "imageUrl": "", "aktivált": igaz, "langKey": "en", "createdBy": "rendszer", " createdDate ":" 2018-10-14T17: 07: 01.336Z "," lastModifiedBy ":" rendszer "," lastModifiedDate ": null," hatóságok ": [" ROLE_USER "]} 

Kérjük, vegye figyelembe, hogy ezt a parancsot ki kell adnunk, mielőtt a hozzáférési token lejárna. Alapértelmezés szerint az UAA szolgáltatás öt percig érvényes tokent ad ki, ami ésszerű érték a termelés számára.

A szerkesztésével könnyen megváltoztathatjuk az érvényes tokenek élettartamát alkalmazás-.yml fájl, amely megfelel annak a profilnak, amely alatt az alkalmazást futtatjuk, és a uaa.web-client-configuration.access-token-érvényesség-másodperc alatt kulcs. A beállítási fájlok a src / main / resources / config UAA projektünk könyvtárát.

6. Az UAA-kompatibilis átjáró létrehozása

Most, hogy biztosak vagyunk benne, hogy az UAA szolgáltatásaink és szolgáltatásnyilvántartásaink működnek, hozzunk létre egy ökoszisztémát, amellyel ezek kölcsönhatásba léphetnek. A végére hozzáadjuk:

  • Szög alapú kezelőfelület
  • Mikroszolgáltatás háttér
  • API-átjáró, amely mindkettőt előtérbe helyezi

Kezdjük valójában az átjáróval, mivel ez lesz a szolgáltatás, amely tárgyalni fog az UAA-val a hitelesítésről. Fogja az elülső alkalmazásunkat, és továbbítja az API kéréseket más mikroszolgáltatások felé.

Ismét a JHipster parancssori eszközt fogjuk használni egy újonnan létrehozott könyvtárban:

$ mkdir gateway $ cd gateway $ jhipster

Mint korábban, néhány kérdésre is választ kell adnunk a projekt létrehozása érdekében. A legfontosabbak a következők:

  • Alkalmazás típusa: „Microservices gateway” kell legyen
  • Alkalmazás neve: Ezúttal az „átjárót” fogjuk használni
  • Szolgáltatás felfedezése: Válassza a „JHipster registry” lehetőséget
  • Hitelesítés típusa:Ki kell választanunk a „Hitelesítés JHipster UAA szerverrel” opciót itt
  • UI keretrendszer: Válasszuk az „Angular 6” -t

Miután a JHipster elkészítette az összes műtárgyat, elkészíthetjük és futtathatjuk az átjárót a mellékelt Maven wrapper szkript segítségével:

$ ./mwnw ... sok üzenet kihagyva ---------------------------------------- ------------------ Az 'átjáró' alkalmazás fut! Hozzáférési URL-ek: Helyi: // localhost: 8080 / Külső: //192.168.99.1:8080/ Profil (ok): [dev, swagger] ------------------- --------------------------------------- 2018-10-15 23: 46: 43.011 INFO 21668 --- [restartedMain] c.baeldung.jhipster.gateway.GatewayApp: --------------------------------- ------------------------- Config Server: Csatlakoztatva a JHipster Registry konfigurációs kiszolgálóhoz! -------------------------------------------------- -------- 

A fenti üzenettel úgy érhetjük el alkalmazásunkat, hogy a böngészőnkre mutatunk // localhost: 8080, amelynek meg kell jelenítenie az alapértelmezetten létrehozott kezdőlapot:

Menjünk tovább, és lépjünk be az alkalmazásunkba a Fiók> Bejelentkezés menü tétel. Majd használjuk admin / admin hitelesítő adatokként, amelyeket a JHipster alapértelmezés szerint automatikusan létrehoz. Minden jól megy, az üdvözlő oldalon megjelenik egy üzenet, amely megerősíti a sikeres bejelentkezést:

Összefoglalva azt, ami történt, hogy idekerültünk: Először az átjáró elküldte a hitelesítő adatainkat az UAA OAuth2 token végpontjának, amely azokat validálta, és egy hozzáférést és egy frissítő JWT tokent tartalmazó választ generált. Az átjáró ekkor elvette ezeket a tokeneket, és cookie-ként visszaküldte a böngészőbe.

Ezután a szögletes előtér a / uaa / api / account API, amely ismét átjárót továbbított az UAA-hoz. Ebben a folyamatban az átjáró elviszi a hozzáférési jogkivonatot tartalmazó cookie-t, és annak értékét felhasználva engedélyezési fejlécet ad a kéréshez.

Ha szükséges, mind az UAA, mind a Gateway naplóinak ellenőrzésével nagyon részletesen láthatjuk ezt az áramlást. A teljes beállítással a vezetékes szintű adatokhoz is hozzájuthatunk org.apache.http.wire naplózó szint DEBUG.

7. UAA-kompatibilis mikroszolgáltatás előállítása

Most, hogy az alkalmazási környezetünk beindult, itt az ideje, hogy hozzáadjunk egy egyszerű mikroszolgáltatást. Létrehozunk egy „árajánlatok” mikroszolgáltatást, amely egy teljes REST API-t tesz elérhetővé, amely lehetővé teszi számunkra, hogy készítsünk, lekérdezzünk, módosítsunk és töröljünk részvényárfolyamokat. Minden ajánlatnak csak három tulajdonsága lesz:

  • Az idézet kereskedelmi szimbóluma
  • Az ára, és
  • Az utolsó kereskedés időbélyege

Térjünk vissza a terminálunkra, és a JHipster parancssori eszközével hozzuk létre projektünket:

$ mkdir $ cd idézi $ jhipstert 

Ezúttal arra kérjük a JHipstert, hogy hozzon létre egy Mikroszolgáltatás alkalmazás, amelyeket „idézeteknek” hívunk. A kérdések hasonlóak azokhoz, amelyekre korábban válaszoltunk. Az alapértelmezéseket a legtöbbjüknél megtarthatjuk, kivéve ezt a hármat:

  • Szolgáltatás felfedezése: Válassza a „JHipster Registry” lehetőséget, mivel már használjuk az architektúránkban
  • Az UAA alkalmazás elérési útja: Mivel az összes projektkönyvtárat egy mappában tartjuk, ez így lesz ../uaa (hacsak nem változtattunk rajta, természetesen)
  • Hitelesítés típusa: Válassza a „JHipster UAA szerver” lehetőséget

Így néz ki egy tipikus válaszsor esetünkben:

Amint a JHipster befejezte a projekt létrehozását, folytathatjuk és felépíthetjük:

$ mvnw ... sok-sok üzenet kihagyva ---------------------------------------- ------------------ Az "idézetek" alkalmazás fut! Hozzáférési URL-ek: Local: // localhost: 8081 / External: //192.168.99.1:8081/ Profil (ok): [dev, swagger] ------------------- --------------------------------------- 2018-10-19 00: 16: 05.581 INFO 16092 --- [restartedMain] com.baeldung.jhipster.quotes.QuotesApp: --------------------------------- ------------------------- Config Server: Csatlakoztatva a JHipster Registry konfigurációs kiszolgálóhoz! -------------------------------------------------- -------- ... további üzenetek kihagyva 

A „Csatlakozás a JHipster Registry konfigurációs kiszolgálóhoz!” Üzenet az, amit itt keresünk. Jelenléte arról árulkodik, hogy a mikroszolgáltatás regisztrálta magát a rendszerleíró adatbázisba, és emiatt az átjáró képes lesz továbbítani a kéréseket az „idézetek” erőforrásunkhoz, és egy szép felhasználói felületen megjeleníteni, amint létrehoztuk. Mivel mikroszolgáltatási architektúrát használunk, ezt a feladatot két részre osztottuk:

  • Hozza létre az „idézetek” erőforrás háttérszolgáltatást
  • Hozzon létre egy „idézőjelű” felhasználói felületet a kezelőfelületen (az átjáró projekt része)

7.1. Az Idézetek erőforrás hozzáadása

Először is meg kell győződjön meg arról, hogy az idézőjelű mikroszolgáltatás alkalmazás le van állítva - ugyanazon a konzol ablakon találhatjuk meg a CTRL-C-t, amellyel korábban futtattuk.

Nézzük vegyen fel egy entitást a projektbe a JHipster eszközével. Ezúttal a import-jdl parancsot, amely megment minket az unalmas és hibára hajlamos folyamattól, amikor minden részletet külön adunk meg. A JDL formátumról további információt a teljes JDL referenciában talál.

Ezután mi nevű szöveges fájlt hozhat létre idézetek.jh a mi Idézet entitás meghatározása, néhány kódgenerálási irányelvvel együtt:

entitás Idézet {szimbólum Karaktersorozat szükséges egyedi, ár BigDecimal szükséges, lastTrade ZonedDateTime szükséges} dto Idézet mapstruct oldalszámmal Idézet lapozási szolgáltatással Idézet serviceImpl microservice Idézet idézetek szűrővel Idézet clientRootFolder Idézet idézetekkel 

Most már tehetünk importálja ezt az entitás definíciót projektünkhöz:

$ jhipster import-jdl idézetek.jh 

Megjegyzés: az importálás során a JHipster konfliktusra panaszkodik, miközben módosításokat hajt végre a master.xml fájl. Nyugodtan választhatjuk a átír opció ebben az esetben.

Mostantól újra felépíthetjük és futtathatjuk a mikroszolgáltatásunkat mvnw. Amint elkészült, ellenőrizhetjük, hogy az átjáró felveszi-e az új útvonalat, amelyhez hozzáfér Gateway nézet, elérhető a Adminisztráció menü. Ezúttal láthatjuk, hogy van bejegyzés a "/idézetek/**" útvonal, amelyazt mutatja, hogy a háttérprogram készen áll a felhasználói felület használatára.

7.2. Az Idézetek felhasználói felület hozzáadása

Végül hozzuk létre a CRUD felhasználói felületet az átjáró projektben, amelyet az árajánlataink eléréséhez fogunk használni. A felhasználói felület összetevőinek előállításához ugyanazt a JDL fájlt fogjuk használni az "idézetek" mikroszolgáltatási projektből, és a JHipster's segítségével importáljuk. import-jdl parancs:

$ jhipster import-jdl ../jhipster-quotes/quotes.jh ... üzenetek kihagyva? Felülírja a webpack \ webpack.dev.js fájlt? y ... kihagyott üzenetek Gratulálunk, a JHipster végrehajtása befejeződött! 

Az importálás során a JHipster néhányszor felszólítja az ütköző fájlokkal kapcsolatos teendőket. Esetünkben egyszerűen felülírhatjuk a meglévő erőforrásokat, mivel még nem hajtottunk végre testreszabást.

Most újraindíthatjuk az átjárót, és megnézhetjük, mit teljesítettünk. Mutassuk a böngészőnket az átjáróra // localhost: 8080, ügyelve arra, hogy frissítsük a tartalmát. A Entitások menüben új bejegyzést kell tartalmaznia a Idézetek forrás:

Erre a menüpontra kattintva megjelenik a Idézetek listázási képernyő:

A várakozásoknak megfelelően a lista üres - még nem tettünk hozzá idézeteket! Próbálja meg hozzáadni egyet a képernyő jobb felső sarkában található „Új árajánlat létrehozása” gombra kattintva, amely a létrehozás / szerkesztés űrlapra vezet:

Láthatjuk, hogy a létrehozott űrlap minden elvárt tulajdonsággal rendelkezik:

  • A kötelező mezőket piros jelzővel jelölik, amely kitöltés után zöldre vált
  • A Dátum / Idő és a numerikus mezők natív összetevőket használnak az adatbevitel elősegítésére
  • Törölhetjük ezt a tevékenységet, amely változatlanul hagyja az adatokat, vagy elmenthetjük új vagy módosított entitásunkat

Miután kitöltötte ezt az űrlapot és megütötte Mentés, az eredményeket a listázási képernyőn látjuk. Most láthatjuk az újat Idézetek példaaz adatrácsban:

Rendszergazdaként hozzáférünk az API menüponthoz is, amely elvezet minket a szokásos Swagger API fejlesztői portálhoz. Ezen a képernyőn kiválaszthatjuk az elérhető API-k egyikét:

  • alapértelmezett: A Gateway saját API-ja, amely megjeleníti az elérhető útvonalakat
  • uaa: Fiók és felhasználói API-k
  • idézetek: Quotes API

8. Következő lépések

Az eddig felépített alkalmazás a várakozásoknak megfelelően működik, és szilárd alapot nyújt a további fejlesztéshez. A követelmények összetettségétől függően mindenképpen meg kell írnunk néhány (vagy sok) egyedi kódot. Néhány olyan terület, amely valószínűleg munkát igényel:

  • A felhasználói felület testreszabása: Ez általában nagyon egyszerű a front-end alkalmazás felépítésének köszönhetően - hosszú utat tehetünk meg egyszerűen a CSS-sel babrálva és néhány képet hozzáadva
  • A felhasználói adattár változásai: Egyes szervezetek már rendelkeznek valamilyen belső felhasználói adattárral (pl. LDAP könyvtár) - ehhez változtatásokra lesz szükség az UAA-n, de az a szép, hogy csak egyszer kell megváltoztatnunk
  • Részletesebb felhatalmazás a jogalanyokra:A létrehozott entitás-háttér által használt szabványos biztonsági modell nem rendelkezik semmilyen példányszintű és / vagy terepi szintű biztonsággal - a fejlesztő feladata, hogy hozzáadja ezeket a korlátozásokat a megfelelő szintre (API vagy szolgáltatás, az esettől függően)

Ezekkel a megjegyzésekkel is egy olyan eszköz használata, mint a JHispter, sokat segíthet egy új alkalmazás fejlesztésében. Ez szilárd alapot hoz magával, és a rendszer - és a fejlesztők - fejlődésével jó kódszintű konzisztenciát tarthat fenn.

9. Következtetés

Ebben a cikkben bemutattuk, hogyan lehet a JHispter használatával létrehozni egy működő alkalmazást egy mikroszolgáltatási architektúra és a JHipster UAA szervere alapján. Ezt úgy értük el, hogy egyetlen Java-kódot sem írtunk, ami meglehetősen lenyűgöző.

Szokás szerint az ebben a cikkben bemutatott projektek teljes kódja elérhető a GitHub adattárunkban.