2012-01-07 6 views
2

私は多くのWebアプリケーションで一般的に有用と思われるフィルターを作成しました。私はそれを配布して使用できるようにライブラリ(jarファイルとしてパッケージ化)に入れたいと思います。しかし、私はライブラリのユーザーにそれを使うよう強制したくありません(それはその中のすばらしいものの一つです)。現時点でJava EE6フィルタを注釈とともに定義できますが、web.xmlに適用できますか?

、フィルタは次のようになります。

public class WonderfulFilter implements Filter { 

それを適用することを意味し、ユーザーが自分のweb.xmlに以下を追加する必要があります。勇敢で

<filter> 
    <filter-name>WonderfulFilter</filter-name> 
    <filter-class>org.example.WonderfulFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>WonderfulFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

を新しいEE6の世界では、これは不合理なようです。

私はこのようなフィルタを定義する場合:

@WebFilter("/*") 
public class WonderfulFilter implements Filter { 

その後何の設定がフィルタを適用する必要はありません。しかし、また、へのオプションはありませんフィルタを適用します。

私は何ができますか?暗黙的にURLパターン(および他のプロパティ)を定義するためにフィルタに注釈を付ける方法はありますか? web.xmlで簡単にフィルタを無効にする方法はありますか?

は(ソートのウェブ-fragment.xmlを含むソリューションがあるかもしれません。それになります...)

+0

これを特定のサーバーで実行されているすべてのアプリに適用しますか?またはあなたのフィルタを含むjarファイルを使用しているものだけに? – havexz

+1

個人的に私はここで注釈を使用しません。ユーザが設定することはできません(特定のパターンにフィルタを適用したい場合はどうすればよいでしょうか?)。そして、ライブラリを含めば、暗黙のうちにすべてのリクエストを突然フィルタリングするだけです。これで、アノテーションの動作をいくつかのプロパティファイルに基づいて変更して、必要な動作を得ることができましたが、最初に 'web.xml'を使用する違いは何ですか? – Voo

+0

@havexz:明示的に有効にしたjar *と*を使ってすべてのアプリケーションに適用したいと思います。 –

答えて

1

あなたは、アノテーションを使用してWebフィルタを出荷することができますが、その振る舞いは経由して活性化/非アクティブ化しました外部化可能なプロパティあなたの説明から、ウェブフィルタがの非アクティブであることが理にかなっているように思えます。フィルタを有効にするために必要なプロパティをサードパーティに知らせるためのドキュメントを追加するだけです。

1

フィルタを適用する@WebFilter注釈の部分は、urlPatterns属性です。これを省略すると、フィルタはどのリクエストにも適用されません。

したがって、クラスが宣言することができます。

@WebFilter(filterName = "WonderfulFilter") 
public class WonderfulFilter implements Filter { 

し、アプリケーションのweb.xmlで、利用者は、書くことができます:

<filter-mapping> 
    <filter-name>WonderfulFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

はい、彼らはまだマッピングを供給する必要があり、 URLパターンを含めて、それら自身。しかし、少なくとも彼らはフィルタ定義を書く必要はありません。したがって、これらはフィルタクラスの特定の名前から隔離されており、必須のinit-paramsを提供する責任から解放されます。

これはあまり改善されていません。

+0

これをライブラリとして渡すと、2つのフィルタに同じ名前の 'WonderfulFilter'が付いていると思っていますか? – havexz

+0

@havexz:実際には、名前としてorg.example.WonderfulFilterのような形式、つまり衝突を避けるべき逆ドメイン名形式を使用しています。 –

+0

これは意味をなさない... :) – havexz

関連する問題