Bevezetés a JBoss Undertow-ba

1. Áttekintés

Az Undertow egy rendkívül könnyű és nagy teljesítményű webszerver JBoss. A blokkoló és a nem blokkoló API-kat egyaránt támogatja NIO.

Mivel Java-ra van írva, beágyazott módban bármely JVM-alapú alkalmazásban használható, még a JBoss WilfFly szerver belsőleg használja Hullámtörés a szerver teljesítményének javítása érdekében.

Ebben az oktatóanyagban bemutatjuk az Undertow szolgáltatásait és használatát.

2. Miért Undertow?

  • Könnyűsúlyú: Hullámtörés rendkívül könnyű 1 MB alatt. Beágyazott módban futás közben csak 4 MB halom helyet használ fel
  • Servlet 3.1: Teljes mértékben támogatja Servlet 3.1
  • Web Socket: Támogatja a Web Socket funkciókat (beleértve a JSR-356)
  • Állandó kapcsolat: Alapértelmezés szerint Hullámtörés HTTP állandó kapcsolatokat tartalmaz hozzáadással életben tartani válasz fejléc. A kapcsolat részleteinek újrafelhasználásával segíti a tartós kapcsolatokat támogató ügyfeleket a teljesítmény optimalizálásában

3. Undertow használata

Kezdjük el használni Hullámtörés egyszerű webszerver létrehozásával.

3.1. Maven-függőség

Használni Hullámtörés, hozzá kell adnunk a következő függőséget pom.xml:

 io. Undertow undertow-servlet 1.4.18. Végső 

Futható korsó felépítéséhez hozzá kell adnunk a maven-shadow-plugint is. Ezért az alábbi konfigurációt is hozzá kell adnunk:

 org.apache.maven.plugins maven-shadow-plugin csomagtérkép 

A legfrissebb verziója Hullámtörés elérhető a Central Maven Repository-ban.

3.2. Egyszerű szerver

Az alábbi kódrészlettel egyszerű webszervert hozhatunk létre az Undertow's segítségével Építész API:

public class SimpleServer {public static void main (String [] args) {Undertow server = Undertow.builder (). addHttpListener (8080, "localhost"). setHandler (exchange -> {exchange.getResponseHeaders () .put (Fejlécek.CONTENT_TYPE , "text / plain"); exchange.getResponseSender (). send ("Hello Baeldung");}). build (); server.start (); }}

Itt használtuk a Építész API a kötéshez 8080 portot ehhez a szerverhez. Ezenkívül vegye figyelembe, hogy lambda kifejezést használtunk a kezelő használatához.

Az alábbi kódrészletet is használhatjuk ugyanarra a dologra lambda kifejezések használata nélkül:

