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
}
}