方法一、spring boot中只用在Controller類上添加一個“@CrossOrigin“注解就可以實現對當前controller 的跨域 訪問了,當然這個標簽也可以加到方法上。
@CrossOrigin(origins = "http://192.168.1.10:8080", maxAge = 3600) @RequestMapping("rest_index") @RestController public class IndexController{
}
其他controller類繼承以上這個類就可以解決跨域問題。
注意:“@CrossOrigin“注解要求jdk1.8以上版本
方法二、基於WebMvcConfigurerAdapter配置加入Cors的跨域(常用)
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class CorsConfig extends WebMvcConfigurerAdapter { /** * 就是注冊的過程,注冊Cors協議的內容。 * 如: Cors協議支持哪些請求URL,支持哪些請求類型,請求時處理的超時時長是什么等。 */ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 所有的當前站點的請求地址,都支持跨域訪問 .allowedOriginsPatterns("*") // 所有的外部域都可跨域訪問。 如果是localhost則很難配置,因為在跨域請求的時候,外部域的解析可能是localhost、127.0.0.1、主機名(注意:SpringBoot2.4.0之后【allowedOriginsPatterns】代替【allowedOrigins】) .allowCredentials(true) // 是否支持跨域用戶憑證 .allowedMethods("GET", "POST", "DELETE", "PUT") // 當前站點支持的跨域請求類型是什么 .maxAge(3600); // 超時時長設置為1小時。 時間單位是秒 } }
方法三、創建一個filter(過濾器)解決跨域(也支持springMVC)
@Component public class SimpleCORSFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, HEAD"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "access-control-allow-origin, authority, content-type, version-info, X-Requested-With"); chain.doFilter(req, res); } public void init(FilterConfig filterConfig) {} public void destroy() {} }
四、使用nginx反向代理服務器解決跨域問題