2017-09-04 11 views
0

私たちのアプリケーションは、sparkjava http://sparkjava.com/をRESTフレームワークとして使用しています。 jettyサーバーはアプリケーションに組み込まれています(デフォルトはsparkjava)。また、依存性注入にはスプリングを使用しています。ワッフルを統合する方法NegotiateSecurityFilter spring-securityとsparkjava埋め込み桟橋?

AD認証を提供するために、ワッフルのNegotiateSecurityFilterを統合する必要があります。

ワッフルのドキュメントおよびstackoverflowを含むいくつかのオンラインリソースによれば、名前springSecurityFilterChainのDelegatingFilterProxyが必要です。

は、しかし、我々は春MVCを使用していないため、私は次のようにそれを追加する必要があります。

ServletContextHandler sparkContext = new ServletContextHandler(ServletContextHandler.SESSIONS); 
    sparkContext.addFilter(new FilterHolder(new DelegatingFilterProxy("springSecurityFilterChain")),"/*", EnumSet.allOf(DispatcherType.class)); 

をとのContextLoaderListenerがすでに存在しないため、次のように追加する必要があります。

sparkContext.addEventListener(new ContextLoaderListener()); 

しかし、サーバーの起動時に、すでに「ルートアプリケーションのコンテキストが存在するためコンテキストを初期化できません - 複数のContextLoaderがあるかどうかを確認できません」というエラーが表示されます。

春のセキュリティDelegatingFilterProxyとjettyとsparkjavaが組み込まれている場合(スプリングMVCを使用しない場合)、このシナリオの解決方法を教えてください。

答えて

0

これは私が最終的にそれを達成する方法である:私はsparkContextへのアクセス権を持っている主な方法で

を:

ServletContextHandler sparkContext = new ServletContextHandler(ServletContextHandler.SESSIONS); 
sparkContext.setContextPath("/"); 
sparkContext.addServlet(DefaultServlet.class, "/*"); 

addSPNEGOFilter(sparkContext); 

と実装方法として、次のとおりです。

private void addSPNEGOFilter(ServletContextHandler sparkContext) { 
    final ServletHandler handler = new ServletHandler(); 
    final FilterHolder fh = handler.addFilterWithMapping(NegotiateSecurityFilter.class, <SPNEGO_FILTER_PATH>, 
      EnumSet.allOf(DispatcherType.class)); 
    setNegotiateFilterParams(fh); 
    sparkContext.addFilter(fh, <SPNEGO_FILTER_PATH>, EnumSet.allOf(DispatcherType.class)); 
} 

追加ホルダーに対する以下の特性:

private static void setNegotiateFilterParams(final FilterHolder fh) { 
    fh.setInitParameter("principalFormat", "fqn"); 
    fh.setInitParameter("roleFormat", "both"); 

    fh.setInitParameter("allowGuestLogin", "false"); 
    fh.setInitParameter("impersonate", "false"); 

    fh.setInitParameter("securityFilterProviders", 
      "waffle.servlet.spi.NegotiateSecurityFilterProvider"); 
    fh.setInitParameter("waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols", "Negotiate"); 
} 
関連する問題