什么是跨域?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略(所谓同源是指,域名,协议,端口均相同)造成的,是浏览器对JavaScript施加的安全限制。
我们来看一下什么情况属于跨域
请求地址 | 形式 | 结果 |
---|---|---|
study.cn/json/jsonp/jsonp.html | ||
http://study.cn/test/a.html | 同一域名,不同文件夹 | 成功 |
http://study.cn/json/jsonp/jsonp.html | 同一域名,统一文件夹 | 成功 |
http://a.study.cn/json/jsonp/jsonp.html | 不同域名,文件路径相同 | 失败 |
http://study.cn:8080/json/jsonp/jsonp.html | 同一域名,不同端口 | 失败 |
https://study.cn/json/jsonp/jsonp.html | 同一域名,不同协议 | 失败 |
解决跨域的方式有很多 例如JSONP 等等,今天我们说一下配置过滤器的方式解决跨域问题
public class SimpleCORSFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
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");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers"," Origin, X-Requested-With, Content-Type, Accept");
chain.doFilter(req, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
<filter>
<filter-name>cors</filter-name>
<filter-class>com.ys.portal.web.filter.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/portal/api/*</url-pattern>
<url-pattern>/website/tools/fileUpload/*</url-pattern>
</filter-mapping>
然后只需要在我们的web.xml
中配置一下 跨域过滤器就可以解决跨域问题了,是不是很方便呢~~~