2017-01-17 5 views
1

私のTomEE Plume 7.0.2に問題があります。JAX-RS - ContainerRequestFilterを拡張するフィルターを作成する

私は、フィルタをそのように作成しました:ここ

package com.gfp.rest.providers; 

import java.io.IOException; 

import javax.annotation.Priority; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerRequestFilter; 
import javax.ws.rs.container.PreMatching; 
import javax.ws.rs.core.Response; 
import javax.ws.rs.core.Response.ResponseBuilder; 
import javax.ws.rs.core.Response.Status; 
import javax.ws.rs.ext.Provider; 

@PreMatching 
@Provider 
@Priority(value = 1) 
public class AuthenticationFilter implements ContainerRequestFilter 
{ 
    public AuthenticationFilter() 
    { 
     System.out.println("AuthenticationFilter.AuthenticationFilter()"); 
    } 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException 
    { 
     System.out.println("AuthenticationFilter.filter()"); 
     String token = requestContext.getHeaderString("token"); 

     ResponseBuilder responseBuilder = null; 
     Response response = null; 

     // check if token is empty 
     if (token.isEmpty()) { 
      responseBuilder = Response.serverError(); 
      response = responseBuilder.status(Status.UNAUTHORIZED).build(); 
      requestContext.abortWith(response); 
     } 
    } 
} 

は私のRESTアプリケーションです:

package com.gfp.rest; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("api/v1") 
public class RestApplication extends Application 
{ 
} 

問題がある:フィルタと呼ばれ得るように見えることはありません。私は多くのドキュメントや他の多くの記事を読んでいますが、私は解決策を見つけることができません。私が逃した特別なものがありますか?

ありがとうございます!

答えて

0

また、あなたはジャージー2.x用、web.xmlのサーブレットコンテナとしてorg.glassfish.jersey.servlet.ServletContainer使用する必要があります。この

package com.gfp.rest; 

import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

@ApplicationPath("api/v1") 
public class RestApplication extends Application 
{ 
public Set<Class<?>> getClasses() { 
     return getRestClasses(); 
    } 

    private Set<Class<?>> getRestClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>();   
     resources.add(AuthenticationFilter.class); 
     return resources;  
    } 
} 

をお試しくださいそれは箱から出して動作するはずですので、それは(私が思うのOpenEJB-jar.xmlの、システムのプロパティ)設定に依存

+0

これを行うと、すべてのリソースクラスも登録する必要があります。空のApplicationクラスは '@Path'クラスと' @Provider'クラスのクラスパススキャンをトリガするために指定されているので、動作するには_supposed_です。クラスを追加すると、クラスパスのスキャンが無効になり、すべてを自分で登録する必要があります。 –

+0

次のようにNullPointerExceptionが発生しました。 TomEEと連携させるための「自動方法」はありますか? –

0

代替ラーフルさんのようにクラスでフィルタを登録する(https://github.com/apache/tomee/blob/41cb392c6e3dc63d6792eae88e90c33743255212/server/openejb-cxf-rs/src/test/java/org/apache/openejb/server/cxf/rs/CDIProviderContainerRequestFilterTest.javaは、より多くの何もない)ではありませんアンサー(ただしTomEEはジャージを使用していないのでジャージー関係はしないでください。失敗するだけで混乱を招くかもしれません)、あるいはopenejb-jar.xmlで設定してください。

関連する問題