Guice, Vaadin 7 i Shiro – ale to już było
Trochę retrospektywny wpis, bo o podobnym miksie wspominałem już kiedyś. Wtedy chodziło jednak o Vaadin 6. Późnej popełniłem wpis o integracji Vaadin 7 i Guice.
Dziś uzupełnię go o krótkie know-how w temacie integracji z Shiro. Naprawdę krótkie, bo bazując na poprzednich wpisach na pewno dasz sobie radę z takimi banałami tworzenie konfiguracji mavena czy dodanie Guice do aplikacji Vaadin 7.
Najważniejszym elementem całej zabawy jest w naszym przypadku odpowiednie napisanie web.xml. Taki integracyjny plik będzie wyglądał tak:
Listing 1. web.xml z filtrami Guice i Shiro
<?xml version="1.0" encoding="UTF-8"??><web-app id="komsell" version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"><display-name>komsell</display-name><context-param><description>
Vaadin production mode</description><param-name>productionMode</param-name><param-value>false</param-value></context-param><listener><listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class></listener><filter><filter-name>ShiroFilter</filter-name><filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class></filter><filter><filter-name>GuiceFilter</filter-name><filter-class>com.tyrsoft.komsell.guice.MyGuiceFilter</filter-class></filter><filter-mapping><filter-name>ShiroFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>ERROR</dispatcher></filter-mapping><filter-mapping><filter-name>GuiceFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
Najważniejszym elementem jest tu odpowiednie skonfigurowanie Shiro. Będzie ono pracowało poza trybem ASYNC co oznacza, że w aplikacji nie udostępniamy mechanizmu wywołań asynchronicznych. Wynika to z faktu, że Guice nie potrafi ich prawidłowo obsłużyć (chyba, że znacie jakiś przykład działającej konfiguracji).