springMVC-跨域问题
springMVC中,前端访问restful服务时,经常会有跨域问题。目前本人用到过的解决方案有两种,一种是利用springframework的UrlBasedCorsConfigurationSource类进行跨域设置,另一种是写filter拦截http请求,在请求头中进行跨域的设置,代码写法如下。
1. 利用springframework的UrlBasedCorsConfigurationSource类
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/**", config);
final FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
bean.setOrder(0);
return bean;
}
}
2.filter拦截http请求,在请求头中进行跨域的设置
i.编写filter
public class SimpleCORSFilter implements Filter {
private Logger logger = LoggerFactory.getLogger(SimpleCORSFilter.class);
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
String origin = request.getHeader("Origin");
if (origin != null) {
response.setHeader("Access-Control-Allow-Origin", origin);
}
response.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,Content-Type");
response.setHeader("Access-Control-Allow-Credentials", "true");
if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpStatus.OK.value());
} else {
chain.doFilter(req, res);
}
}
public void init(FilterConfig filterConfig) {
}
public void destroy() {
}
}
ii.在webMvcConfig中注册该filter
@Configuration
//@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
public FilterRegistrationBean simpleCORSFilter() {
SimpleCORSFilter simpleCORSFilter = new SimpleCORSFilter();
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(simpleCORSFilter);
List<String> urlPatterns = Lists.newArrayList("/*");
filterRegistrationBean.setUrlPatterns(urlPatterns);
filterRegistrationBean.setOrder(-100);
return filterRegistrationBean;
}
}
浙公网安备 33010602011771号