2012-07-18 1 views
8

私は2種類のRESTサービスを開発しています。RESTeasyのHTTPヘッダーに基づく代行受信

  • ログイン前にセッショントークンはHTTPヘッダーに渡されません。
  • ログインセッショントークンは、各リクエストで渡されます。

各RESTメソッドに@HeaderParamを含めたくありません。私はそれを最初に傍受したいと思って、私はセッションの正当性をチェックしたいと思っています。私はいくつかのメソッドに

感謝を傍受しないようにする方法RESTEasyの

  • でヘッダーに基づいて、傍受することができますどのように

    1. を教えてください。

  • 答えて

    7

    私はPreProcessInterceptor

    @Retention(RetentionPolicy.RUNTIME) 
    @Target(ElementType.METHOD) 
    public @interface Securable { 
        String header() default "session-token"; 
    } 
    
    @Provider 
    @ServerInterceptor 
    public class ValidationInterceptor implements PreProcessInterceptor, AcceptedByMethod { 
    
        @Context 
        private HttpServletRequest servletRequest; 
    
        @Override 
        public boolean accept(Class clazz, Method method) { 
        return method.isAnnotationPresent(Securable.class); 
        } 
    
        @Override 
        public ServerResponse preProcess(HttpRequest httpRequest, ResourceMethod resourceMethod) throws Failure, 
         WebApplicationException { 
    
        Securable securable = resourceMethod.getMethod().getAnnotation(Securable.class); 
        String headerValue = servletRequest.getHeader(securable.header()); 
    
        if (headerValue == null){ 
         return (ServerResponse)Response.status(Status.BAD_REQUEST).entity("Invalid Session").build(); 
        }else{ 
         // Validatation logic goes here 
        } 
    
        return null; 
        } 
    } 
    

    に@Securableを検証する必要がRESTサービスで使用される注釈を使用してこの問題を解決しました。

    @Securable 
    @PUT 
    public Response updateUser(User user) 
    
    +0

    Jerseyを使用している場合は、注釈「x」を作成し、アノテーションには@NameBindingを記述します。このフィルターにContainerRequestFilterを作成し、注釈 'x'を追加します。今すぐあなたのサービスを 'x'アノテーションで飾りましょう – jaks

    3

    二つのアプローチ

    1. が使用JAX-RS interceptorsがあります - あなたは、ヘッダー

    2. 使用古き良きJavaServletフィルタを読むことができるので、あなたは、インターセプタでリクエストオブジェクトへのアクセス権を持っている - それは問題ではないことJAX-RSを使用している場合は、RESTリクエストもフィルタリングできます。同様インターセプタに、フィルタは、HttpSessionのが存在する(request.getSession()法)、それは属性が必要であったかどうかをチェックすることができ、両方の場合において情報

    ヘッダた要求オブジェクトへのアクセスを有します。

    リクエストパスを見て、Javaコードで設定またはプログラムでフィルタリングされたリクエストを含める/除外することができます。

    関連する問題