Browse Source

SONAR-4742 Add support of AJP 1.3 protocol

tags/4.3
Jan Stamer 10 years ago
parent
commit
22cd25e7b8

+ 4
- 0
sonar-application/src/main/assembly/conf/sonar.properties View File

@@ -140,6 +140,10 @@ sonar.jdbc.timeBetweenEvictionRunsMillis=30000
# Access logs are enabled by default.
#sonar.web.accessLogs.enable=true

# TCP port for incoming AJP connections. Disabled when value is -1.
# sonar.ajp.port=9009



#--------------------------------------------------------------------------------------------------
# UPDATE CENTER

+ 15
- 2
sonar-application/src/main/java/org/sonar/application/Connectors.java View File

@@ -30,6 +30,7 @@ class Connectors {

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);
@@ -38,7 +39,7 @@ class Connectors {

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);
@@ -57,7 +58,7 @@ class 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);
}
@@ -86,6 +87,18 @@ class Connectors {
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;

+ 19
- 2
sonar-application/src/test/java/org/sonar/application/ConnectorsTest.java View File

@@ -133,6 +133,7 @@ public class ConnectorsTest {
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);

@@ -145,6 +146,13 @@ public class ConnectorsTest {
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) {
@@ -155,16 +163,17 @@ public class ConnectorsTest {
}

@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");
}
}

@@ -172,6 +181,7 @@ public class ConnectorsTest {
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));
@@ -183,6 +193,13 @@ public class ConnectorsTest {
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) {

Loading…
Cancel
Save