将HTTP基本身份验证应用于嵌入式Jetty中的jax ws(HttpSpiContextHandler)

将HTTP基本身份验证应用于嵌入式Jetty中的jax ws(HttpSpiContextHandler),jetty,jax-ws,basic-authentication,embedded-jetty,Jetty,Jax Ws,Basic Authentication,Embedded Jetty,Jetty的早期版本(9之前)也有一些类似的问题,但没有一个能解决这个特定问题: Server server = new Server(); System.setProperty("com.sun.net.httpserver.HttpServerProvider", JettyHttpServerProvider.class.getName()); JettyHttpServer jettyServer = new JettyHttpServer(server, true); En

Jetty的早期版本(9之前)也有一些类似的问题,但没有一个能解决这个特定问题:

Server server = new Server();
System.setProperty("com.sun.net.httpserver.HttpServerProvider",
     JettyHttpServerProvider.class.getName()); 
JettyHttpServer jettyServer = new JettyHttpServer(server, true);
Endpoint endpoint = Endpoint.create(new SOAPService()); // this class to handle all ws requests
endpoint.publish(jettyServer.createContext("/service")); // access by path
server.start()
上面的简化代码示例显示了我发现的唯一一种在Jetty和我的jax ws服务的传入soap请求之间架桥的方法。所有设置都在代码中,没有web.xml,这是一个更大的解决方案的一部分,该解决方案具有多个上下文和用于不同目的的连接(servlet等)

我尝试向jettyServer.createContext(“/service”,new handler())添加一个处理程序类,以查看是否可以执行头提取来模拟基本身份验证,但从未执行过

我的问题是,我无法找到一种方法,通过针对Jetty服务器的代码指定使用基本身份验证。使用ServletContextHandler的setSecurityHandler方法很简单,而且对于其他上下文也很有效,我只是不知道如何将这个概念用于jax-ws服务。 任何帮助都将不胜感激


p、 SSL已经实现,我只需要添加http基本身份验证。

对于可能遇到相同问题的其他人,这里是我最终偶然发现的答案

final HttpContext httpContext = jettyServer.createContext("/service");
com.sun.net.httpserver.BasicAuthenticator a = new com.sun.net.httpserver.BasicAuthenticator("") {
                public boolean checkCredentials (String username, String pw) 
                {
                    return username.equals("username") && pw.equals("password");
                }
            };
httpContext.setAuthenticator(a);
endpoint.publish(httpContext);//access by path
当然,您可以将checkCredentials扩展为更复杂的内容,但这显示了基本的工作方法