EGJE jako server webových služeb
Obsah
2. Server webových služeb REST
2.3 Konfigurace služby, autorizace
2.6 Diagram procesu spuštění REST WS
2.8 Rst07f - WEB Služba pro zápis do Dca01
3. Server webových služeb SOAP
3.1.1 Aplikační server - wrapper.conf
3.1.2 Autentizace k webovým službám
3.3 Dodatek - spouštění TestClient s SSL
EGJE poskytuje dva aparáty, které umožňují, aby EGJE vystavilo webové služby.
U jednodušších a novějších služeb REST na webovou službu Elanor připravuje zákazníkovi sestavu optimalizovanou pro tento účel.
Druhý je starší aparát pro vystavující webové služby SOAP.
Zde je možné vystavit jakoukoliv již existující sestavy EGJE. Nicméně je třeba si uvědomit, že standardní sestavy EGJE poskytují velké bloky formátovaných dat směřovaných do souboru určitého typu (např. PDF).
Volající tedy službu zavolá a pak musí v čekací smyčce zjišťovat, jestli už je výsledek hotov a jestli jej lze převzít. Jde o náročnější volání.
EGJE jako server webových služeb typu REST má své jádro vestavěno do EGJEWEB2
Pro službu je třeba vytvořit speciální uživatelskou sestavu, jejíž design je takový, že "stručně odpovídá na stručný" dotaz.
Sestavy se ptají na konkrétní údaje, např. pro konkrétní osobu (ale už ne třeba pro všechny osoby v db).
Pro export takové sestavy byl zřízen v Adm53 Typ AS úlohy:
3 - Webová služba REST (realizovaná uživ. sestavou)
Instalace sestavy poskytující webovou službu je pak standardní, přes Adm51.
Testování běžné webové služby REST je možné i pomocí webového prohlížeče.
Configurator na záložce AS, Web obsahuje hodnotu radio přepínače "Web server", která slouží k označení, že instalace je určena jako Web server poskytující WS.
Umožňuje pomocí checkboxů určit, které komponenty se mají pustit:
Spustit EGJEWEB2 / HR portál – běžné web aplikace
Spustit server Web services
Spustit server Web services zaškrtněte pouze v případě, že je opravdu chcete používat. Jelikož standardní EGJEWEB2 / HR portál jde odškrtnout, je možné udělat i dedikovaný server Web services, který standardní Web aplikace spuštěné nemá.
V případě zájmu o konkrétní Web službu se na nás obraťte prostřednictvím ESP.
EGJE umožňuje nastavit autentizaci na dvou místech:
· V Configuratoru na záložce Ověření WS
· V aplikaci na formuláři Adm57
Kde se nastavuje autentizace?
Autentizace se nastavuje v Configuratoru na záložce Ověření WS:
Při nastavení “Oboje” se nastavení vezme z dané služby a pokud není ve službe vyplněno, vezme se z Configuratoru.
Při nastavení “V aplikaci” jsou k výběru tyto způsoby ověření:
· je možné povolit přístup bez ověření
· automatické (SSO), které je řešeno delegováním na operační system Windows/NTLM
· LDAPOnly
o Ověřování probíhá vůči LDAP serveru. U nás máme testovací LDAP server rtt.local. Pro správnou autentizaci je potřeba vyplnit tyto parametry:
§ LDAP - SSI URL (protokol://server:port): = ldaps://RTTDC1.RTT.local:636/DC=rtt,DC=local
§ LDAP(Web - implicitní doména uživatele: = rtt.local
o V této doméně existuje testovací uživatel:
§ uživ. jméno: egje
§ heslo: Elanor123*
§ logname v EGJE: egje@rtt.local
· LDAPSearch
o Pomocí toho lze nastavit omezení služby specificky pouze pro daného uživatele. Je zapotřebí vyplnit:
§ LDAP - SSI URL (protokol://server:port): = ldaps://RTTDC1.RTT.local:636/DC=rtt,DC=local
§ LDAPSearch - filtr: = (&(objectClass=person)(sAMAccountName=egje))
§ LDAP - speciální uživatel pro práci s LDAP: emans@rtt.local
§ LDAP - speciální uživatel pro práci s LDAP - Heslo:
§ LDAP(Web - implicitní dom=na uživatele: = rtt.local
o A volitelně LDAPSearch - Atribut unikátní identity uživatele.
o Speciální uživatel musí mít práva pro čtení LDAP.
· API Key
o Standartní BASIC autentizace. Jméno a heslo se ověřuje vůči údajům vyplněným na formuláři/v konfigurátoru.
o V této autentizaci se neověřuje, že je přihlašovaný uživatel v EGJE, tudíž nemá smysl vyplňovat Ověřovat profil práv=Ano.
o Při použití tohoto způsobu ověření doporučujeme zabezpečit komunikaci mezi klientem a serverem šifrováním
Na Adm53 zadejte nový záznam s typem úlohy 3 - Webová služba REST. V tabulkovém nebo formulářovém pohledu doplňte dle potřeby tyto parametry:
· Rozšíření url – finální část URL, na které bude služba dostupný
· Vyžadovat ověření – pokud je zaškrtnuto, služba bude požadovat ověření
· Zdroj autentizace – při nastavení autentizace z aplikace zde vyplňte kód z Adm57 pro danou autentizaci, pokud je prázdné, bere se z Configurátoru
· Ověřovat profil práv – pro „Ano“ musí mít „Osoba – autor“ (není-li vyplněno tak „Změnu provedl“) ze záložky Detail přiřazený „Profil práv pro spuštění úlohy“
Profil práv může být omezený tak, aby umožňoval přístup pouze k webovým službám, tzn. nebude nabízen při přihlášení do tlustého nebo web klienta – nastavením typu GUI na 21 - Pouze WS (Adm02/Profil základní údaje).
Vzorové URL pro volání sestavy vypadá následovně: https://host:port/aliaswebapp/ws/endpoint[?položka=hodnota[&položka=hodnota]...]
Popis jednotlivých parametrů URL je následující:
· https://host:port/aliaswebapp = základní URL adresa webového serveru EGJE
· ws = konstanta
· endpoint = kód sestavy (Rstxx)
· ? = konstatní parameter URL, který odděluje základní adresu od jednotlivých parametrů. Po tomto znaku se zadávají parametry, které jsou přenášeny přímo do sestavy. Jednotlivé parametry jsou odděleny znakem “&”.
· položka = název parametru
· hodnota = hodnota parametru
Příklad URL:
https://egje.elanor.cz:8080/egjeweb/ws/rtf21?oscpv=10254&active=1
logování REST WS probíhá takto:
§ defaultní hodnota max_protocols = 10
§ v kódu obecně není kontrola na výši max_protocols
Sestava vrací údaje o osobě ve formátů xml podle zadaného OSCPV
Sestava slouží pro nahrání dokumentů PV.
Příklad volání sestavy
import java.io.File;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
public class TestHttpPost {
public static void main(String[] args) {
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://server:8080/ws/Rst02f");
MultipartEntity reqEntity = new MultipartEntity();
Charset utf8 = StandardCharsets.UTF_8;
reqEntity.addPart("r_oscpv", new StringBody("1_0685.001", utf8));
reqEntity.addPart("r_uchaz_dok_typ", new StringBody("3", utf8));
reqEntity.addPart("r_public_dok", new StringBody("true", utf8));
reqEntity.addPart("r_personal", new StringBody("false", utf8));
String fileName = "C:\\Users\\Michal\\Documents\\download.jpg";
reqEntity.addPart("r_file", new FileBody(new File(fileName)));
httppost.setEntity(reqEntity);
// Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("status_code: " + statusCode);
HttpEntity entity = response.getEntity();
IOUtils.copy(entity.getContent(), System.out);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Sestava pomoci API/RES Webové služby na základě vstupního zadání vytvoří zápis do Dca01.
Vstupem je soubor JSON v požadovaném formátu, který obsahuje jeden nebo více řádků.
Podrobný popis a použití je uvedeno v Doch_uzdoc, kapitola „Rst07f - WEB Služba pro zápis do Dca01“.
Jde o webový server integrovaný do aplikačního serveru EGJE.
Umožňuje spouštění standardních a uživatelských sestav voláním webové služby.
V aplikačním serveru (wrapper.conf) přidejte do classpath za egjelib.jar tyto knihovny
egjelib2.jar
egjews-embed.jar
AS je pak zapotřebí spouště pomocí jiné třídy a to:
wrapper.app.parameter.1=cz.elanor.egjews.server.RunServerWithWS
Dále je zapotřebí přidat parametry:
Varianta bez ssl
egjews.port=8000
Varianta se ssl
egjews.port=8000
egjews.sslkeystore=server.jks
egjews.sslkeystorepassword=xxxxx
Přičemž předpokládáme stejné heslo ke keystore i ke klíči.
Jméno klíče předpokládáme jetty
Toto javakeystore je zapotřebí na serveru vytvořit (JDK utilita keytool).
Parametry mohou být buď v konfiguračním souboru config_egje.jar/config_local.properties
nebo, a to doporučujeme přímo ve wrapper.conf:
wrapper.app.parameter.x=-Cegjews.port=8000
wrapper.app.parameter.x=-C egjews.sslkeystore=server.jks
wrapper.app.parameter.x=-C egjews.sslkeystorepassword=xxxxx
Na OS linux ještě přidejte
wrapper.java.additional.y= -Djava.awt.headless=true
· je stejná jako u aplikačního serveru nebo EgjeWebu, tzn. konfiguruje se stejným způsobem a je sdílena s AS
· je možné použít buď SSO autentizace, ta pak probíhá na úrovni protokolu HTTP, nebo interaktivní autentizace a zde se jméno a heslo zadává pomocí volání metody login webové služby - public void login(String user, String pass);
· interaktivní autentizace je možná pouze při použití SSL
· pokud je nakonfigurována autentizace typu SSO, budou i web služby vyžadovat tuto autentizaci
·
u autentizací, které kombinují SSO s ověřením jménem heslem je
možné vypnout SSO přidáním parametru "i" nebo
"interactive_auth" do adresy služby -
např. http://localhost:8000/egjews?wsdl&i
· uživatel s heslem null resp. prázdný String není povolen
· při zpracování kontrolujeme, zda-li autentizovaný uživatel má přidělen profil, který je uveden u akce evidované v Adm53, kterou se snaží spustit
· pokud je v Adm53 uvedena i organizace, tak je kontrolováno, zda-li volající uživatel má tento profil přiřazen k této organizaci nebo zda-li má přiřazen profil bez omezení organizací.
· pokud v Adm53 není organizace vyplněna, jako parametr do dalšího zpracování je použita organizace přihlášeného uživatele (z přiřazeného profilu)
Jeho ukázku přikládáme v souboru egjews-client.jar
V něm je také definiční soubor služby EgjeWS.wsdl. Ten je postačující pro volání z .NET resp. jiného prostředí než java
Pokud službu voláte z javy můžete využít:
TestClient.java, který obsahuje úplný příklad volání služby.
InstallCert.java, pomocná utility pro zprovoznění SSL autentizace – stáhne certifikát a uloží jej lokálně.
cz\elanor\egjews\* interface webové služby v javě
Soubor egjews-client.jar můžete také použít přímo do classpath vaší aplikace, tam také patří knihovny z lib-client\* - jsou potřeba pro překlad testovací aplikace TestClient.java (patří do classpath)
Z důvodu zabezpečení EGJE a pro získání dalších parametrů, je nutné každou sestavu, která má být volatelná z webové služby EGJE, deklarovat na Adm53 a uvést profil, se kterým se bude volat. Tento profil také musí být jedním z profilů, které má autentizovaný uživatel volající webovou službu přiřazen (viz Autorizace)
K tomuto účelu jsme zřídili Typ AS úlohy 2 – Uživatelská sestava jako WS
Uvedete zde dále:
· Spustit na serveru s IP: IP adresa (pokud možno primární) AS
· Organizace: jen u multiorganizační db
· Profil práv pro spuštění úlohy: - definuje hlavně práva k řádkům
· Jazyk uživatelského rozhraní
· Název - tento název je zpřístupněn v getDescs()
Na záložce Parametry pak :
Nejprve je zapotřebí vytvořit jks keystore na serveru (během instalace)
Následně je zapotřebí získat certifikát na klienta
(jinak volání hlásí chybu javax.xml.ws.WebServiceException: Failed to access the WSDL at: http://prghr3:8098/egjews?wsdl. It failed with:
Unexpected end of file from server. )
– utilita InstallCert.java
parametr příkazové řádky server:port
zeptá se který certifikát a vytvoří lokální soubor jssecacerts obsahující certifikát.
Nyní můžete zavolat TestClient.java (přičemž v static String host je třeba uvádět protokol https).