Spring Security: требует-канал = "https" позади ускорителя SSL - PullRequest
8 голосов
/ 18 июля 2011

Мы используем устройство F5 BIG-IP для разрыва соединений SSL и соединения по обычному HTTP с сервером приложений с помощью подпружиненного приложения.Также мы настроили F5 на отправку заголовка X-Forwarded-Proto с http или https в качестве значения.

Теперь мы хотели бы применить HTTPS, настроив URL-адрес перехвата:это работает только в том случае, если схема протокола в контейнере сервлетов - HTTPS, поэтому нам нужно интерпретировать заголовок HTTP.

Есть идеи, как это сделать?

Спасибо, Саймон

Ответы [ 3 ]

8 голосов
/ 18 июля 2011

Подкласс SecureChannelProcessor и InsecureChannelProcessor переопределение decide(). Вам нужно будет скопировать и вставить некоторый код, например для Secure:

    @Override
    public void decide(FilterInvocation invocation, Collection<ConfigAttribute> config) throws IOException, ServletException {
      Assert.isTrue((invocation != null) && (config != null), 
                       "Nulls cannot be provided");

      for (ConfigAttribute attribute : config) {
          if (supports(attribute)) {
              if (invocation.getHttpRequest().
                      getHeader("X-Forwarded-Proto").equals("http")) {
                  entryPoint.commence(invocation.getRequest(),
                      invocation.getResponse());
              }
          }
      }
    }

Затем установите эти ChannelProcessor для компонента ChannelDecisionManagerImpl , используя BeanPostProcessor.

0 голосов
/ 28 декабря 2017

В наши дни еще проще:

server.use-forward-headers: true

Включено по умолчанию для Cloud Foundry и Heroku, но не для других, таких как AWS.

Документация (раздел 73.7): https://docs.spring.io/spring-boot/docs/1.5.x/reference/html/howto-embedded-servlet-containers.html

0 голосов
/ 17 марта 2017

Я знаю, что этому вопросу / ответу 4 года, но он помогает мне найти решение моей проблемы.Но в современных приложениях Spring Boot исправить это проще.Просто добавьте следующую запись в вашу application.yaml:

server.tomcat.protocol_header: x-forwarded-proto

Более подробную информацию здесь: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-security.html#howto-enable-https

...