當我們用js請求RESTful Web Service的時候,通常會出現跨域無法訪問的問題,也就是無法正常得到我們要的值。jsonp是個解決問題的方法。但是,我們希望訪問RESTful Web Service就像一般的Ajax方法一樣,不用每個都去搞一個jsonp和callback。這就需要我們在服務端進行一些設置,下面我用一個簡單的Filter來進行說明,其他比較復雜的情況根據自己的需求進行改動。
import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import org.sPRingframework.stereotype.Component;public class SimpleCORSFilter implements Filter {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", "x-requested-with");chain.doFilter(req, res);}public void init(FilterConfig filterConfig) {}public void destroy() {}}
Note:
- Access-Control-Allow-Origin 為允許哪些Origin發起跨域請求. 這里設置為"*"表示允許所有,通常設置為所有并不安全,最好指定一下。
- Access-Control-Allow-Methods 為允許請求的方法.
- Access-Control-Max-Age 表明在多少秒內,不需要再發送預檢驗請求,可以緩存該結果
- Access-Control-Allow-Headers 表明它允許跨域請求包含content-type頭,這里設置的x-requested-with ,表示ajax請求
如果大家有什么更好的方法,求指點
新聞熱點
疑難解答