public class MobileDeviceTypeDetectionFilter implements Filter { // 自定義過濾器 @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { final HttpServletRequest httpRequest = (HttpServletRequest) request; final HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setHeader("Access-Control-Allow-Origin", "*"); // 請求域名 httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");// 請求方法 httpResponse.setHeader("Access-Control-Max-Age", "3600"); httpResponse.setHeader("Access-Control-Allow-Headers", "*"); // 允許的請求頭 // 瀏覽器默認會發起異常 OPTIONS 的請求方式 這個時候我們通過過濾器直接攔截返回200后就可以解決跨越問題 if ("OPTIONS" == (httpRequest.getMethod())) { httpResponse.setStatus(HttpServletResponse.SC_OK); } chain.doFilter(httpRequest, httpResponse); } @Override public void init(FilterConfig arg0) throws ServletException { } }