Undertow server = Undertow.builder (). AddHttpListener (8080, "localhost") .setHandler (new HttpHandler () {@Override public void handleRequest (HttpServerExchange exchange) kivételt dob ​​az {exchange.getResponseHeaders (). Put (Headers.CONTENT) text / plain "); exchange.getResponseSender (). send (" Hello Baeldung ");}}). build ();

Fontos megjegyezni itt a HttpHandler API. Ez a legfontosabb plugin, amellyel testre szabhatja az Hullámtörés alkalmazás az igényeink alapján.

Ebben az esetben hozzáadtunk egy testreszabott kezelőt, amely hozzáadná a Tartalom-típus: szöveg / sima válasz fejléc minden kéréssel.

Hasonló módon, ha az egyes válaszokhoz valamilyen alapértelmezett szöveget szeretnénk visszaadni, használhatjuk az alábbi kódrészletet:

exchange.getResponseSender () .send ("Hello Baeldung");

3.3. Biztonságos hozzáférés

A legtöbb esetben nem engedélyezzük, hogy minden felhasználó hozzáférjen a szerverünkhöz. Általában az érvényes hitelesítő adatokkal rendelkező felhasználók hozzáférhetnek. Ugyanazt a mechanizmust valósíthatjuk meg a Hullámtörés.

Megvalósításához létre kell hoznunk egy identitáskezelőt, amely minden kérésnél ellenőrzi a felhasználó hitelességét.

Használhatjuk az Undertow's-t IdentityManager ezért:

public class CustomIdentityManager megvalósítja az IdentityManager {privát térkép felhasználók; // szabványos konstruktorok @Orride public Account confirm (Account account) {return account; } @ Nyilvános fiókellenőrzés felülbírálása (hitelesítő adatok) {return null; } @ Nyilvános fiókellenőrzés felülbírálása (karakterlánc azonosító, hitelesítő adatok) {Számlafiók = getAccount (id); if (számla! = null && verCredential (számla, hitelesítő adat)) {visszatérési számla; } return null; }}

Miután létrehozta az identitáskezelőt, létre kell hoznunk egy olyan tartományt, amely megtartja a felhasználói hitelesítő adatokat:

privát statikus HttpHandler addSecurity (HttpHandler toWrap, IdentityManager identityManager) {HttpHandler handler = toWrap; kezelő = new AuthenticationCallHandler (kezelő); handler = új AuthenticationConstraintHandler (kezelő); Lista mechanizmusai = Collections.singletonList (új BasicAuthenticationMechanism ("Baeldung_Realm")); handler = új AuthenticationMechanismsHandler (kezelő, mechanizmusok); handler = új SecurityInitialHandler (AuthenticationMode.PRO_ACTIVE, identityManager, handler); visszatérő kezelő; }

Itt használtuk a AuthenticationMode mint PRO_ACTIVE ami azt jelenti, hogy minden erre a kiszolgálóra érkező kérés továbbításra kerül a meghatározott hitelesítési mechanizmusokhoz, hogy lelkesen végezzék a hitelesítést.

Ha meghatározzuk AuthenticationMode mint CONSTRAINT_DRIVEN, akkor csak azok a kérelmek mennek keresztül a meghatározott hitelesítési mechanizmusokon, ahol a hitelesítést kötelező korlát (ok) elindul.

Most csak meg kell térképeznünk ezt a területet és az identitáskezelőt a szerverrel, mielőtt elindulna:

public static void main (String [] args) {Map users = new HashMap (2); users.put ("root", "jelszó" .toCharArray ()); users.put ("admin", "jelszó" .toCharArray ()); IdentityManager idm = new CustomIdentityManager (felhasználók); Undertow server = Undertow.builder (). AddHttpListener (8080, "localhost") .setHandler (addSecurity (e -> setExchange (e), idm)). Build (); server.start (); } privát statikus void setExchange (HttpServerExchange exchange) {SecurityContext context = exchange.getSecurityContext (); exchange.getResponseSender (). send ("Hello" + context.getAuthenticatedAccount (). getPrincipal (). getName (), IoCallback.END_EXCHANGE); }

Itt két felhasználói példányt hoztunk létre hitelesítő adatokkal. Ha a szerver fel van állítva, ahhoz, hogy hozzáférjünk hozzá, használnunk kell a két hitelesítő adatot.

3.4. Web Socket

Könnyű webaljzatcsere-csatornát létrehozni UnderTow's WebSocketHttpExchange API.

Megnyithatunk például egy socket kommunikációs csatornát az útvonalon baeldungApp az alábbi kódrészlettel:

public static void main (String [] args) {Undertow server = Undertow.builder (). addHttpListener (8080, "localhost") .setHandler (path (). addPrefixPath ("/ baeldungApp", websocket ((exchange, channel) - > {channel.getReceiveSetter (). set (getListener ()); channel.resumeReceives ();}))). addPrefixPath ("/", erőforrás (új ClassPathResourceManager (SocketServer.class.getClassLoader (), SocketServer.class.getPackage ( ))). addWelcomeFiles ("index.html"))) .build (); server.start (); } private static AbstractReceiveListener getListener () {return new AbstractReceiveListener () {@Orride protected void onFullTextMessage (WebSocketChannel channel, BufferedTextMessage message) {String messageData = message.getData (); a (WebSocketChannel munkamenethez: channel.getPeerConnections ()) {WebSockets.sendText (messageData, session, null); }}}; }

Létrehozhatunk egy HTML nevű oldalt index.html és használja a JavaScript-eket WebSocket API csatlakozás ehhez a csatornához.

3.5. File Server

Val vel Hullámtörés, létrehozhatunk egy fájlszervert is, amely megjelenítheti a könyvtár tartalmát és közvetlenül kiszolgálja a fájlokat a könyvtárból:

public static void main (String [] args) {Undertow server = Undertow.builder (). addHttpListener (8080, "localhost") .setHandler (erőforrás (új PathResourceManager (Paths.get (System.getProperty ("user.home")) ), 100)) .setDirectoryListingEnabled (true)) .build (); server.start (); }

A könyvtár tartalmának megjelenítéséhez nem kell felhasználói felületet létrehoznunk. Dobozon kívül Hullámtörés biztosít egy oldalt ehhez a megjelenítési funkcióhoz.

4. Tavaszi csomagtartó bővítmény

Attól eltekintve Kandúr és Móló,Tavaszi csizma támogatja Hullámtörés mint a beágyazott servlet konténer. Használni Hullámtörés, hozzá kell adnunk a következő függőséget a pom.xml:

 org.springframework.boot spring-boot-starter-undertow 1.5.6. KÖZLEMÉNY 

A legfrissebb verziója Spring Boot Undertow plugin elérhető a Central Maven Repository-ban.

5. Következtetés

Ebben a cikkben megtudtuk Hullámtörés és hogyan tudunk különféle típusú szervereket létrehozni vele.

Mint mindig, a teljes forráskód is elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found