java後臺實現跨域解決辦法

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跨域設置

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";
}
}

複製代碼

相關文章
相關標籤/搜索