過濾器解決跨域問題

什麼是跨域?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章