2016-06-19 11 views
2

Ich versuche eine Anfrage von meiner Webstorm Anwendung an meine Backend Anwendung zu senden, die beide an verschiedenen Ports sind, ich arbeite mit angularJS im Frontend und Java Frühling 4.2.5 in Backend. Ich habe verschiedene Dinge ausprobiert, wie cors Filter, cors Anmerkung jedoch hinzufügen, nachdem diese meine Fehler zu tun, siehtWie man den CORS Filter im Frühjahr 4.2 aktiviert

XMLHttpRequest cannot load http://localhost:8081/appUser. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. The response had HTTP status code 404. 

Die AngularJS Controller ist wie

registerController.factory('registerFactory', function(){ 
    return { 
     getClassification:function($http,tempString){ 
      //TODO add URL 
      var url = "http://localhost:8081/example?eg="+tempString 
      return $http({ 
       method: 'POST', 
       url: url 
      }); 
     } 
    } 
}); 

Die Feder-Controller wie

sieht
@RequestMapping(value = "/example", method = RequestMethod.POST) 
@ResponseBody 
public String postAppUser(@RequestParam String eg) throws JsonProcessingException { 
     return "ok yes ";   
} 

Ich habe versucht, CORS-Filter hinzuzufügen, aber nichts scheint zu funktionieren. Nicht sicher, ob es von der App abgeholt wird. Ich meine, wenn es im Config-Pfad ist.

import java.io.IOException;  
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.stereotype.Component; 

@Component 
public class CORSFilter implements Filter { 

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest request = (HttpServletRequest) req; 
     HttpServletResponse response = (HttpServletResponse) res; 

     response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); 
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me"); 

     chain.doFilter(req, res); 
    } 

    public void init(FilterConfig filterConfig) { 
    } 

    public void destroy() { 
    } 
} 

Die web.xml sieht aus wie

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 


    <filter> 
     <filter-name>cors</filter-name> 
     <filter-class>com.myApp.security.CORSFilter</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>cors</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

</web-app> 

Dies ist, was die HTTP-Aufruf aussieht. Es enthält keine zulässigen Zugriffsheader

Request URL:http://localhost:8081/appUser 
Request Method:GET 
Status Code:404 Not Found 
Remote Address:[::1]:8081 
Response Headers 
view source 
Content-Length:965 
Content-Type:text/html;charset=utf-8 
Date:Sun, 19 Jun 2016 03:43:40 GMT 
Server:Apache-Coyote/1.1 
Request Headers 
view source 
Accept:application/json, text/plain, */* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Cache-Control:no-cache 
Connection:keep-alive 
Host:localhost:8081 
Origin:http://localhost:63342 

Ich würde wirklich schätzen, wenn jemand mich führen könnte. Ich steckte seit den letzten 5 Tagen fest, das scheint nicht zu funktionieren. Wenn Sie auf einen Blog/Tutorial/Video verweisen könnten, die ich beziehen kann

Antwort

0

CORS zu aktivieren, mit

@CrossOrigin(origins = "http://localhost:63342") 

Werfen Sie einen Blick auf die in meiner Anwendung Spring documentation of CORS

UPDATE

Ich hatte das gleiche Problem Ihre Anfrage Methode mit Anmerkungen versehen , entfernt CrossOrigin Anmerkung in Anfrage meth od unten und in Winkel Service js

delete $http.defaults.headers.common['X-Requested-With']; 

und

return $http({ 
       method: 'POST', 
       url: '/example'/ + '?eg=' + tempString 
      }); 
+0

versucht, die hinzugefügt. Funktioniert nicht – user3342812

+0

Ist dies, weil meine HTTP-Anfrage nicht den erforderlichen Ursprungsheader enthält? – user3342812