1

セッションのタイムアウトと認証を処理するサーブレット フィルターを作成しました。

@WebFilter(urlPatterns={"/acc/*"})
public class ResourceAuthorizationFilter implements Filter { ... }

フィルタリングしたいページには、次のようなパターンがあります: /acc/login-flow, /acc/profiles-flow. フィルターは、リソース (css、js、画像) に対しても呼び出されます。これらのリソースのフィルタリングから除外するようにurlPatternsを構成するにはどうすればよいですか?

EDIT1
フィルタリングされたいくつかの URL は次のとおりです。

http://localhost:8081/acme-0.0.1/acc/login-flow
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/theme.css
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/jquery/jquery.js
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/primefaces.js
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/ajax.gif
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/login.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/header.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/ui-bg_flat_75_ffffff_40x100.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/default.png
http://localhost:8081/acme-0.0.1/acc/javax.faces.resource/images/ui-icons_888888_256x240.png

フォルダーの下にいくつかのカスタム css/js ファイルがwebapp/resourcesありますが、これらはそこからのものではありません。

そのacc部分は次のとおりです。

<servlet-mapping>
    <servlet-name>Spring MVC Servlet</servlet-name>
    <url-pattern>/acc/*</url-pattern>
</servlet-mapping>

EDIT2
これらのコード サンプルは、JSF 2.0、PrimeFaces 3.4.1、Spring 3.0.5.RELEASE、Spring Security 3.0.3.RELEASE、および Spring Web Flow 2.3.0.RELEASE で実装されたプロジェクトからのものです。

4

2 に答える 2

2

リソースを外部の別のフォルダに移動するだけ/accです。いずれにせよ、それらはデフォルトでフォルダにあるはずなので、正しい方法で/resources使用できます。<h:outputScript><h:outputStylesheet><h:graphicImage>

何らかの理由でそれを修正できない場合は、doFilter()実装でリクエスト URI を確認する必要があります。つまり、URL パターンでサブパターンを除外する方法はありません。

String path = request.getRequestURI().substring(request.getContextPath().length());

if (path.startsWith("/acc" + ResourceHandler.RESOURCE_IDENTIFIER)) {
    chain.doFilter(request, response);
} else {
    // ...
}

更新:質問の更新によると、不明な理由でSpring MVCを使用しています。また、すべての JSF リソース要求を処理しています。そうしないように伝えるべきです。それを行う方法を頭の上から伝えることはできませんが、少なくとも<mvc:resources>.

于 2012-10-18T13:57:16.710 に答える
1

プロジェクトですでに Spring Security を使用している場合。カスタム セッション管理フィルターをセキュリティ コンテキストに登録するのは簡単です。次のように、新しいintercept-url 要素を追加してパターンを簡単に除外できます。

<intercept-url pattern="/javax.faces.resource/**" filters="none"/>

名前空間構成のドキュメントを参照してください。

「none」に設定すると、パスはフィルタが適用されなくなります。

以下も参照してください。

于 2012-10-18T16:12:13.017 に答える