Archiwa tagów: Jetty

Implementacja weryfikacji obrazkowej CAPTCHA w GWT i JAAS

Istotnym problemem stron internetowych są nieproszone boty, które często uprzykrzają życie nie tylko administratorom serwisu, ale też użytkownikom, którzy chcieliby mieć dostęp do treści jak najwyższej jakości. Nic przecież tak nie drażni jak mnogość bezsensowych komentarzy z reklamami przy wpisie, dla którego np. toczyła się ciekawa dyskusja. Od lat podejmuje się próby rozróżnienia użytkownika będącego po drugiej stronie i stwierdzenia, czy mamy do czynienia z człowiekiem czy komputerem. Jednym ze sposobów jest zastosowanie CAPTCHA. Czy jest to sposób w pełni skuteczny? Jak się domyślasz, bądź wiesz – nie, jednak z pewnością eliminuje zdecydowaną większość mało zaawansowanych botów. Ważne jest też, aby CAPTCHA nie była zbytnim utrudnieniem dla właściwego użytkownika, bo nic tak nie irytuje, jak kilkukrotne odświeżanie obrazka, aby w końcu trafić na ten w miarę czytelny.

W niniejszym wpisie nie będę rozwodził się na temat skuteczności CAPTCHA, jak i przekonywał do używania tego typu zabezpieczenia lub nie. Nie chcę też sugerować konkretnego rodzaju zabezpieczenia, bo przecież oprócz najpopularniejszych  obrazków z mało czytelnymi literami i cyframi, istnieją jeszcze zabezpieczenia głosowe, czy takie polegające na wykonaniu jakiegoś zadania matematycznego, bądź inne bardziej wyrafinowane. Po prostu dostałem zadanie w firmowym projekcie polegające na implementacji weryfikacji obrazkowej i zanim się do tego zabiorę, postanowiłem nieco wcześniej rozeznać się w temacie.

Czytaj więcej »

Zapamiętywanie i walidacja danych w formularzu logowania GWT + JAAS

Widząc rosnące zainteresowanie tematyką bezpieczeństwa w GWT, postanowiłem jak najszybciej dostarczyć Ci kolejną przydatną dawkę informacji. Pamiętasz pewnie wpis o uwierzytelnianiu i autoryzacji w GWT – powstał wtedy mały projekt pokazujący, w jaki sposób połączyć aplikację napisaną w GWT z autoryzacją poprzez mechanizm Javy, a dokładniej użyliśmy JAAS (Java Authentication and Authorization Service). Tamten projekt miał jednak pewne wady, m. in. brak walidacji danych na formularzu logowania oraz nie obsługiwał zapamiętywania tych danych przez przeglądarkę. Pierwszy problem wynikał z użycia przycisku „submit”, który automatycznie wysyłał formularz, nie było więc momentu na sprawdzenie poprawności wysyłanych danych. Natomiast drugi problem jest bardziej złożony i związany z naturą samego GWT. W poszukiwaniu rozwiązania będziemy więc kontynuowali rozpoczęty wcześniej projekt.

Przeszukałem najpierw zasoby internetu, aby sprawdzić, czy występują już jakieś znane rozwiązania wyżej wymienionych problemów. Praktycznie wszystkie przykłady implementacji formularza logowania używają GWT RPC do przesyłania danych, więc nie było w czym przebierać. Jeśli zaś chodzi o zapamiętywanie danych logowania, problemem jest brak bezpośredniej możliwości skorzystania z mechanizmów przeglądarki, bo do tego potrzebny jest formularz wraz z polami loginu i hasła oraz przyciskiem „submit”, który musi znajdować się bezpośrednio w pliku html, a żaden z jego elementów nie może być wstrzykiwany javascript’em. Wszystkie moduły GWT są wstrzykiwane javascript’em w treść strony, dlatego przeglądarka nawet nie proponuje możliwości zapamiętania danych. Czytaj więcej »

