什麼是跨域?
跨域,指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略(所謂同源是指,域名,協議,端口均相同)造成的,是瀏覽器對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
中配置一下 跨域過濾器就可以解決跨域問題了,是不是很方便呢~~~