2016-07-13 2 views
1

何か助けてください。CORSをTomcat 8.0.30で有効にする

新しく導入したTomcat 8.0.30のCORSの問題に直面しています。私は以下のエラーが発生し続ける。 APIサーバーアドレスとして127.0.0.1を使用しています。192.168.1.100はHTTPサーバーのアドレスです。

「Access-Control-Allow-Origin」ヘッダーは、要求されたリソースに存在しません。 Origin '_http://192.168.1.100:8999'はアクセスできません。応答はHTTPステータスコード403を持っていました。

Tomcat web.xmlの下にcorsフィルタとweb.xmlが追加されましたが、ここでも何も魔法は起こりません。エラー。 init-paramで同じ最小値と最大値の両方を試しました。

私は残りのAPIフレームワークとしてSpring 4を使用しています。これ以上の設定は、プロジェクトコーディング部で行う必要がありますか?ここで

は、私がこれまで行ってきた手順は次のとおりです。

  • は、web.xmlの下の完全な設定をCORSフィルタを追加
  • を働いていない、マニュアルに従って、web.xmlの下mininal設定をCORSフィルタを追加します、うまくいきません。
  • まだ

任意の提案を働いていない、http://software.dzhuvinov.com/cors-filter.htmlからCORSフィルタを使用しようとしましたか?

network response


資格情報を削除 、私はすべて動作していない、127.0.0.1,192.168.1.100に、*にcors.allowed.originsを変更しようとしたweb.xml構成 を追加し、 、8.0から8.5へのTomcatのバージョンを変更し、ヴィシャルによって提案

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>http://192.168.1.100</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

MAXAGEまだ同じ問題

XMLHttpRequest cannot load http://127.0.0.1:8080/leyutech-framework-gurunwanfeng/api/ad/getAdInfoByAdType.html?adType=0. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.1.100:8080' is therefore not allowed access. The response had HTTP status code 403. 
+0

は、少なくともあなたはweb.xmlに追加設定を提供。私はあなたにTomcatのドキュメントが正しいことを保証することができます、私はそれを自分で使用しました。しかし、それを見逃すことは非常に簡単です。 – Gimby

+0

あなたがこれを探しているかどうかわかりません:http://tomcat.apache.org/tomcat-8.0-doc/config/filter.html#CORS_Filter – Azim

+0

こんにちはGimbyとAzim、はい、私はドキュメントから追加しました。最小限の構成と高度な両方が動作していません –

答えて

1

私はこの問題を達成するために、カスタムフィルタを使用しました、私は公式TomcatのCORSフィルタである理由は分かりません私の場合は動作しません、誰もがこれの背後に論理を提案することができます、私はこれを試して喜んでいる。

Original Post from Tobia

コードは、上記のリンクから変更されています。現在のプロジェクトの下で

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; 

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 destroy() { 
     // TODO Auto-generated method stub 

    } 

    public void init(FilterConfig arg0) throws ServletException { 
     // TODO Auto-generated method stub 

    } 

} 

web.xml構成

<filter> 
    <filter-name>SimpleCORSFilter</filter-name> 
    <filter-class>com.example.util.SimpleCORSFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SimpleCORSFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

これは、CORSが機能するための解決策の回避策です。 –

1

この問題が1回発生し、私はJetty Webアプリケーションのカスタムハンドラを開発しました。

多分あなたを助けることができます。

CORSHandler.hava

import java.io.IOException; 

import org.eclipse.jetty.server.handler.HandlerWrapper; 
import org.eclipse.jetty.server.Request; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.ServletException; 

public class CORSHandler extends HandlerWrapper { 

    public static final String ACCESS_CONTROL_ALLOW_ORIGIN = "Access-Control-Allow-Origin"; 
    public static final String ACCESS_CONTROL_ALLOW_HEADERS = "Access-Control-Allow-Headers"; 
    public static final String ACCESS_CONTROL_ALLOW_METHODS = "Access-Control-Allow-Methods"; 

    public CORSHandler() { 
     super(); 
    } 

    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException 
    { 
     // Allow Cross-site HTTP requests (CORS) 
     response.addHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*"); 

     // Accept Content-Type in header 
     response.addHeader(ACCESS_CONTROL_ALLOW_HEADERS, "content-type"); 

     // Accept GET, POST, PUT and DELETE methods 
     response.addHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET,POST,PUT,DELETE"); 

     if (_handler!=null && isStarted()) 
     { 
      _handler.handle(target,baseRequest, request, response); 
     } 
    } 
} 

Starter.java

import java.io.IOException; 
import java.util.logging.Logger; 
import java.util.logging.FileHandler; 
import java.util.logging.Level; 
import java.util.logging.SimpleFormatter; 

import org.apache.cxf.transport.servlet.CXFServlet; 
import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.servlet.ServletContextHandler; 
import org.eclipse.jetty.servlet.ServletHolder; 
import org.springframework.web.context.ContextLoaderListener; 
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; 
import org.eclipse.jetty.server.handler.HandlerWrapper; 

import com.example.config.AppConfig; 
import com.example.handlers.CORSHandler; 

import com.example.properties.*; 

public class Starter { 

    public static void main(final String[] args) throws Exception { 

     Server server = new Server(8080); 

     // Register and map the dispatcher servlet 
     final ServletHolder servletHolder = new ServletHolder(new CXFServlet()); 

     HandlerWrapper wrapper = new CORSHandler(); 
     final ServletContextHandler context = new ServletContextHandler(); 

     context.setContextPath("/"); 
     context.addServlet(servletHolder, "/rest/*");  
     context.addEventListener(new ContextLoaderListener()); 

     context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName()); 
     context.setInitParameter("contextConfigLocation", AppConfig.class.getName()); 

     wrapper.setHandler(context); 
     server.setHandler(wrapper); 

     server.start(); 
     server.join(); 
    } 
} 
+0

ありがとう、私は今私のケースでカスタムフィルタを使用している、私は元のが動作していない理由は考えていない、私はhttp://stackoverflow.com/questions/24386712/tomcat-cors-filterを使用しました。あなたの投稿は間違いなく素晴らしいギルドです。 –

関連する問題