Eu sei que você está usando o Jetty, mas eu tenho um método usando o Tomcat que funciona e explicarei abaixo.
Basicamente, eu desisti de tentar entender o que eu percebo como formas excessivamente obtusas de aplicativos web Java se protegerem no Jetty e no Tomcat. Então eu prefiro permitir que o Apache faça o trabalho pesado de ser a primeira linha de defesa contra o acesso. O Apache é sólido e confiável. E se você sentir a necessidade de segurança extra, você pode sempre instalar ferramentas como o ModSecurity para torná-lo ainda mais seguro.
A chave é criar uma configuração de proxy reverso no Apache assim. O código na configuração do Apache para o host que terá o Solr em execução. Eu gosto de tê-lo correndo de um subdiretório, então este exemplo usa /solr
como um exemplo para as configurações ProxyPass
e ProxyPassReverse
. Primeiro, aqui estão as configurações para adicionar uma barra à direita dos URLs, para que as chamadas para http://my.server.is.great/solr
sejam traduzidas para http://my.server.is.great/solr/
# Settings for adding a trailing slash to the URL
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/(solr)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}$1/ [R=301,L]
Agora, vem a matéria mod_proxy
que funciona com a mágica de rotear um aplicativo da web do Tomcat para um front end do Apache.
# Settings for Solr in Apache
<IfModule mod_proxy.c>
# Proxy specific settings
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
AddDefaultCharset off
Order deny,allow
Allow from all
</Proxy>
ProxyPass /solr http://localhost:8080/solr/
ProxyPassReverse /solr http://localhost:8080/solr/
</IfModule>
Neste ponto, eu reiniciaria o Apache e verificaria se isso funciona. Se isso acontecer, tudo de bom! Agora, a etapa final é entrar no arquivo XML do Tomcat e restringir o Solr a responder apenas às solicitações localhost
/ 127.0.0.1
adicionando address="127.0.0.1"
ao conector.
<Connector port="8080" protocol="HTTP/1.1"
address="127.0.0.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443" />
Agora esta última parte? Talvez seja tudo que você precisa. Talvez você só queira que address="127.0.0.1"
seja o IP da máquina de uma máquina que precisa de acesso. Mas, novamente, você está usando o Jetty, então talvez exista uma maneira equivalente de restringir a um IP no Jetty? Ou você pode até mesmo restringir via IP na configuração do Apache. O que funciona melhor.