Tomcat: как получить безопасный номер порта в Java? - PullRequest
3 голосов
/ 05 августа 2009

Я хотел бы добавить ссылку на защищенную страницу моего приложения на одну из моих незащищенных страниц. Безопасный порт Tomcat настраивается в файле server.xml. В некоторых случаях это 443, 8443 и т. Д. Так что мне нужен способ прочитать защищенный порт из конфигурации Tomcat, чтобы использовать его в ссылке. Это возможно?

В качестве альтернативы, просто получить доступ к конфигурации server.xml (из контекста запроса) и проанализировать его самостоятельно, чтобы выяснить номер порта, также приемлемо, но менее желательно.

Я понимаю, что может быть несколько соединителей и несколько безопасных, поэтому я оставлю на усмотрение логики моей программы выбирать, какой из них выбрать. Проблема в том, как мне получить эту информацию?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

Я почти уверен, что для этого нет API. Вероятно, вы можете сохранить его настраиваемым с помощью параметра среды сервлета в web.xml. Очевидным недостатком является то, что теперь у вас есть 2 места, где настроен номер порта SSL.

Другой подход заключается в настройке безопасности в web.xml iirc, например,

 <security-constraint>
    <web-resource-collection> 
        <web-resource-name>MyLoginPage</web-resource-name>
        <url-pattern>/login</url-pattern> 
        <http-method>GET</http-method> 
        <http-method>POST</http-method> 
    </web-resource-collection> 
    <user-data-constraint> 
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
     </user-data-constraint> 
 </security-constraint>

Вы можете просто использовать обычные ссылки на страницу входа, и tomcat должен автоматически отправлять повторные вызовы на соединитель ssl, какой бы порт не был настроен.

1 голос
/ 05 августа 2009

Наиболее простым решением, вероятно, является поиск файла server.xml в методе сервлета init(), его анализ и сохранение номера порта где-нибудь. Сервлет должен быть загружен автоматически.

Другой вариант - поместить этот код в скрипт сборки и скопировать значение в файл web.xml во время сборки. Но это означает, что у вас должен быть тот же Tomcat, установленный локально, или у вас должен быть удаленный доступ к файлу server.xml.

Я предпочитаю первое решение, так как сервлет может произойти сбой раньше, и веб-приложение не будет работать, если порт не может быть определен. Таким образом, у вас не будет загадочной ошибки в неустановленное время в будущем, и вам не потребуется тратить время на каждый запрос (номер порта не может измениться без перезапуска Tomcat).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...