Narazil jsem dneska na problém při AJAxu z front endu. Nemohu dostat ten access token, když mám server na localhostu evidentně... hlási mi to CORS...
Nakonec jsem to částečně vyřešil tímto requestem pomocí jQuery.
$.ajax({
url: 'http://localhost:8080/oauth/token',
"async": true,
crossDomain: true,
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=UTF-8',
headers: {"Authorization": "Basic bXktY2xpZW50Om15LXNlY3JldA==", "Content-Type": "application/x-www-form-urlencoded"},
data: {
"password": "George",
"username": "pleb@seznam.cz",
"grant_type": "password"
},
complete: function(result) {
alert(result + " COMPLETE ");
},
success: function(result) {
alert(result + " OK!");
},
error: function(result) {
alert(result + " CHYBA");
},
});
return true;
}
Nicméně aby to fungovalo, tak jsem musel ještě udělat tuto třídu na straně serveru
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsConfig implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
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-Alow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Max-Age","3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, content-type");
if("OPTIONS".equalsIgnoreCase(request.getMethod())){
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
}
}
Což je zřejmě nebezpečné takto to ponechat, že? Napadlo by Vás nějaké řešení, jak tohle vyřešit? Abych se dostal k tomu oauth2 tokenu bez toho, abych musel dělat ten filtr?