Erro de CORS em Spring + React?
Estou tento problemas com CORS. possuo uma api que requer um token, ao enviar no header pelo axios recebo o erro. api e o app web estão rodando em localhost. Já tentei enviando o rogin pelo cliente. Pertindo todas as origens e a anotação @CrossOrigin. Alguem já passou por isso?
segue o erro:
origin 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.
---Resolvido------------------------------------------------------------------------
apos a dica do leandrodaher, resolvi testar no firefox e vi um erro diferente:
falta cabeçalho 'Access-Control-Allow-Origin'
E pesquisando encontrei essa discução: https://pt.stackoverflow.com/questions/422227/has-been-blocked-by-cors-policy-no-access-control-allow-origin
A solução que funcionou foi implementar o CorsFilter, um filter semelhante ao do JSF. em Access-Control-Allow-Origin espefifiquei o localhost:3000, e adicionei meus heders tambem. Segue o exemplo de implementação.
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
- @author emanuel
*/
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Methods", "ACL, CANCELUPLOAD, CHECKIN, CHECKOUT, COPY, DELETE, GET, HEAD, LOCK, MKCALENDAR, MKCOL, MOVE, OPTIONS, POST, PROPFIND, PROPPATCH, PUT, REPORT, SEARCH, UNCHECKOUT, UNLOCK, UPDATE, VERSION-CONTROL"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Key, Authorization"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } public void init(FilterConfig filterConfig) { // not needed } public void destroy() { // not needed }
}