いくつかの JAX-RS 2.0 リソース (サーブレット コンテナーで実行されている Jeresey 2.4 を使用) と、@NameBinding アノテーションを介して選択的に適用できる認証と承認を処理するフィルターを作成しました。これはすべてうまくいきます。
この動作を変更するために、実行時にフィルターで使用できるこの注釈 (具体的には、各メソッド/リソースにアクセスするために必要なセキュリティ アクセス許可) でいくつかのパラメーターを定義できるようにしたいと考えています。
インターセプターは javax.ws.rs.ext.InterceptorContext.getAnnotations() を介してこれを実行できることに気付きましたが、javax.ws.rs.container.ContainerRequestContext にはフィルター用の同等のものはありません。これを達成する方法はありますか?次のようなことができるようになりたいです。
@Target({TYPE, METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@NameBinding
public @interface Secured {
String[] requiredPermissions() default {};
}
@Secured
@Priority(Priorities.AUTHENTICATION)
public class SecurityRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext containerRequestContext) throws IOException {
// extract credentials, verify them and check that the user has required permissions, aborting if not
}
}
@Path("/userConfiguration/")
public class UserConfigurationResource {
@GET
@Produces(MediaType.APPLICATION_XML)
@Secured(requiredPermissions = {"configuration-permission"})
public Response getConfig(@Context HttpServletRequest httpServletRequest) {
// produce a response
}
}