2013-07-12 3 views
4

Это то, что я сделал до сих пор, чтобы защитить мое приложение SOLR.Как защитить Solr, чтобы разрешить запрос SELECT только пользователям и запретить что-либо еще?

В файле web.xml Solr, я пытаюсь сделать следующее

  • Разрешить/выберите запрос только пользователя или администратора запросов.
  • Запретить любой другой запрос SOLR другому, а затем администратору.

Я добавил ограничений безопасности в файле web.xml в Solr

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Solr Admin</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Public</web-resource-name> 
     <url-pattern>/primary/select/*</url-pattern> 
     <url-pattern>/reindex/select/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>user</role-name> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 

Это, как я инстанцировании соединение HTTP SOLR в моем клиентском приложении

//primary core 
HttpSolrServer primaryindex = new HttpSolrServer(serverUrl + "/" + PRIMARYINDEX); 
    HttpClientUtil.setBasicAuth((DefaultHttpClient) primaryindex.getHttpClient(), "user", "user"); 

//reindex core 
HttpSolrServer reindex = new HttpSolrServer(serverUrl + "/" + REINDEX); 
    HttpClientUtil.setBasicAuth((DefaultHttpClient) reindex.getHttpClient(), "user", "user"); 

-Tomcat пользователей. xml-файл имеет следующие роли и пользователей:

<role rolename="user"/> 
<user username="user" password="user" roles="user"/> 
<user password="admin" roles="manager-script,admin" username="admin"/> 

Выше работает отлично. Очевидно, что в производстве у меня будет более сильное имя пользователя и пароль.

Вопрос

Что еще мне нужно, чтобы защитить свои экземпляры Solr или будет выше достаточно? У меня есть 1 экземпляр Tomcat 7, который запускает клиентское приложение и приложение SOLR. Это то, чего я пытаюсь достичь.

  • Не хочу, чтобы кто-нибудь войти в админ без имени пользователя и пароля
  • Не хочу, чтобы получить доступ сердечника другой, то мой клиент приложение

Я могу добавить Spring безопасность SOLR сверху выше, но это необходимо?

ответ

2

Я не знал, что/админ был контекст для Solr администратора, потому что/администратор не реально показать в URL , Но добавление security-contraints для/admin в web.xml обеспечило приложение администратора.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Admin</web-resource-name> 
     <url-pattern>/admin/*</url-pattern> 
     <url-pattern>/admin.html</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>admin</role-name> 
    </auth-constraint> 
</security-constraint> 

<security-constraint> 
    <!-- This one is necessary to show the image on the Solr start page --> 
    <web-resource-collection> 
     <web-resource-name>Admin images</web-resource-name> 
     <url-pattern>*.png</url-pattern> 
    </web-resource-collection> 
    <auth-contraint> 
     <role-name>admin</role-name> 
    </auth-contraint> 
</security-constraint> 

<login-config> 
    <auth-method>DIGEST</auth-method> 
    <realm-name>admin</realm-name> 
</login-config> 
3

Если у вас включен обработчик репликации, обязательно установите его за одну из защищенных ролей. Еще одна вещь, которую я видел, - это запустить администратор на другом порту. Лучше всего использовать SSL на страницах, для которых требуется аутентификация, поэтому вы не отправляете пароли в ясности, поэтому администратор и репликация будут выполняться, скажем, 8443, тогда как обычные запросы будут выполняться на 8080.

Если вы хотите, вновь собирается подписать свой собственный сертификат, проверить эту полезную SO страницу:

How can I use different certificates on specific connections?