1、定義一個類繼承Filterhtml
package com.zdnst.common.infra.filter.corsFilter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Created by yongqin.zhong * Date 7/14/2017.3:27 PM */ public class SimpleCORSFilter implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // 跨域 String origin = httpRequest.getHeader("Origin"); if (origin == null) { httpResponse.setHeader("Access-Control-Allow-Origin", "*"); } else { httpResponse.setHeader("Access-Control-Allow-Origin", origin); } httpResponse.setHeader("Access-Control-Allow-Headers", "Origin, x-requested-with, Content-Type, Accept,X-Cookie"); httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); httpResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS,DELETE"); if ( httpRequest.getMethod().equals("OPTIONS") ) { httpResponse.setStatus(HttpServletResponse.SC_OK); return; } chain.doFilter(request, response); } @Override public void init(FilterConfig arg0) throws ServletException { } }
2、在web.xml的filter最頂部位置增長如下配置java
<filter> <filter-name>cors</filter-name> <filter-class>com.zdnst.common.infra.filter.corsFilter.SimpleCORSFilter</filter-class> </filter> <filter-mapping> <filter-name>cors</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
便可;nginx
總結:在java後臺增長了這樣head頭配置後,頁面請求會自動重複調用兩次接口,一次是預調用;「OPTIONS」狀態的;web
nginx跨域問題
例子:訪問http://10.0.0.10/ 須要能實現跨域跨域
操做:
http://10.0.0.10/項目是部署在tomcat裏面,tomcat跨域暫時還不會,按照網上的方法操做也沒成功
只有用Nginx作個代理,解決跨域問題了!tomcat
一、將www.tangxiaoyue.com域名指向http://10.0.0.11/。只有在域名上設置才能實現跨域。(10.0.0.11是Nginx的IP)
二、在nginx上的配置文件tang.conf進行設置cookie
配置文件例如:app
server { listen 80; server_name tangxiaoyue.com; if ( $http_user_agent = "Mozilla/5.0"){ return 403; } location / { add_header 'Access-Control-Allow-Origin' '*'; # # Om nom nom cookies # add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; # # Custom headers and headers various browsers *should* be OK with but aren't # add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; proxy_pass http://10.0.0.10/; proxy_set_header Host "tangxiaoyue"; } }