Der Versuch, auf einen Rest-Server (Java) in einer anderen Domäne als ein Angular-Client zuzugreifen, führt aufgrund eines CORS-Problems zu einem Fehler. Die Gegenmaßnahmen werden nachfolgend beschrieben. (Die Rest-API-Verarbeitung auf der Serverseite ist dieselbe wie üblich, daher wird sie weggelassen.)
Verarbeitung zur Anforderung an den Server auf der Winkelseite
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"; //Zugriffsziel
returnModel : ReturnModel; //Rückgabewert vom Server
//Konstrukteur
constructor(private http: HttpClient) {}
//Sendemethode
request(): void {
//HTTP-Header(Zugriff mit CORS-Control-Allow-Geben Sie den Ursprung an)
const httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin': '*',
})
};
//Übertragungsdaten
const data = new HttpParam({
fromObject: {
value: '1000"
}
});
//POST an Server
this.http.post<ReturnModel>(this.url , data, httpOptions).subscribe(h => this.returnModel = h);
}
}
Serverseitiger Servlet-Filter
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;
//Servlet-Filter
@WebFilter(filterName = "CorsFilter", urlPatterns = { "/*" })
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig config) {
}
//Filtern
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (response instanceof HttpServletResponse) {
//Geben Sie Headerwo für die CORS-Unterstützung wie folgt an
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