If this already known (WRT to the following comment)? https://nierbeck.de/2013/01/bind-certain-web-applications-to-specific-httpconnectors/#comment-62
Am Do., 16. Mai 2019 um 20:26 Uhr schrieb Markus Rathgeb <maggu2...@gmail.com>: > > Hi Łukasz, hi JB, > > thank you for that information. > > I did not found an official documentation for that feature. > > I found this one (WRT the information given to me from you): > * https://ops4j1.jira.com/browse/PAXWEB-396 > * > https://nierbeck.de/2013/01/bind-certain-web-applications-to-specific-httpconnectors/ > * http://blog.nanthrax.net/?p=352 > * Source code of Pax Web > > I gave it a try using two additional connectors in jetty.xml. > I used the example that has been present in the current jetty.xml as > "SelectChannelConnector" did not work ("Caused by: > java.lang.ClassNotFoundException: > org.eclipse.jetty.server.nio.SelectChannelConnector not found by > org.eclipse.jetty.server [62]"). > === > <Call name="addConnector"> > <Arg> > <New class="org.eclipse.jetty.server.ServerConnector"> > <Arg name="server"><Ref refid="Server" /></Arg> > <Arg name="factories"> > <Array type="org.eclipse.jetty.server.ConnectionFactory"> > <Item> > <New > class="org.eclipse.jetty.server.HttpConnectionFactory"> > <Arg name="config"><Ref > refid="httpConfig" /></Arg> > </New> > </Item> > </Array> > </Arg> > <Set name="host"><Property name="jetty.host" > default="localhost" /></Set> > <Set name="port"><Property name="jetty.port" > default="8201" /></Set> > <Set name="idleTimeout"><Property name="http.timeout" > default="30000" /></Set> > <Set name="name">conn1</Set> > </New> > </Arg> > </Call> > <Call name="addConnector"> > <Arg> > <New class="org.eclipse.jetty.server.ServerConnector"> > <Arg name="server"><Ref refid="Server" /></Arg> > <Arg name="factories"> > <Array type="org.eclipse.jetty.server.ConnectionFactory"> > <Item> > <New > class="org.eclipse.jetty.server.HttpConnectionFactory"> > <Arg name="config"><Ref > refid="httpConfig" /></Arg> > </New> > </Item> > </Array> > </Arg> > <Set name="host"><Property name="jetty.host" > default="localhost" /></Set> > <Set name="port"><Property name="jetty.port" > default="8202" /></Set> > <Set name="idleTimeout"><Property name="http.timeout" > default="30000" /></Set> > <Set name="name">conn2</Set> > </New> > </Arg> > </Call> > === > > So, additional to 8181 there should be two connetors. conn1 on 8201 > and conn2 on 8202. > > I created two bundles. Each bundle registers one servlet and use one > Web-Connector settings: > > Bundle 1 - Component: > === > @Component(immediate = true) > @Header(name = "Web-Connectors", value = "conn1") > @Header(name = "Web-VirtualHosts", value = "localhost") > public class ComponentImpl { > > private static final String ALIAS = "/1"; > > private final HttpService httpService; > > @Activate > public ComponentImpl(final @Reference HttpService httpService) > throws ServletException, NamespaceException { > this.httpService = httpService; > httpService.registerServlet(ALIAS, new HttpServlet() { > > @Override > protected void doGet(final HttpServletRequest req, final > HttpServletResponse resp) > throws ServletException, IOException { > final PrintWriter writer = resp.getWriter(); > writer.println("This is the servlet: " + ALIAS); > } > > }, null, null); > } > > @Deactivate > public void close() { > httpService.unregister(ALIAS); > } > > } > === > > The "Bundle 2 - Component" is identicial to the "1" but uses the alias > "/2" and the "Web-Connectors" "conn2". > > But this does not seem to work as expected. > "/1" and "/2" can be open on port 8181, 8201 and 8202. > > So, all of them are available on all connectors. > > Can you point me to my misconfiguration? > Or can you provide me two working demo bundles each of them using > another connector? > > Best regards, > Markus > > Am Do., 16. Mai 2019 um 16:18 Uhr schrieb Jean-Baptiste Onofré > <j...@nanthrax.net>: > > > > Hi, > > > > I'm not sure it's what you are looking for, but you can configure > > several connectors via jetty.xml (in addition of the default one created > > by Pax Web), then, you can use "VirtualHost" to deploy a servlet on a > > specific connector. > > > > I blogged about this while ago (http://blog.nanthrax.net/?p=352). > > > > Regards > > JB > > > > On 16/05/2019 08:12, Markus Rathgeb wrote: > > > Hi, > > > > > > I assume there are different parties involved, so if this question > > > should be raised on another mailing list, please can you point me to? > > > > > > I am using Karaf + Pax Web + Jetty. > > > > > > Currently I build a custom distribution that Pax Web configuration > > > (org.ops4j.pax.web.cfg) contains also this lines: > > > > > > === > > > org.ops4j.pax.web.ssl.clientauthwanted = true > > > org.ops4j.pax.web.ssl.clientauthneeded = true > > > > > > org.ops4j.pax.web.ssl.truststore=${karaf.etc}/truststore.jks > > > org.ops4j.pax.web.ssl.truststore.password=that-is-not-the-real-one > > > === > > > > > > This distribution contains a bundle that registers a servlet "MyServlet". > > > > > > Now, just FYI, I assume not all is relevant: > > > > > > === > > > "MyServlet" extends the "WebSocketServlet" > > > (org.eclipse.jetty.websocket.servlet.WebSocketServlet). > > > Type hierarchy: MyServlet -> WebSocketServlet -> HttpServlet -> > > > GenericServlet [Servlet, ServletConfig, Serializable]. > > > > > > The WebSocketServlet requires the implementation of the abstract > > > method "public abstract void configure(WebSocketServletFactory > > > factory);" > > > > > > In the "configure" implementation is set a "creator". > > > > > > factory.setCreator(new MyCreator(...)); > > > > > > MyCreator implements the following method (required by the > > > WebSocketCreator interface): > > > > > > public @Nullable Object createWebSocket(final ServletUpgradeRequest > > > req, final ServletUpgradeResponse resp); > > > > > > In that method I do a simple certificate check. > > > > > > I call "final X509Certificate[] certs = req.getCertificates();" and > > > use the returned chain for the check. > > > > > > Now back to the relevant part. > > > === > > > > > > The current implementation of the client certificate chain check > > > relies that Jetty already required the client authentication > > > (clientauthneeded) and that the certificate is already checked against > > > the configured truststore (that contains only a special CA). > > > > > > As we could rely on a "valid" certifcate I just need to extract the > > > information I need from the client certifcate and "all is fine". > > > > > > > > > Now, I need to add another servlet to that custom distribution that > > > should work without a client certifcate. > > > > > > I assume I will need to remove the truststore and clientauth settings > > > from the configuration (keep wanted and drop needed?) and check the > > > certifcate in the code for "MyServlet" itself. > > > I further assume it should work by a filter or in the servlet itself. > > > > > > Are there better ways to handle two servlet > > > * Servlet1 needs client authentication > > > * Servlet2 do not use client authentication > > > > > > How can I trigger the check of the client certificate correctly in the > > > servlet / filter to check against a specific truststore? > > > > > > I am interested in your inputs. > > > > > > Best regards, > > > Markus > > > > > > > -- > > Jean-Baptiste Onofré > > jbono...@apache.org > > http://blog.nanthrax.net > > Talend - http://www.talend.com