hope all are doing great.
I was doing a project that registered a client account. However, it faces CORS policy issues:
Access to XMLHttpRequest at 'http://localhost:8085/client/sign-up' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
signup-client.component.ts:33
POST http://localhost:8085/client/sign-up net::ERR_FAILED
Here is my Angular auth.service.ts
import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';
const BASIC_URL = 'http://localhost:8085/';
@Injectable({
providedIn: 'root'
})
export class AuthService {
constructor(private http: HttpClient) { }
registerClient(signupRequestDTO: any): Observable<any> {
return this.http.post(BASIC_URL + "client/sign-up", signupRequestDTO);
}
registerCompany(signupRequestDTO: any): Observable<any> {
return this.http.post(BASIC_URL + "company/sign-up", signupRequestDTO);
}
private handleError(error: HttpErrorResponse) {
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong.
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
// Return an observable with a user-facing error message.
return throwError('Something bad happened; please try again later.');
}
}
And here is my Springboot SimpleCorsFilter
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
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 java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter {
@Value("${app.client.url}")
private String clientAppUrl = " ";
public SimpleCorsFilter() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
String originHeader = request.getHeader("Origin");
// Allow requests from the actual Origin value if it's not null
if (originHeader != null) {
response.setHeader("Access-Control-Allow-Origin", originHeader);
}
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "*");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
Pls let me know what do you think. Any suggestion will be helpful. Thanks
I expect to send the API success and will see the new client in my MySQL DB