Vaadin jest to generalnie narzędzie, które służy do pisania aplikacji, a nie aplikacji webowych. Na czym polega różnica? Powiem w Szczecinie już w sobotę na konferencji java4people. Jedną z cech jest brak czegoś takiego jak ciasteczkaW w aplikacji okienkowej. Po prostu nie ma. Oczywiście w zamian dostajemy dostęp do plików i możliwość składowania informacji w katalogu domowym użyszkodnika względnie można sobie zrobić kuku grzebiąc w rejestrze, ale to już nie to samo.
Niestety Vaadin choć zbliża się do aplikacji okienkowej od strony kodu to nadal jest uwiązane do pewnych webowych rozwiązań jak np. wspomniane ciasteczka. Szerzej formując problem chcemy dostać się z poziomu aplikacji do obiektów HttpRequest i HttpResponse.
Po pobieżnym przejrzeniu API znajdziemy interfejs HttpServletRequestListener, który zapewnia odpowiednią funkcjonalność. Dalsza implementacja jest już prosta:
Listing 1. przykładowa implementacja HttpServletRequestListener
public class MyVaadinApplication extends Application implements HttpServletRequestListener { // ... public void onRequestStart(HttpServletRequest request, HttpServletResponse response) { if (!isRunning()) { Cookie[] cookies = request.getCookies(); for (int i = 0; i < cookies.length; i++) { if ("username".equals(cookies[i].getName())) setUser(new User(cookies[i].getValue())); } } else { if (getUser() != null) { Cookie cookie = new Cookie("username", ((User) getUser()).getLogin()); cookie.setPath(getURL().getPath()); cookie.setMaxAge(365 * 24 * 3600); response.addCookie(cookie); } } } public void onRequestEnd(HttpServletRequest request, HttpServletResponse response) { if (getUser() == null) { Cookie cookie = new Cookie("username", ""); cookie.setPath(getURL().getPath()); cookie.setMaxAge(0); // Delete response.addCookie(cookie); } } }
I to tyle.
ps. do Szczecina szykuję małą niespodziankę...