Tenter d'accéder à un serveur Rest (Java) dans un domaine différent d'un client Angular entraînera une erreur en raison d'un problème CORS. Les contre-mesures sont décrites ci-dessous. (Le traitement de l'API Rest côté serveur est le même que d'habitude, il sera donc omis.)
Traitement pour demander au serveur côté Angular
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class ClientService {
url = "http://XXXXX:XXXX/XXXXX"; //Destination d'accès
returnModel : ReturnModel; //Valeur renvoyée par le serveur
//constructeur
constructor(private http: HttpClient) {}
//Méthode d'envoi
request(): void {
//En-tête HTTP(Accès avec CORS-Control-Allow-Spécifiez l'origine)
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin': '*',
})
};
//Données de transmission
const data = new HttpParam({
fromObject: {
value: '1000"
}
});
//POST au serveur
this.http.post<ReturnModel>(this.url , data, httpOptions).subscribe(h => this.returnModel = h);
}
}
Filtre de servlet côté serveur
package sample.filter;
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.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
//Filtre de servlet
@WebFilter(filterName = "CorsFilter", urlPatterns = { "/*" })
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig config) {
}
//Filtration
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (response instanceof HttpServletResponse) {
//Spécifiez Headerwo pour la prise en charge CORS comme suit
HttpServletResponse http = (HttpServletResponse) response;
http.addHeader("Access-Control-Allow-Origin", "*");
http.addHeader("Access-Control-Allow-Headers", "*");
http.addHeader("Access-Control-Allow-Credentials", "true");
http.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
Recommended Posts