2016-11-01 4 views
2

Я использую spring-data-rest в моем приложении, которое находится позади апача обратного прокси-сервера, который перенаправляет с HTTP на HTTPSForce остальной весны данных использовать протокол HTTPS схему

Это, в свою очередь, приводит к неправильному hrefs: http вместо https схемы.

Пример:

{ 
    "_links" : { 
    "profile" : { 
     "href" : "http://my.host/api/profile" 
    } 
    } 
} 

Есть ли способ, что я могу настроить spring.data.rest, чтобы заставить использовать схему протокола HTTPS?

+0

Непонятно, как вы производите свои ссылки. Во всяком случае, имейте в виду, что proxypass (reverse) работает с заголовками HTTP-протокола, поэтому он не имеет ничего общего с протоколом, который вы используете в своем webapp. Так что, вероятно, ничего не нужно настраивать, кроме проверки конфигурации Apache proxypass или проверки вашего webapp или - hugh - вашей конфигурации Tomcat. – Sampisa

ответ

2

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

Поэтому я создал фильтр, который заменяет http:// на https:// в URL-адресе запроса, и проблема исчезла. Вот фрагмент:

@Override 
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) servletRequest; 
     final HttpServletRequestWrapper wrapped = new HttpServletRequestWrapper(request) { 
      @Override 
      public StringBuffer getRequestURL() { 
       final StringBuffer originalUrl = ((HttpServletRequest) getRequest()).getRequestURL(); 
       final String updatedUrl = originalUrl.toString().replace("http://", "https://"); 
       return new StringBuffer(updatedUrl); 
      } 
     }; 
     filterChain.doFilter(wrapped, servletResponse); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^