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 ...
Ich verstehe Ihre Antwort nicht ... CORS-Filter ist Server-seitig, also wie ein Client (Mobile App) einen gewährten Ursprung bereitstellen kann? – DavidPi
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. –
Super! Ich werde es versuchen ! Merci;) – DavidPi