private static final int DISABLED_PORT = -1;
static final String HTTP_PROTOCOL = "HTTP/1.1";
+ static final String AJP_PROTOCOL = "AJP/1.3";
static void configure(Tomcat tomcat, Props props) {
configureShutdown(tomcat, props);
private static void configureConnectors(Tomcat tomcat, Props props) {
List<Connector> connectors = new ArrayList<Connector>();
- connectors.addAll(Arrays.asList(newHttpConnector(props), newHttpsConnector(props)));
+ connectors.addAll(Arrays.asList(newHttpConnector(props), newAjpConnector(props), newHttpsConnector(props)));
connectors.removeAll(Collections.singleton(null));
verify(connectors);
for (Connector connector : connectors) {
int port = connector.getPort();
if (ports.contains(port)) {
- throw new IllegalStateException(String.format("HTTP and HTTPS must not use the same port %d", port));
+ throw new IllegalStateException(String.format("HTTP, AJP and HTTPS must not use the same port %d", port));
}
ports.add(port);
}
return connector;
}
+ @Nullable
+ private static Connector newAjpConnector(Props props) {
+ Connector connector = null;
+ int port = props.intOf("sonar.ajp.port", DISABLED_PORT);
+ if (port > DISABLED_PORT) {
+ connector = newConnector(props, AJP_PROTOCOL, "http");
+ connector.setPort(port);
+ info("AJP connector is enabled on port " + port);
+ }
+ return connector;
+ }
+
@Nullable
private static Connector newHttpsConnector(Props props) {
Connector connector = null;
public void all_connectors_are_enabled() {
Properties p = new Properties();
p.setProperty("sonar.web.port", "9000");
+ p.setProperty("sonar.ajp.port", "9009");
p.setProperty("sonar.web.https.port", "9443");
Props props = new Props(p);
return c.getScheme().equals("http") && c.getPort() == 9000 && c.getProtocol().equals(Connectors.HTTP_PROTOCOL);
}
}));
+ verify(tomcat.getService()).addConnector(argThat(new ArgumentMatcher<Connector>() {
+ @Override
+ public boolean matches(Object o) {
+ Connector c = (Connector) o;
+ return c.getScheme().equals("http") && c.getPort() == 9009 && c.getProtocol().equals(Connectors.AJP_PROTOCOL);
+ }
+ }));
verify(tomcat.getService()).addConnector(argThat(new ArgumentMatcher<Connector>() {
@Override
public boolean matches(Object o) {
}
@Test
- public void http_and_https_ports_should_be_different() throws Exception {
+ public void http_and_ajp_and_https_ports_should_be_different() throws Exception {
Properties p = new Properties();
p.setProperty("sonar.web.port", "9000");
+ p.setProperty("sonar.ajp.port", "9000");
p.setProperty("sonar.web.https.port", "9000");
try {
Connectors.configure(tomcat, new Props(p));
fail();
} catch (IllegalStateException e) {
- assertThat(e).hasMessage("HTTP and HTTPS must not use the same port 9000");
+ assertThat(e).hasMessage("HTTP, AJP and HTTPS must not use the same port 9000");
}
}
public void bind_to_all_addresses_by_default() throws Exception {
Properties p = new Properties();
p.setProperty("sonar.web.port", "9000");
+ p.setProperty("sonar.ajp.port", "9009");
p.setProperty("sonar.web.https.port", "9443");
Connectors.configure(tomcat, new Props(p));
return c.getScheme().equals("http") && c.getPort() == 9000 && ((InetAddress)c.getProperty("address")).getHostAddress().equals("0.0.0.0");
}
}));
+ verify(tomcat.getService()).addConnector(argThat(new ArgumentMatcher<Connector>() {
+ @Override
+ public boolean matches(Object o) {
+ Connector c = (Connector) o;
+ return c.getScheme().equals("http") && c.getPort() == 9009 && ((InetAddress)c.getProperty("address")).getHostAddress().equals("0.0.0.0");
+ }
+ }));
verify(tomcat.getService()).addConnector(argThat(new ArgumentMatcher<Connector>() {
@Override
public boolean matches(Object o) {