SOAP Web Služba s Autentifikáciou: Jednoduchá Príručka pre Java Vývojárov

Pri programovaní webových služieb sa často stretávame s potrebou autentifikácie užívateľa na základe mena a hesla. Jednou z populárnych metód autentifikácie je tzv. "Basic Authentication", ktorá sa využíva predovšetkým v SOAP (Simple Object Access Protocol) webových službách. Táto metóda je relatívne jednoduchá, avšak vývojári sa musia oboznámiť s niekoľkými kľúčovými konceptmi, aby ju vedeli efektívne implementovať.

SOAP webová služba je protokol, ktorý umožňuje výmenu štruktúrovaných informácií medzi počítačmi v sieti, zvyčajne využívajúc XML (Extensible Markup Language) na definovanie dát. Tento protokol je populárny v korporátnom prostredí, kde je potrebná prísna kontrola prístupu a bezpečnosti, čo vedie k častej integrácii autentifikačných mechanizmov, ako je Basic Authentication.

Pri implementácii Basic Authentication v Jave sa obvykle používa kombinácia JAX-WS (Java API for XML Web Services) a rôznych bezpečnostných knižníc. Poďme si ukázať príklad, ktorý nám ukáže, ako jednoducho môžeme implementovať SOAP web službu s podporou základnej autentifikácie.

Krok 1: Nastavenie projektu

Najprv si vytvoríme nový Maven projekt v prostredí Eclipse alebo IntelliJ IDEA, alebo iným preferovaným IDE. Budeme potrebovať závislosti pre JAX-WS. Do súboru pom.xml pridáme nasledujúce závislosti:

xml
<dependencies> <dependency> <groupId>javax.xml.wsgroupId> <artifactId>jaxws-apiartifactId> <version>2.3.1version> dependency> <dependency> <groupId>com.sun.xml.wsgroupId> <artifactId>rtartifactId> <version>2.3.3version> dependency> dependencies>

Toto zabezpečí, že náš projekt má všetky potrebné knižnice pre vytváranie SOAP služieb.

Krok 2: Vytvorenie jednoduchej SOAP služby

Teraz si definujeme našu službu. Najprv si vytvoríme rozhranie, ktoré bude deklarovať operácie našej služby:

java
import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface MyService { @WebMethod String sayHello(String name); }

V tomto rozhraní sme definovali jednu jednoduchú metódu sayHello, ktorá prijme meno ako parameter a vráti uvítaciu správu. Následne implementujeme toto rozhranie:

java
import javax.jws.WebService; @WebService(endpointInterface = "com.example.MyService") public class MyServiceImpl implements MyService { @Override public String sayHello(String name) { return "Ahoj, " + name + "!"; } }

Táto implementácia služby jednoducho vráti pozdrav. Teraz musíme zabezpečiť, aby táto služba bola publikovaná.

Krok 3: Publikovanie služby

Na publikovanie služby použijeme triedu Endpoint z balíka javax.xml.ws. Vytvoríme hlavnú metódu, ktorá spustí službu na určenej adrese:

java
import javax.xml.ws.Endpoint; public class MyServicePublisher { public static void main(String[] args) { Endpoint.publish("http://localhost:8080/ws/hello", new MyServiceImpl()); } }

Týmto spôsobom je naša služba publikovaná a dostupná na URL adrese http://localhost:8080/ws/hello.

Krok 4: Zabezpečenie služby pomocou Basic Authentication

Teraz prichádza kľúčová časť, kde pridáme autentifikáciu. Basic Authentication pracuje na princípe zasielania užívateľského mena a hesla v HTTP hlavičkách. Na jeho implementáciu môžeme použiť servletový filter, ktorý overí autentifikačné údaje predtým, než povolí prístup k službe.

Vytvoríme triedu AuthFilter, ktorá bude implementovať javax.servlet.Filter:

java
import java.io.IOException; import java.util.Base64; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class AuthFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException {} @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; String authHeader = req.getHeader("Authorization"); if (authHeader != null && authHeader.startsWith("Basic")) { String base64Credentials = authHeader.substring("Basic".length()).trim(); String credentials = new String(Base64.getDecoder().decode(base64Credentials)); String[] values = credentials.split(":", 2); String username = values[0]; String password = values[1]; // Overenie používateľa if ("admin".equals(username) && "admin123".equals(password)) { chain.doFilter(request, response); // povoliť prístup } else { res.setStatus(HttpServletResponse.SC_UNAUTHORIZED); } } else { res.setStatus(HttpServletResponse.SC_UNAUTHORIZED); } } @Override public void destroy() {} }

V tomto filtri kontrolujeme, či je v požiadavke prítomná HTTP hlavička Authorization a či obsahuje základné prihlasovacie údaje zakódované v Base64 formáte. Ak sú údaje správne, filter umožní prístup k službe, inak vráti stav 401 Unauthorized.

Krok 5: Registrácia filtra

Nakoniec zaregistrujeme náš filter v web.xml súbore:

xml
<filter> <filter-name>AuthFilterfilter-name> <filter-class>com.example.AuthFilterfilter-class> filter> <filter-mapping> <filter-name>AuthFilterfilter-name> <url-pattern>/ws/*url-pattern> filter-mapping>

Týmto spôsobom zabezpečíme, že každý prístup k službám, ktoré majú URL cestu začínajúcu /ws/, bude chránený autentifikáciou.

Krok 6: Testovanie

Na testovanie môžeme použiť nástroj ako Postman alebo curl. Napríklad, s použitím curl môžeme otestovať autentifikáciu nasledujúcim príkazom:

bash
curl --user admin:admin123 http://localhost:8080/ws/hello?wsdl

Ak sú údaje správne, dostaneme prístup k službe. V prípade nesprávnych údajov sa vráti chyba 401 Unauthorized.

SOAP webová služba s autentifikáciou je tak pripravená na použitie!

Populárne komentáre
    Zatiaľ žiadne komentáre
Komentáre

0