28.7. インターセプタの順番と優先度


インターセプタによっては呼び出される順番の考慮が必要なものもあります。 例えば、 セキュリティインターセプタは常に最初に呼び出されなければなりません。 他のインターセプタの動作は、 ヘッダを追加するインターセプタが起因となることがあります。 デフォルトでは、 登録されたインターセプタの呼び出し順序をユーザーが制御することはできませんが、 インターセプタの 優先度 を指定することはできます。
インターセプタの優先度はインターセプタクラスを一覧表示することで指定されません。 @org.jboss.resteasy.annotations.interception.Precedence アノテーションによって特定のインターセプタクラスが 優先度ファミリ に関連付けされます。 ファミリ構造で優先度を指定すると、 順番に影響する内蔵インターセプタを保護できるため、 設定を簡略化することができます。
以下は実行順にリストされたファミリです。
    SECURITY
    HEADER_DECORATOR
    ENCODER
    REDIRECT
    DECODER
Copy to Clipboard Toggle word wrap
優先度ファミリに関連付けされていないインターセプタは最後に呼び出されます。 通常、 SECURITY には PreProcessInterceptor が含まれます。 認証前の発生を最小限にするため、 これらのインターセプタを最初に呼び出す必要があります。 HEADER_DECORATOR は、 応答や発信要求にヘッダを追加するインターセプタです。追加されたヘッダが他のインターセプタの動作に影響することがあるため、 これらのインターセプタの優先度は 2 番目になります。 ENCODER インターセプタは OutputStream を変更します。 例えば、 GZIP インターセプタは GZIPOutputStream を作成し、 圧縮のため実際の OutputStream をラッピングします。 REDIRECT インターセプタは要求を再ルーティングし、 JAX-RS メソッドを迂回するため、 通常 PreProcessInterceptor で使用されます。 DECODER インターセプタは InputStream をラッピングします。 例えば、 GZIP インターセプタデコーダは GzipInputStream インスタンスの InputStream をラッピングします。
特定のファミリへカスタムインターセプタを関連付けるには、 @org.jboss.resteasy.annotations.interception.Precendence annotation アノテーションを付けます。
@Provider
@ServerInterceptor
@ClientInterceptor
@Precedence("ENCODER")
public class MyCompressionInterceptor implements MessageBodyWriterInterceptor {...}
Copy to Clipboard Toggle word wrap
org.jboss.resteasy.annotations.interception パッケージには、 完全にタイプを安全化する便利なアノテーション @DecoredPrecedence@EncoderPrecedence@HeaderDecoratorPrecedence@RedirectPrecedence@SecurityPrecedence があります。 これらのアノテーションは @Precedence の代わりに使用します。

28.7.1. カスタム優先度

独自の優先度ファミリを定義し、 @Precedence アノテーションで適用することができます。
 @Provider
 @ServerInterceptor
 @Precedence("MY_CUSTOM_PRECEDENCE")
 public class MyCustomInterceptor implements MessageBodyWriterInterceptor {...}
Copy to Clipboard Toggle word wrap
独自の便利なアノテーションを作成するには、 メタアノテーションとして @Precedence を使用します。
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Precedence("MY_CUSTOM_PRECEDENCE")
public @interface MyCustomPrecedence {}
Copy to Clipboard Toggle word wrap
デプロイメント時に RESTEasy がエラーを表示するため、 カスタム優先度は登録するようにしてください。 次のように、 コンテキストパラメータを用いてカスタム優先度を登録することができます。
resteasy.append.interceptor.precedence
resteasy.interceptor.before.precedence
resteasy.interceptor.after.precedence
Copy to Clipboard Toggle word wrap
resteasy.append.interceptor.precedence は優先度ファミリをこのリストに追加します。 resteasy.interceptor.before.precedence は優先度の前となるファミリを指定できるようにします。 resteasy.interceptor.after.precedence は優先度の後となるファミリを指定できるようにします。 例は次の通りです。
<web-app>
    <display-name>Archetype RestEasy Web Application</display-name>

    <!-- testing configuration -->
    <context-param>
        <param-name>resteasy.append.interceptor.precedence</param-name>
        <param-value>END</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.interceptor.before.precedence</param-name>
        <param-value>ENCODER : BEFORE_ENCODER</param-value>
    </context-param>

    <context-param>
        <param-name>resteasy.interceptor.after.precedence</param-name>
        <param-value>ENCODER : AFTER_ENCODER</param-value>
    </context-param>

    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/test</param-value>
    </context-param>

    <listener>
        <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
    </listener>

    <servlet>
        <servlet-name>Resteasy</servlet-name>
        <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>Resteasy</servlet-name>
        <url-pattern>/test/*</url-pattern>
    </servlet-mapping>

</web-app>
Copy to Clipboard Toggle word wrap
この web.xml ファイルでは 、ENDBEFORE_ENCODERAFTER_ENCODER の 3 つの新しい優先度ファミリが定義されました。 この設定では、 ファミリの順番は次のようになります。
SECURITY
HEADER_DECORATOR
BEFORE_ENCODER
ENCODER
AFTER_ENCODER
REDIRECT
DECODER
END
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2026 Red Hat