我们的应用程序使用 sparkjava http://sparkjava.com/作为 REST 框架。码头服务器嵌入在应用程序中(sparkjava 默认)。我们还使用 spring 进行依赖注入。
为了提供 AD 认证,我们需要集成 waffle 的 NegotiateSecurityFilter。
根据 waffle 文档和包括 stackoverflow 在内的多个在线资源,需要一个名为 springSecurityFilterChain 的 DelegatingFilterProxy。
但是由于我们没有使用spring MVC,所以我必须添加如下:
ServletContextHandler sparkContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
sparkContext.addFilter(new FilterHolder( new DelegatingFilterProxy( "springSecurityFilterChain" ) ),"/*", EnumSet.allOf( DispatcherType.class ));
并且由于 ContextLoaderListener 尚不存在,需要按如下方式添加:
sparkContext.addEventListener( new ContextLoaderListener() );
但它在服务器启动时给出错误“无法初始化上下文,因为已经存在根应用程序上下文 - 检查您是否有多个 ContextLoader”。
如果您已成功将 spring-security DelegatingFilterProxy 与嵌入式码头和 sparkjava 集成(不使用 spring MVC),请告诉我这种情况下的解决方案。