Archiwa kategorii: GWT - Page 2

Szyfrowanie danych w bazie danych za pomocą Jasypt + Hibernate

Jasypt Logo

Bezpieczeństwo danych przechowywanych w naszej aplikacji polega nie tylko na należytym zabezpieczeniu ekranu logowania oraz implementacji dobrego mechanizmu uwierzytelniania i autoryzacji użytkowników. Te dwa ostatnie zagadnienia można zrealizować chociażby przy pomocy certyfikatu SSL i usługi JAAS. Czasami wymaga się jednak, aby same dane były składowane w formie zaszyfrowanej. Najczęściej stosuje się tą metodę, jeśli dostęp do bazy danych może być uzyskany w jakikolwiek inny sposób, niż przez naszą aplikację. Odpowiednio zaimplementowany mechanizm zabezpiecza też dane w bazie przed nieautoryzowanym dostępem za pomocą potencjalnych luk w zaufanej aplikacji.

Szyfrowanie danych w bazie można zrealizować na wiele sposobów. Jednym z nich jest po prostu dopisanie do getterów i setterów naszych klas encji odpowiednich operacji szyfrowania i deszyfracji. Od stopnia zaawansowania poziomu zabezpieczenia zależy, jak duży bałagan w kodzie zrobimy i jak ciężko będzie to utrzymać. Z pomocą przychodzą biblioteki, które pozwalają na przeźroczyste szyfrowanie danych na poziomie np. Hibernate’a. Jedną z takich bibliotek jest Jasypt – narzędzie upraszczające operacje szyfrowania do niezbędnego minimum (przy czym oferujące równie zaawansowane możliwości, co API JCE – Java Cryptography Architecture). Jasypt doskonale sprawdza się w implementacjach własnych mechanizmów szyfrowania oraz integruje się z wieloma popularnymi technologiami jak Hibernate, Spring, Wicket czy JBoss Seam. Sam z siebie nie dostarcza żadnych algorytmów szyfrowania, jednak pozwala na dołączanie dodatkowych dostawców JCE umożliwiających korzystanie z bardziej zaawansowanych algorytmów jak AES czy WHIRLPOOL.

Czytaj więcej »

Co nowego w GWT 2.3?

Logo GWT

Wczoraj ukazała się finalna wersja GWT 2.3, która pojawiła się stosunkowo szybko po poprzednim wydaniu (2.2). Co nowego przyjdzie nam zobaczyć w nowej wersji? Przede wszystkim wprowadzono kilka udogodnień do GPE (Google Plugin for Eclipse):

  • Google API Discovery and Access

    GPE oferuje teraz pomoc przy znajdywaniu bibliotek dostępnych w ramach Google Code oraz importowaniu ich zależności do projektu. W kilku prostych krokach można znaleźć potrzebną nam bibliotekę i od razu zacząć jej używać, bez tracenia czasu na pobieranie wszystkich wymaganych zależności i ręczne dodawanie plików jar do ścieżki klas. Wśród dostępnych bibliotek znajdziemy między innymi API Google Maps, Google Calendar, Google Docs czy Buzz’a.

  • Google Project Hosting Integration

    Jeśli hostujemy swój projekt na Google Code, możemy teraz w łatwy sposób zaimportować go do Eclipse’a bez ręcznego pobierania źródeł. Dzięki integracji GPE z kontami Google’a plugin potrafi automatycznie pobrać źródła z repozytorium i otworzyć projekt w naszym IDE.

  • Single Sign-on Support

    Kolejna korzyść z integracji GPE z kontami Google’a to możliwość jednorazowego logowania do dowolnej z naszych aplikacji, które korzystają z App Engine. Wystarczy, że zalogujemy się na jedną z nich, a w trybie deweloperskim uzyskamy również dane o zalogowanym użytkowniku we wszystkich innych naszych aplikacjach. W tym przypadku SSO wymaga niestety włączenia w aplikacji uwierzytelniania za pomocą kont googlowych. Jeśli chcesz dowiedzieć się więcej na temat możliwości uaktywnienia SSO z własnym uwierzytelnianiem, przeczytaj ten wpis.

W samym GWT zaszły mniejsze zmiany – oprócz poprawek błędów i dodania obsługi Internet Explorer’a 9, najważniejszą z nich jest nowe API dla lokalnego składu danych wprowadzonego wraz ze standardem HTML5. Dzięki temu w prosty sposób będzie można zapamiętywać pewne dane lokalnie i udostępniać aplikację w trybie offline.

Jak widać, lista zmian nie jest duża, nie mniej jeśli używasz GPE w rozwijaniu swojego projektu GWT, przejście na nową wersję może być zachęcające. Obiecująco przedstawia się też API do lokalnego składowania danych, które obsługiwane jest już przez nowsze wersje popularnych przeglądarek.

Informacje na stronie Google’a o wersji 2.3 można znaleźć tutaj.

Zaawansowane formularze XForms w projekcie GWT

