Wildfly Application Server bygger på Undertow Servlet Container, hvilket gør det muligt gennem dennes Servlet Extension mekanisme at udvide containeren med kode der håndtere NSP specifikke detaljer.
Undertow består af et større antal HttpHandlers der hver har sin egen afgrænsede del af ansvaret for at få udført et Http Servlet Request
og produceret et Http Servlet Response
. Handlers i Undertow opbygges i en kalds-kæde så hver handler både kan håndtere Request og Response (I Undertow samles dette i en Exchange).
Følgende er et eksempel på hvilke Undertow og Wildfly handlers der er involveret i et simpelt SOAP kald indtil kontrollen ender i en Java Http Servlet:
javax.servlet.http.HttpServlet io.undertow.servlet.handlers.ServletHandler io.undertow.servlet.handlers.FilterHandler io.undertow.servlet.handlers.security.ServletSecurityRoleHandler io.undertow.servlet.handlers.ServletDispatchingHandler org.wildfly.extension.undertow.security.SecurityContextAssociationHandler io.undertow.server.handlers.PredicateHandler dk.sds.nsp.accesshandler.NspServletHandler io.undertow.server.handlers.PathHandler io.undertow.servlet.handlers.security.SSLInformationAssociationHandler io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler io.undertow.server.handlers.PredicateHandler io.undertow.security.handlers.AbstractConfidentialityHandler io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler io.undertow.security.handlers.AuthenticationMechanismsHandler io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler io.undertow.security.handlers.SecurityInitialHandler io.undertow.server.handlers.PredicateHandler org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler io.undertow.server.handlers.PredicateHandler io.undertow.servlet.handlers.ServletInitialHandler |
Stakken læses nedefra og op i forhold til håndtering af Request og derefter oppefra og ned ifm håndtering af Response. Stakken viser også hvor NSP Access Handler er placeret i denne.
NSP Access Handler (AH) implementerer Undertows HttpHandler
interface og tilføjes i stakken via den omtalte Servlet Extension mekanisme, således at den køres efter Servlet Containeren har håndteret eventuelle sikkerhedsaspekter men inden andre Servlet relaterede handlers køres. Placeringen sikrer også at Undertow har allokeret en dedikeret Task Thread til at håndtere kaldet frem for en asynkron XNIO Thread der bruges længere nede i stakken.
Placeringen af AH i stakken kan summeres på et lidt højere abstraktionsplan i følgende digram:
NSP Access Handler (AH) løser følgende opgaver på NSP platformen:
NSP Access Handler opbygger en ensartet Json Access Log for hvert eneste kald til platformen, med mindre der er tale om et Http Get kald uden nogen Http Body (f.eks. ved kald af status sider eller hentning af wsdl & xsd filer). Access Loggen indeholder detaljer fra Http Headers samt Soap Headers men det er muligt at konfigurere et stort antal andre Xml elementer til at komme med i loggen.
NSP Access Handler implementerer NSP Audit Log interfacet og samler informationer fra den kaldte NSP komponent samt Access Loggen sammen. Disse informationer bruges til at bygge en ensartet Json Audit Log for hvert kald til komponenten.
NSP Access Handler verificerer at certifikater i et kald til en NSP komponent er udstedt under et kendt OCES intermediate/rod-certifikat samt ikke optræder på dennes spæreliste
Flere NSP komponenter understøtter at anvendere gør brug af MTOM bindingen i SOAP. På grund af AH's placering i Undertows stak af Handlere skal AH selv kunne parse disse Multipart beskeder.
NSP Access Handler implementerer NSP Security API interfacet og stiller informationer fundet i den indkommende DGWS billet til rådighed for NSP komponenten. AH validerer at billeten er korrekt signeret af en STS.
NSP Access Handler implementerer NSP Security API interfacet og stiller informationer fundet i den indkommende OIO-IDWS billet til rådighed for NSP komponenten. AH validerer at billeten er korrekt signeret af en STS og at hele requestet er signeret af det rigtige anvendersystem.
Den Gode Webservice standarden diktere 2 forksellige Soap Headers der skal være i svar fra en DGWS service. AH sørger for at tilføje disse hvis det indkommende request indeholder en DGWS billet.
OIO-IDWS standarden diktere at hele svaret fra et kald til en OIO-IDWS service skal signeres med et Service Provider certifikat. AH sikrer dette hvis det indkommende request indeholdte en OIO-IDWS billet.
Nedenstående graf viser hvorledes AH er opdelt i et antal handlers der hver bidrager til en eller flere af de omtalte opgaver
I dette afsnit beskrives hver enkelt handler i flere detaljer.
Denne handler delegerer håndtering af requestet til et større antal handlers.
Opretter en ny NSP Audit Log Entry og registrere denne i den aktive tråds Nsp Audit Provider, således at kald fra komponenten til Audit API'ets metoder tilføjer auditdata heri. Når komponenten har udført sin operation tilføjes accessdata også til den ny Entry og det hele logges som et JSON objekt via en konfigurerbar Log4J kategori.
Opretter en ny NSP Access Log Entry som lægges på Undertows Exchange således at de andre handlers kan tilføje information dertil. Når alle handlers er færdig logges informationerne som et JSON objekt via en konfigurerbar Log4J kategori.