2017-08-30 1 views
1

Ich habe eine Webapplikation entwickelt mit Angular 2 und eine Rest-API mit Springboot entwickelt.Spring API von Webapp und mobile App

Mme Michu ---> WebApp (Angular 2 - Known origin) ---> API (Springboot CORS) 

Ich konfigurierte CORS zwischen der Webanwendung und der API und es funktioniert gut.

Hier ist, wie mein CORSFilter

implementiert
@Order(Ordered.HIGHEST_PRECEDENCE) 
public class SimpleCORSFilter implements Filter{ 

public SimpleCORSFilter() { 
    super(); 
} 

@Autowired 
private Environment environment; 

private String[] acao; 

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

    acao = environment.getProperty("access-control-allow-origin").split(","); 

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

    String origin = request.getHeader("Origin"); 

    response.setHeader("Access-Control-Allow-Origin", Arrays.asList(acao).contains(origin)?origin:""); 

    // without this header jquery.ajax calls returns 401 even after successful login and SSESSIONID being succesfully stored. 
    response.setHeader("Access-Control-Allow-Credentials", "true"); 

    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); 
    response.setHeader("Access-Control-Max-Age", "3600"); 
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, Origin, Content-Type, Version"); 
    response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, Authorization, Origin, Content-Type"); 


    if(!request.getMethod().equals("OPTIONS")) { 
     chain.doFilter(request, response); 
    } 
} 

@Override 
public void destroy() { 

} 

@Override 
public void init(FilterConfig filterConfig) throws ServletException { 
    acao = environment.getProperty("access-control-allow-origin").split(","); 
} 

}

Das Problem ist, dass ich eine neue mobile Anwendung benötigen (mit ionischen entwickelt) mit der API zu interagieren.

Blockiert die CORS-Richtlinie die Anfrage von der mobilen App? Wie kann ich Anfragen von der mobilen Anwendung autorisieren, da ich die Herkunft der mobilen App nicht kennen kann?

Jede Beratung ist willkommen ...

Antwort

1

Der Ursprung ist die Domäne die Anforderung an die api Ausgabe, wenn Domain Ihre Webapp der example.com ist, werden die Anfragen haben example.com als Ursprung. Wenn eine Ressource aufgrund des Ursprungs blockiert wird, blockiert ein Client-seitiger Sicherheitsmechanismus die Antwort (der Server ist sich dessen nicht bewusst). Sie wissen nicht, wie Ionic funktioniert, aber ich denke nicht, dass es diese Art von Mechanismus implementiert (außer für progressive Web-Anwendungen vielleicht).

Der Server ist verantwortlich für die Meldung der erlaubten Herkunft. Der Webbrowser ist dafür verantwortlich, dass Anforderungen nur von zulässigen Domänen gesendet werden.

+0

Ich verstehe Ihre Antwort nicht ... CORS-Filter ist Server-seitig, also wie ein Client (Mobile App) einen gewährten Ursprung bereitstellen kann? – DavidPi

+0

CORS-Header werden von Ihrem Server gesendet, es ist richtig, aber es ist nicht der Server, der blockiert, wenn der Ursprung nicht mit dem Server übereinstimmt. Führen Sie den Test mit unterschiedlicher Herkunft durch und Sie werden feststellen, dass der Server eine Antwort zurücksendet, die vom Client (Ihrem Browser) blockiert wird. Der Server ist verantwortlich für die Meldung der erlaubten Herkunft. Der Webbrowser ist dafür verantwortlich, dass Anforderungen nur von zulässigen Domänen gesendet werden. –

+1

Super! Ich werde es versuchen ! Merci;) – DavidPi