SOAP Web Služba s Autentifikáciou: Jednoduchá Príručka pre Java Vývojárov
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:
javaimport 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:
javaimport 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:
javaimport 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
:
javaimport 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:
bashcurl --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