Obsługa transakcji JTA w projekcie GWT + Hibernate

Czasami bywa tak, że mamy gotowy już produkt, bądź większą jego część, ale w pewnym momencie musimy do niego dorobić coś, do czego nasz projekt od początku nie był przystosowany. Zazwyczaj pojawiają się wtedy dwa wyjścia. Pierwsze z nich zakłada głębsze zmiany w kodzie i architekturze aplikacji, aby dostosować ją do nowych potrzeb. Niestety jest to proces pracochłonny, czasochłonny, a ponadto będzie wymagał dogłębnego przetestowania aplikacji w zakresie praktycznie całej jej funkcjonalności. Jeśli nie możesz sobie na to pozwolić, zostaje jak zwykle drugie wyjście, czyli dorobienie czegoś „na szybko”, „na sztywno”, itp. Nie jest to ładne, ale jeśli klient czeka na gotowy produkt, czasem trzeba tak zrobić.

Dzisiejszy artykuł po części dotyka tematu wspomnianego „drugiego wyjścia”, gdyż to, co chcę Tobie zaprezentować, nie często występuje w przyrodzie w takiej właśnie postaci. Świadczy o tym chociażby ilość trafnych odpowiedzi w wyszukiwarce Google’a na zapytanie „GWT + JTA”. Oczywiście jeśli znasz temat, zaproponujesz Spring’a, bądź EJB. I słusznie! O wiele łatwiej jest skorzystać z mechanizmu transakcji JTA, gdy posiadamy wspomniane frameworki. Jeśli jednak masz już gotową, monolityczną aplikację napisaną w samym GWT, a musisz obsługiwać w niej transakcje poprzez JTA, być może zaoszczędzę Ci trochę czasu na rozpoznawanie tematu :) Oczywiście nic nie stoi na przeszkodzie, aby używać JTA w projekcie GWT już od samego początku, dzięki czemu uzyskamy kilka zalet płynących właśnie z wykorzystania tego mechanizmu transakcji.

Czytaj więcej »

Uwierzytelnianie i autoryzacja w GWT za pomocą JAAS

Czas na pierwszy artykuł związany z tym, czym zajmuje się na co dzień. Tym wpisem chcę również zapoczątkować ciąg artykułów na temat GWT, w których będę starał się pokazać co ciekawsze sposoby wykorzystania tej biblioteki. Na dzień dzisiejszy przygotowałem dość ważny temat z punktu widzenia aplikacji webowych, którym jest implementacja mechanizmu bezpieczeństwa za pomocą JAAS (Java Authentication and Authorization Service).

Zaczynając pisać jakąkolwiek aplikację w pewnym momencie zaczynasz myśleć o jej zabezpieczeniu. Piszesz własny formularz logowania, implementujesz obsługę żądania logowania i wylogowywania użytkownika, tworzysz własną obsługę sesji. Jak zapewne wiesz, ten element kodu jest często powtarzalny w każdej nowej aplikacji. Czemu więc nie wyciągnąć go na zewnątrz i nie wykorzystywać jednego fragmentu kodu wszędzie? Z pomocą przychodzi JAAS, framework pozwalający na zapewnienie bezpieczeństwa w każdej aplikacji pisanej w Java. Co daje nam JAAS? Ano to, że nie musimy za każdym razem pisać wielu zbliżonych do siebie linijek kodu, że nie musimy martwić się o błędne zaimplementowanie całego mechanizmu. JAAS pozwala również na wydelegowanie zarządzania użytkownikami i rolami do serwera aplikacji lub innego systemu. Ważnym elementem jest również tak zwane SSO (Single Sing-On), czyli mechanizm jednokrotnego uwierzytelniania do wielu aplikacji korzystających z tych samych dostawców bezpieczeństwa. W tym artykule chcę Ci zaprezentować, jak wdrożyć JAAS w aplikacji opartej na GWT.

Czytaj więcej »