2017-07-19 5 views
1

私はWildfly Swarmに基づいたプロジェクトに取り組んでいます。私が現在持っている問題は、RESTeasyがルートレベルでリッスンしているので、/ webappの下に置かれているindex.html(および他のhtmlファイル)をRESTeasyで隠すことです。Wildfly Swarm RESTeasyはwebapp/index.htmlを非表示にします

私の主な用途:私のリソースの

@ApplicationPath("/") 
public class XYZnlineApplication extends Application { 
} 

ワン:

@Path("protected/api/admin") 
public class AdminResource { 
    @GET 
    @Path("public/api/offer/reduced") 
    @Produces("application/json") 
    public List<XYZ> getXYZ() { 
     ... 
    } 

    @GET 
    @Path("protected/api/offer/full") 
    @Produces("application/json") 
    public List<XYZ> getAllXYZ() { 
     ... 
    } 
} 

事があります。上記のrestendpointの1つにアクセスすると、すべてが正常に動作します(http://localhost:8080/app/public/api/offer/reduced

しかし、私のhtmlファイル(eg login.htmlなど)の1つに直接アクセスしたい場合は、 webappでは、ファイルが正しく束ねられていますが、(例えば、http://localhost:8080/app/login.htmlにアクセスしようとすると)404が返ってきます。だから私の意見では、RESTeasyはこのhtmlファイルを隠すので、ルート(/)を聞いてしまいます。

私のURLの最初の部分はコンテキスト(プロキシによって注入される)なので、私はXYZApplicationのApplicationPathとしてルート(/)以外を設定できません。

この問題を解決する方法についてご意見はありますか?

ご協力いただきありがとうございます。

+0

異なるApplicationPathを設定できない場合は、難しくなります。 シンプルなプロジェクトで問題を提起することができますか?https://issues.jboss.org/browse/SWARM – Ken

答えて

0

ApplicationPathを "/ services"や "/ svc"などのように変更する必要があります。最終的には、静的リソースとサービスの間でURL名前空間を分割する必要があります。 ApplicationPathを指定するときにコンテキストを心配する必要はありません。

メジャー編集:
コメントは実際に何が起こっているかを説明しています。どのタイプのセキュリティを正確に使用しているのかよく分かりませんが、最終的にはサービスの前に何らかのフィルタが必要になる可能性があります。

@Provider 
@Priority(Priorities.AUTHENTICATION) 
@PreMatching 
public class AuthFilter implements ContainerRequestFilter { 
    @Context 
    private HttpServletRequest httpServletRequest; 

    @Context 
    private HttpServletResponse httpServletResponse; 

    @Override 
    public void filter(ContainerRequestContext containerRequestContext) throws IOException { 
     if(containerRequestContext.getUriInfo().getPath().contains("/public/")) 
      return; // user is in public area - doesn't matter if they are authenticated 

     // guess at how to check if user is authenticated 
     if(httpServletRequest.getSession().get("user_is_ok")) 
      return; 

     httpServletResponse.sendRedirect("/login"); 
     // or maybe 
     httpServletResponse.sendError(SC_UNAUTHORIZED); 
    } 
} 

繰り返しますが、これは推測のビットですが、これはあなたの挑戦を処理するのはかなり一般的な方法である:私はのようなものを持っているでしょう。

+0

ありがとうございます。アプリケーションの前にコンテキストを持つことが重要です。したがって、/ apiのようなアプリケーションパスを設定することがあります。しかし、swarmコンテキスト( "app")とApplicationPath( "api")の間には、ユーザーが認証されているかどうかをプロキシに知らせるサブコンテキストが必要です。ユーザーはです。私たちはこれをどのように達成することができるか考えていますか? – mooonli

関連する問題