Назад | Перейти на главную страницу

Как выборочно включать или отключать SSL для некоторых URL-адресов в Tomcat 7

Я использую SSL в Tomcat 7, создаю хранилище ключей и настраиваю server.xml, а также config в web.xml как показано ниже

<security-constraint>
         <!-- SSL enforced -->
        <web-resource-collection>
            <web-resource-name>SSL</web-resource-name>
            <url-pattern>/inspectionGp/*</url-pattern>
            <url-pattern>/inspection/*</url-pattern>
            <url-pattern>/inspGpDt/*</url-pattern>
            <url-pattern>/inspDt/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
</security-constraint>

Это работает для SSL, эти ограниченные URL-адреса вынуждены использовать только SSL, но другие URL-адреса также могут использовать как HTTP, так и HTTPS, это странно, я не хочу использовать HTTPS для URL-адресов, которые не настроены в <url-pattern>. я использую <transport-guarantee>NONE</transport-guarantee>, что приведет к тому, что все URL-адреса будут поддерживать как HTTP, так и HTPPS. Так может ли кто-нибудь помочь объяснить, как я могу это решить?

Обязательно подумайте об использовании SSL для всего. Многие наши клиенты идут в этом направлении, и я полностью его рекомендую.

Если вы смешиваете HTTP / HTTPS и хотите поддерживать состояние сеанса, вам придется обойти некоторые механизмы в Tomcat, которые пытаются предотвратить это (безопасные файлы cookie для JSESSIONID). Как только вы это сделаете, кто-то может перехватить сеанс через HTTP и предпринять действия на стороне HTTPS.

С учетом всего сказанного, если вы хотите иметь такой уровень детального управления, вы можете рассмотреть возможность использования ServletFilter. Фильтр можно сначала применить в файле web.xml, а затем применить к диспетчеру «ЗАПРОС» в шаблоне URL «/ *» (или просто в шаблонах, в которых вам нужно сделать это определение).

Затем фильтр просмотрит запрос. Если это путь, который должен быть HTTPS, он проверит request.isSecure (). Если это не безопасно, он выполнит перенаправление 301 на сторону HTTPS, следя за тем, чтобы сохранить полный путь запроса и любые параметры URL. Точно так же перенаправить с HTTPS на HTTP.

Я страстно люблю фильтры сервлетов. Это швейцарский армейский нож для обработки запросов. Вы ничего не можете сделать. Наиболее важно то, что поведение является частью приложения, а не настройкой Tomcat. Вы можете развернуть приложение где угодно, и оно будет «просто работать».