今回はFilterの優先度についてまとめてみました。実行順序をしているすることができます。優先度を指定するためにはjavax.annotation.Priorityアノテーションを指定します。PriorityアノテーションのvalueにはInteger型を指定します。javax.ws.rs.PrioritiesというEnumクラスがあり、Priority用パラメータ用に用意されています。優先度の高い順にAUTHENTICATION、AUTHORIZATION、HEADER_DECORATOR、ENTITY_CODER、USERとなります。InterceptorのデフォルトはUSERになります。【ソース】それぞれの優先度のFilterを用意します。HEADER_DECORATORについては2つ用意します。リソースクラスを作成し、アクセスすると↓のような結果が出力されます。end.結果を見ると優先度高のRequestFilter⇒優先度低のRequesetFileter⇒優先度低のResponseFilter⇒優先度高のResponseFilterの順序で実行されているのがわかります。今回、優先度がHEADER_DECORATORのFilterを2つ作成しました。先発のRequestFilter⇒後発のRequestFilter⇒先発のResponseFilter⇒後発のReqeustFilterの順序で実行されています。順序は実装依存となります。GlassFishを起動しなおして、実行すると上記の結果の1と2が逆転していたことから、GlassFish4ではインジェクション時に決まるようです。↑で書いたソースではPrioritiesクラスを使用しましたが、PriorityのvalueにはInteger型の値であれなんでも良いので、1とか2とかを指定しても動きます。PriorityについてはPrioritiesクラスの定数の意味と一致する内容であれば、使用したほう良いのかなと思います。一致しないFilterが一つでもある場合は独自にEnumクラスを作成して、使用したほうがよさそうです。同一優先度の定義はせず、異なる優先度で定義したほうが安全な気がします。月別アーカイブはてなブログをはじめよう!gloryofさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。