Nieodłączną częścią każdej aplikacji czy to strony internetowej są formularze. Często w ich skład wchodzi kilka zwykłych pól tekstowych wraz z przyciskiem wysyłającym formularz, ale zdarzają się też bardziej rozbudowane twory. Sam HTML udostępnia większość popularnych typów pól formularzy, jednak obsługę zdarzeń i akcji musimy pisać sami. Ogromnym ułatwieniem są tu możliwości GWT, dostarczające nam takie same kontrolki jak w HTML’u, do których w łatwy sposób można podpinać handlery i obsługiwać wszelkie zdarzenia. Jeśli to za mało, z pomocą przychodzą biblioteki typu GXT czy SmartGWT dokładające olbrzymie ilości własnych elementów formularzy. Niewątpliwą zaletą GWT i bibliotek pomocniczych są szerokie możliwości wczytywania danych do formularzy oraz poszczególnych ich pól (np. listy rozwijanej): dane możemy pobierać poprzez RPC, ładować z wystawionego przez serwlet XML’a lub JSON’a, bądź w jakikolwiek inny sposób możliwy do oprogramowania w GWT. Wydawałoby się, że więcej już nie trzeba!

W praktyce okazuje się, że formularze pisane w GWT mają jedną zasadniczą wadę – nie są tworzone dynamicznie. Z góry określamy, jakie pola znajdą się na stronie i jakie dane zostaną do nich załadowane. Możemy generować dynamicznie kod czystego HTML’a, tracimy tu jednak zalety łatwej w oprogramowaniu obsługi zdarzeń. Możemy też napisać kod, który będzie tworzył dynamicznie formularz w GWT, jednak sami musimy stworzyć potrzebne struktury danych oraz niezbędne parsery i generatory. Jeśli skończy się na formularzach złożonych z pól tekstowych, prostych list wyboru, checkbox’ów, przycisków radio, czy innych podstawowych elementów, to jesteśmy w domu. Gorzej, jeśli dynamicznie chcemy też generować układy elementów formularza (elementy w poziomie lub w pionie, zakładki, kolejne strony formularza). Dokładamy jeszcze do tego obsługę zdarzeń na wszystkich elementach i tworzenie własnych akcji i już mamy robotę na kilka długich tygodni :)

Czytaj więcej »

Tworzenie stron mobilnych w JQuery Mobile i GWT

Aplikacje oraz strony internetowe tworzone pod urządzenia mobilne zdobywają coraz większą popularność. Wzrastająca liczba urządzeń wraz z zwiększającymi się stale możliwościami umożliwiają projektowanie ładnych, dynamicznych interfejsów użytkownika. Na rosnące zapotrzebowanie odpowiedzią są liczne frameworki ułatwiające tworzenie mobilnych stron i aplikacji. Część z nich przeznaczona jest na pojedyncze platformy (jak iOS), niektóre pozwalają budować aplikacje wieloplatformowe. Sencha Touch, PhoneGap, Rhodes, JQuery Mobile, to tylko niektóre z nich. Niestety zdecydowana większość to biblioteki JavaScript’owe i tylko niewiele z nich się pod tym względem wyróżnia.

Jako że tematyką blogu jest głównie GWT, postanowiłem sprawdzić, czy istnieją już gotowe rozwiązania umożliwiające na pisanie stron mobilnych w Javie. Na pierwszy ogień poszła Sencha Touch, z tego względu iż na co dzień wykorzystuję bibliotekę Ext GWT tej samej firmy, która to wywodzi się z biblioteki Ext JS napisanej w JavaScripcie. Pomyślałem, że może firma zrobi ten sam manewr z Sencha Touch i przepisze swoją JavaScriptową bibliotekę na Javę. Niestety takiej implementacji nie znalazłem, jednak na forum Senchy można zaobserwować rosnący ruch zwolenników GWT czekających na taką wersję. Rokowania na przyszłość są, bieżących rozwiązań nie ma.

Czytaj więcej »

Implementacja Comet’a w GWT, czyli jak poradzić sobie z Atmosphere’m

W dobie dzisiejszych aplikacji webowych często wykorzystywanym rozwiązaniem jest technika „Server Push„, występująca również pod nazwą „Comet„. Jest to technika pozwalająca na sprawne przesyłanie komunikatów w kierunku serwer -> klient (przeglądarka). Jak zapewne wiesz, protokół HTTP nie umożliwia przesyłania danych w tą stronę bez zainicjowania połączenia ze strony klienta. Na jakiej zasadzie działa więc Comet? Istnieje kilka popularnych rozwiązań tego problemu.

Najprostszą i najmniej wydajną implementacją jest po prostu cykliczne odpytywanie serwera w celu sprawdzenia, czy istnieją na serwerze nowe komunikaty, jeśli tak to są one zwracane wraz z odpowiedzią zapytania. Jak można się domyślić, odpytań będzie dużo, tym więcej im więcej użytkowników połączy się z aplikacją. Można nieco usprawnić ten mechanizm wprowadzając po stronie serwera pewien czas oczekiwania na nowe komunikaty, jednak nadal dużym narzutem będą same nagłówki HTTP odpytań serwera.

Można też skorzystać z technologii typu Adobe Flash, czy Aplety Java. Za ich pomocą można w łatwy sposób zbudować komunikację serwer -> klient, jednak trzeba się liczyć z tym, że przeglądarka użytkownika nie będzie ich obsługiwała. O ile Flash’a jeszcze da się przeżyć, to aplet Javy może skutecznie zniechęcić użytkownika do dalszego oglądania naszej strony. Często jednak wymagania projektu wykluczają też użycie Flasha, czy innych technologii nie obsługiwanych natywnie przez przeglądarkę, musimy skorzystać więc z innego rozwiązania.

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 »