前言
在日常项目可能会出现前端解决跨域失效的问题,或者前后端分离时多个前端系统同时访问同一服务时进行统一的跨域处理,这时候就需要协助前端在后端完成对请求跨域问题的解决。
方法一 继承WebMvcConfigurerAdapter
首先这里的WebMvcConfigurerAdapter主要功能是在spring-mvc中,针对http请求统一性的@bean式的配置处理,这里只提取了跨域问题的解决,这个类还可以诸如添加拦截器,配置ViewController,等。直接上代码
/**
* <p>Title: CorsConfig .java</p>
* <p>Description:跨域问题解决 </p>
* @author youthMing
* @date 2020年5月18日
*/
@SuppressWarnings("deprecation")
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
方法二 添加过滤器(较为直接且有效)
直接添加过滤器,把所有的请求过滤。对于效率的影响因为只进行了响应头的设置影响较小 。
/**
* <p>Title: ConfigInterceptor.java</p>
* <p>Description:跨域过滤器,解决跨域问题 </p>
* @author youthMing
* @date 2020年5月21日
*/
@Component
public class CorsFilter implements Filter {
final static org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(CorsFilter.class);
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token");//这里“Access-Token”是我要传到后台的内容key
response.setHeader("Access-Control-Expose-Headers", "*");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {
}
public void destroy() {
}
}
亲测两种方法皆可解决!