2016-11-01 1 views
2

Ich verwende spring-data-rest in meiner Anwendung, die hinter Apache Reverse-Proxy ist, die von HTTP-Umleitungen zu HTTPSKraftfeder Daten Rest verwendet https Schema

Dies wiederum führt zu falschem hrefs: http statt https Schema.

Beispiel:

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

Gibt es eine Möglichkeit, spring.data.rest so konfigurieren, dass die Verwendung https Schema zu erzwingen?

+0

Es ist unklar, wie Sie Ihre Links produzieren. Bedenken Sie jedoch, dass proxypass (reverse) auf HTTP-Protokoll-Headern funktioniert, so dass es nichts mit dem Protokoll zu tun hat, das Sie in Ihrer Webanwendung verwenden. Es gibt also wahrscheinlich nichts zu konfigurieren, außer die Konfiguration des Apache Proxypass zu überprüfen, oder die Webapp zu überprüfen oder - hugh - Ihre Tomcat Konfiguration. – Sampisa

Antwort

2

Nach dem Graben im Quellcode fand ich heraus, dass alle Link-Kreationen von dieser point stammen und es scheint unmöglich zu sein, die erzwungene Verwendung von https-Schema auf eine "Standard" Weise zu konfigurieren.

Also habe ich einen Filter erstellt, der http:// zu https:// in Anforderung URL ersetzt und das Problem ist weg. Hier ist das Snippet:

@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); 
    } 
Verwandte Themen