2013-03-25 15 views
8

Korzystanie Tomcat 7 --- Primefaces 3.4.1 --- javax twarze 2.1.17 --- prettyfaces-jsf2 3.3.3używając dość twarze z filtrów internetowych

skonfigurowałem ładne twarze na moim projekcie poprawnie, ale mój filtry internetowe nie działają z nowymi adresami URL pisanymi ładnymi twarzami.

Oto przykład całkiem-config.xml

<url-mapping id="home"> 
    <pattern value="/home"/> 
    <view-id value="/secure/homepage.xhtml"/> 
</url-mapping> 

<url-mapping id="register"> 
    <pattern value="/register"/> 
    <view-id value="/public/register.xhtml"/> 
</url-mapping> 

<url-mapping id="welcome"> 
    <pattern value="/"/> 
    <view-id value="/public/welcome.xhtml"/> 
</url-mapping> 

<url-mapping id="profile"> 
    <pattern value="/profile/#{userId}"/> 
    <view-id value="/profile.xhtml"/> 
</url-mapping> 

login (mile widziane) i zarejestrować stron folderu „publiczne”, a ich filtr WWW jest zdefiniowany z dopiskiem: @WebFilter ("/ publicznego/* „)

na stronie głównej w«bezpieczne»folderu (dokładnie nie będzie więcej stron w folderze), i zdefiniowany filtr internetowej również i jego adnotacja: @WebFilter (”/bezpieczne/*)

ładne adresy URL działają poprawnie, , ale te filtry działają tylko wtedy, gdy piszę oryginalne adresy URL.

1) Jak mogę naprawić moje filtry internetowe?

2) Chcę również zablokować użytkownika do wprowadzania oryginalnego adresu URL. Wiem, że ładne twarze całkowicie ukrywają oryginalne adresy URL, ale czy istnieje sposób, aby to zrobić?

- ROZWIĄZANE - dzięki za BalusC

jeśli zdefiniowane filtry z adnotacjami, można skonfigurować ustawienia dyspozytora jak

@WebFilter (urlpatterns = "/ public/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})

Odpowiedz

11

PrettyFaces wielu zastosowań, takich jak adresy URL przepisywanie rozwiązań RequestDispatcher#forward() do przekazywania żądania do odpowiedniego zasobu docelowego.

Filtry serwletów, gdy są mapowane bez żadnego <dispatcher>, domyślnie nasłuchują tylko na "początkowych" żądaniach, a nie na żądaniach przesłanych dalej, uwzględnionych lub błędach.

Więc nie kiedy map inny filtr serwletu w web.xmlpo z PrettyFaces jednego, wtedy to domyślnie być wyzwalane, chyba że jawnie ustawić <dispatcher> na FORWARD obok niewypłacalności REQUEST (należy zachować ten jeden w przypadku PrettyFaces w rzeczywistości nie musi wykonywać przekazania dalej).

<filter-mapping> 
    ... 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

Albo, dla przypadku używasz @WebFilter na swoich filtrach użyć atrybutu dispatcherTypes:

@WebFilter(..., dispatcherTypes = { REQUEST, FORWARD }) 

Alternatywnie, jeśli filtr w pytaniu nie zmienia cel żądania/odpowiedzi w w dowolny sposób, np ustawiając zestaw znaków, kompresując przy użyciu Gzip, nasłuchując wyjątków, itp., można też po prostu wstawić przed w stylu PrettyFaces.

+0

Nie określiłem żadnego filtra w moim web.xml, BalusC. Ponieważ używam wersji = "3.0", a pretty konfiguruje się automatycznie, tak jak zapisano w dokumentach.Również moje filtry internetowe są wyraźnie zdefiniowane za pomocą adnotacji. Czy muszę go zdefiniować bezpośrednio w web.xml dla ustawień modułu rozsyłającego? – oko

+0

Wystarczy użyć '@WebFilter (dispatcherTypes)'. Zobacz zaktualizowaną odpowiedź. – BalusC

+0

dziękuję @BalusC, działa bardzo dobrze. @WebFilter (urlPatterns = "/ public/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}) rozwiązał mój problem. Ale chcę zadać drobne pytanie, aktualizując lub odświeżając tę ​​samą stronę (na przykład używając ankiety primefaces) zawsze przechwytywane przez filtry i całkowicie normalne. Ale czy istnieje sposób na ucieczkę? – oko