+ class ExtendedForwarded implements Customizer {
+
+ @Override
+ public void customize(Connector connector, HttpConfiguration config, Request request) {
+ HttpFields httpFields = request.getHttpFields();
+
+ String ip = httpFields.getStringField("X-Real-IP");
+ String proto = httpFields.getStringField("X-Real-Proto");
+ String cert = httpFields.getStringField("X-Client-Cert");
+ request.setSecure("https".equals(proto));
+ request.setScheme(proto);
+ if ( !"https".equals(proto)) {
+ cert = null;
+
+ }
+ if (cert != null) {
+ X509Certificate[] certs = new X509Certificate[1];
+ try {
+ certs[0] = (X509Certificate) CertificateFactory.getInstance("X509").generateCertificate(new ByteArrayInputStream(PEM.decode("CERTIFICATE", cert)));
+ request.setAttribute("javax.servlet.request.X509Certificate", certs);
+ } catch (CertificateException e) {
+ e.printStackTrace();
+ }
+ }
+ if (ip != null) {
+ String[] parts = ip.split(":");
+ if (parts.length == 2) {
+ request.setRemoteAddr(InetSocketAddress.createUnresolved(parts[0], Integer.parseInt(parts[1])));
+ }
+ }
+
+ }
+ }
+