现在都讲究前后台分离,所以前台和后台都单独部署,域名也是独立的域名,这就出现了跨域的问题。
跨域可以通过提供jsonp接口解决,这里介绍下用filter来允许跨域
1、allowDomain里加入自己允许跨域调用的域名
package com.**.filter;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* cros filter
*
*/
@Component
public class CrosFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
String[] allowDomain = {"http://localhost", "http://localhost:3008", "http://**.joosd.com"};
Set allowedOrigins = new HashSet(Arrays.asList(allowDomain));
String originHeader = ((HttpServletRequest) servletRequest).getHeader("Origin");
if (allowedOrigins.contains(originHeader)) {
response.setHeader("Access-Control-Allow-Origin", originHeader);
}
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, " +
"Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,token");
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
2、web.xml配置
<!-- 配置跨域 -->
<filter>
<filter-name>cors</filter-name>
<filter-class>com.*.filter.CrosFilter</filter-class>
</filter>
<!-- 需要配置跨域的path -->
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/yourPath/*</url-pattern>
</filter-mapping>
这样,你配置的这几个域名, String[] allowDomain = {"http://localhost", "http://localhost:3008", "http://**.joosd.com"}; ,就可以访问这个path(/yourPath/*)的接口了