方法1:使用 @CrossOrigin 注解,可以加在類上 也可以加在方法上;
方法2:添加全局配置 (新增一個配置類)
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") .maxAge(3600) .allowCredentials(true); } }
方法3:自定義Filter攔截器
/** * 跨域請求攔截器 */ @Component public class CorsFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { /* 自己的代碼 */ System.out.println("CorsFilter init..."); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("CorsFilter doFilter..."); HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; //允許請求攜帶認證信息(cookie) res.setHeader("Access-Control-Allow-Credentials", "true"); //指定允許其他域名訪問 res.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin")); //允許請求的類型 res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH"); //允許的請求頭字段 res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); //設置預檢請求的有效期 //瀏覽器同源策略:出於安全考慮,瀏覽器限制跨域的http請求。怎樣限制呢?通過發送兩次請求:預檢請求、用戶請求。 //1、預檢請求作用:獲知服務器是否允許該跨域請求:如果允許,才發起第二次真實的請求;如果不允許,則攔截第二次請求 //2、單位:s,在此期間不用發送預檢請求。 //3、若為0:表示每次請求都發送預檢請求,每個ajax請求之前都會先發送預檢請求。 res.setHeader("Access-Control-Max-Age", "3600"); //OPTIONS Method表示瀏覽器發送的預檢請求。 if ("OPTIONS".equalsIgnoreCase(req.getMethod())) { res.setStatus(HttpServletResponse.SC_OK); } else { /* 自己的代碼 */ chain.doFilter(req, res); } } @Override public void destroy() { /* 自己的代碼 */ System.out.println("CorsFilter destroy..."); } }
參考自:https://blog.csdn.net/rongtaoup/article/details/89497471
另外,我使用maven打jar包時,java -jar ... 總是啟動失敗,解壓查看發現沒有resources下的配置文件,原因是:resources 寫錯了,少了一個s。(尷尬ing,同時好奇為什么之前是可以的?)
祝我們乘風破浪
野蠻生長