1、需求和分析:
- 需求:
项目中存在跨域问题,导致无法访问,需要我们去解决这个跨域的问题。
- 分析:
其实跨域的根本原因就是,服务端针对每次请求的响应中缺少对来源与请求方法的允许,需要我们在响应的请求头中去增加对应的响应。
2、实现思路:
作者的思路是这样的,如果每次在每个Controller响应的时候都手动的去加上响应头的话,那岂不是代码非常的冗余,所以作者就定义了一个过滤器,用以对每次请求的响应加上对应的请求头,并将此过滤器注册到SpringBoot容器中。(如果使用nginx进行进行反向代理也是一个解决跨域的方法)
Filter:
public class CrosFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "*");
chain.doFilter(request, response);
}
}
注册到SpringBoot容器中
@Configuration
public class MyFilterConfig {
@Bean
public FilterRegistrationBean registrationFilter(){
FilterRegistrationBean<Filter> registrationFilter = new FilterRegistrationBean<>();
List<String> urlPatterns = new ArrayList<>();
urlPatterns.add("/*");
registrationFilter.setUrlPatterns(urlPatterns);
registrationFilter.setFilter(new CrosFilter());
return registrationFilter;
}
}