JAX-RS(Jersey) Filterを使う前に
システムの都合上、認証・認可で標準的手法(Basic, Form, Digest, etc...)が使えない。
そんなわけでフィルタを使ってゴニョゴニョすることになるが、実際に使う前に関連情報を整理。
参考
Chapter 10. Filters and Interceptors
JAX-RS 2.0 ことはじめ - Programming Studio
JAX-RSをやってみる (9) - Container Filters - - kinjouj.github.io
FilterとInterceptor
どちらもリソースの呼び出し前後に処理を注入できる。
サーバー側・クライアント側に分けられるが、とりあえず使うサーバー側のみ整理。
Filter
- Request, ResponseそれぞれのFilterがある
- 主にHTTPヘッダーなどの要求・応答パラメータの操作で使用する
Interceptor
- ReaderInterceptor, WriterInterceptorの2種類
- 主にHTTPボディなどの入出力ストリームの操作で使用する
- 順序としてはFilterの後に呼び出される
@PreMatching
- サーバー側Requestフィルタに使用する
- リソースクラス・メソッドの呼び出しが決定(Match)される前に処理される
- @PreMatchingを付けなければPostMatching(呼び出し決定後のフィルタ処理)
- ヘッダー操作して呼び出しリソースを変更したい、という場合に使う
処理順(サーバー側のみ)
JAX-RS 2.0 ことはじめ - Programming Studio
の図が分かりやすい。厳密には@PreMatchingのサーバーリクエストフィルタが入る。
- ContainerRequestFilter with @PreMatching
- 呼び出しリソースの決定 (Matching)
- ContainerRequestFilter without @PreMatching
- ReaderInterceptor
- リソースメソッド実行
- ContainerResponseFilter
- WriterInterceptor
というわけで、認可処理をゴニョゴニョするのであればContainerRequestFilterを使うことになりそう。