1

Spring HATEOAS ResourceSupport génère des URL incorrectes dans ses réponses. J'utilise Tomcat avec Spring et NGINX comme proxy inverse.nginx proxy inverse + Spring ResourceSupport produit préfixe chemin URL mal

Spring généré URL: http://localhost:8080/spring-ng-seed

URL du projet: https://spring-ng-seed.dev/ (sert du contenu statique),

Web URL API: https://spring-ng-seed.dev/wapi/

Toutes les demandes de /wapi/ excellent travail mais ResourceSupport de printemps HATEOAS génère urls que ressembler à: https://spring-ng-seed.dev/spring-ng-seed/foo/bar au lieu de https://spring-ng-seed.dev/wapi/foo/bar

Par exemple, une auto rel quand nous appelons https://spring-ng-seed.dev/wapi/foo/bar nous nous retrouvons avec https://spring-ng-seed.dev/spring-ng-seed/foo/bar revenir comme auto rel qui est incorrect.

/spring-ng-seed/foo/bar devrait être /wapi/foo/bar dans les liens de réponse.

Je ne sais pas ce qui est mal configuré, nginx, tomcat ou au printemps, mais je ne trouve rien sur nulle part ailleurs.

J'utilise aussi AngularJS sur l'avant, mais je doute que le problème pose à l'avant, mais plutôt avec nginx comme proxy inverse ou tomcat.

Quelqu'un peut-il vous aider s'il vous plaît?

NGINX Config:

server { 
    charset UTF-8; 
    listen 80; 
    listen 443 ssl; 

    server_name www.spring-ng-seed.dev spring-ng-seed.dev; 

    ssl on; 
    ssl_certificate   /Users/reecefowell/Projects/Spring/spring-ng-seed/cert.pem;  # path to your cacert.pem 
    ssl_certificate_key  /Users/reecefowell/Projects/Spring/spring-ng-seed/server.key; # path to your privkey.pem 
    ssl_protocols    TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers    ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5; 
    ssl_prefer_server_ciphers on; 

    location /wapi/ { 
     proxy_pass    http://localhost:8080/spring-ng-seed/; 
     proxy_read_timeout  90; 
     proxy_connect_timeout 90; 
     # proxy_ssl_session_reuse off; 
     proxy_redirect off; 

     proxy_set_header Host $http_host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-Proto https; 
     proxy_set_header X-Forwarded-Prefix $http_x_forwarded_prefix; 
     proxy_set_header X-Forwarded-Host $http_x_forwarded_host; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-NginX-Proxy true; 

     proxy_set_header X-Forwarded-Protocol https; 
     proxy_set_header X-Forwarded-Ssl on; 
     proxy_set_header X-Url-Scheme https; 
    } 

    location/{ 
     root /Users/reecefowell/Projects/Spring/spring-ng-seed/src/main/webapp/app/build; 

     index index.html; 
    } 
} 

Mon Tomcat est configuré via mon fichier pom.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <packaging>war</packaging> 
    <groupId>spring-ng-seed</groupId> 
    <artifactId>spring-ng-seed</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.springframework</groupId> 
       <artifactId>spring-framework-bom</artifactId> 
       <version>4.0.5.RELEASE</version> 
       <type>pom</type> 
       <scope>import</scope> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.hateoas</groupId> 
      <artifactId>spring-hateoas</artifactId> 
      <version>0.12.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.4.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.4.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.4.0</version> 
     </dependency> 

     ... 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.tomcat.maven</groupId> 
       <artifactId>tomcat7-maven-plugin</artifactId> 
       <version>2.2</version> 
       <!--<configuration>--> 
        <!--<url>http://localhost:8080/manager</url>--> 
        <!--<server>localhost</server>--> 
       <!--</configuration>--> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.4</version> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Répondre

0

Pouvez-vous s'il vous plaît jeter un oeil à les en-têtes de proxy que votre demande contient quand elle touche votre un service. spring-hateoas traitera l'en-tête x-forwarded-prefix et ajoutera-le à votre chemin.

Jetez un oeil à cette réponse ici: https://stackoverflow.com/a/36163242/5371736

+0

Je l'ai fait que vous avez demandé, et je l'ai changé la configuration suivante: 'proxy_set_header X-Forwarded-prefix/WAPI,' Aucun effet. j'ai vérifié la sortie des têtes reçus à Springs 'HttpServletRequest' et ce que j'ai trouvé: ' Hôte: "spring-ng-seed.dev" '' X-Real-IP: "127.0.0.1" ' ' X-Forwarded-Proto: "https" ' ' X-Forwarded-préfixe: "/ wapi" ' ' X-Forwarded-Host: null' 'X-Forwarded-Pour:" 127.0.0.1 "' 'X-NginX-Proxy: true' Des pensées? Merci. –

+1

Support pour 'X-Forwarded-Prefix' n'a été [ajouté au printemps 4.1.3] (https://github.com/spring-projects/spring-framework/commit/7f11c1ee2f802b3a2a5b821c821b15c6705dc085), en fonction de votre POM il semble que vous êtes en utilisant Spring 4.0.5? –