在Visual Studio代码中使用STS调用java api构建并从角度调用spring MVC,我们收到此错误:
从'null'访问'http://localhost:8081/HelloWorld/list'的XMLHttpRequest已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头。
可能未处理的拒绝:{“data”:null,“status”: - 1,“config”:{“method”:“GET”,“transformRequest”:[null],“transformResponse”:[null],“jsonpCallbackParam” :“callback”,“url”:“http://localhost:8081/HelloWorld/list”,“headers”:{“Accept”:“application / json,text / plain,/”}},“statusText”:“”,“xhrStatus”:“error” }
让我们考虑你的角度应用程序在端口号9000上运行。现在,如果你想调用你的Spring API(在不同的端口运行),那么你需要在控制器上添加下面的注释。
@CrossOrigin(origins = "http://localhost:9000")
如果适合您或其他方式,请告诉我。
spring3co燃烧filter.Java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Spring3CorsFilter {}
spring3co燃烧filter handler interceptor.Java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class Spring3CorsFilterHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
// Test if the controller-method is annotated with @Spring3CORSFilter
Spring3CorsFilter filter = handlerMethod.getMethod().getAnnotation(Spring3CorsFilter.class);
if (filter != null ) {
// ... do the filtering
response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
}
}
return true;
}
}
controller.Java
@Spring3CorsFilter
@ResponseBody
@RequestMapping(value = "/search", method = RequestMethod.GET,headers="Accept=application/json")
public List <SuiviCommande> getSearch() int L, @RequestBody SuiviCommandeDto A) {
....
}