10

Tomcat7の使用---Primefaces3.4.1 --- javax faces 2.1.17 ---prettyfaces-jsf2 3.3.3

プロジェクトにきれいな顔を正しく設定しましたが、きれいな顔で書かれた新しいURLでWebフィルターが機能しません。

これがpretty-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(welcome)ページとregisterページは "public"フォルダーにあり、それらのWebフィルターはアノテーションで定義されています:@WebFilter( "/ public / *")

「安全な」フォルダにある私のホームページ(正確にはフォルダ内にさらに多くのページがあります)については、Webフィルタとその注釈も定義しました:@WebFilter( "/ secure / *)

かなりのURLは正常に機能していますが、これらのフィルターは、元のURLを書き込んだ場合にのみ機能します。

1)Webフィルターを修復するにはどうすればよいですか?

2)元のURLを入力するためにユーザーをブロックしたい。きれいな顔が元のURLを完全に隠していることは知っていますが、それを行う方法はありますか?

--解決済み--BalusCに感謝します

アノテーションを使用してフィルターを定義した場合は、次のようなディスパッチャー設定を構成できます。

@WebFilter(urlPatterns = "/ public / *"、 dispatcherTypes = {DispatcherType.REQUEST、DispatcherType.FORWARD}

4

1 に答える 1

13

PrettyFacesは、多くのURL書き換えソリューションと同様RequestDispatcher#forward()に、要求を目的のターゲットリソースに転送するために使用します。

サーブレットフィルタは、何もなしでマップさ<dispatcher>れると、デフォルトでは「初期」リクエストのみをリッスンし、転送、インクルード、またはエラーのあるリクエストはリッスンしません。

したがって、 PrettyFacesフィルターのweb.xml に別のサーブレットフィルターをマップすると、デフォルトのの横に明示的に<dispatcher>onを設定しない限り、デフォルトではトリガーされません(PrettyFacesが実際に必要としない場合に備えて、これを保持する必要があります)。転送を実行します)。FORWARDREQUEST

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

または、@WebFilterフィルターで使用している場合は、次のdispatcherTypes属性を使用します。

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

または、問題のフィルターが要求/応答ターゲットを変更しない場合(たとえば、文字セットの設定、Gzipを使用した圧縮、例外のリッスンなど)、PrettyFacesの前に配置することもできます。

于 2013-03-25T01:21:18.633 に答える