2017-02-05 6 views
1

フロントエンドで角度jを使用し、バックエンドでjava hibernateを使用しています。私のウェブサイトは数日前に完璧に動作しましたが、最近、テーブル構造を少し変更しました。これらの変更の後、私は角度jsを統合しようとしたとき、私は次のエラーメッセージに直面しました。プリフライト要求への応答がアクセス制御チェックに合格しません:いいえ 'Access-Control-Allow-Origin'ヘッダーが存在します。サーバーエラー

XMLHttpRequestはlocalhost:8080/SignInMainServletをロードできません。プリフライト要求への応答がアクセス制御チェックを通過しない:要求されたリソースに「アクセス制御許可」がない。したがって、Origin 'localhost:3000'はアクセスが許可されていません。

プリフライトリクエストとヘッダーのアクセス許可について少しお読みになりましたが、すべての解決策が失敗しました。

私は最初にページをロードしたり、後でリフレッシュするときにいくつかのget要求を持っていて、完全に正常に動作しているインデックスページを持っています。しかし、私がSignInMainServletの投稿要求を呼び出すとすぐに、エラーがポップアップします。この後、私のページをリフレッシュすると、get要求のどれも動作せず、同じエラーが表示されます。ここで

は私のポスト要求

return $http({ 
      method: 'POST', 
      url: 'http://localhost:8080/SignInMainServlet', 
      data: $httpParamSerializerJQLike({ 
       login_source: source, 
       accessToken: code, 
       referrer_code: referral_id 
      }), 
      headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8' } 
     }); 

され、彼の要求のためのサーバ側は次のとおりです。リクエストを送信中に

String referrer_code=request.getParameter("referrer_code"); 
String login_source=request.getParameter("login_source"); 
String accessToken=request.getParameter("accessToken"); 

SignInMainManager m = new SignInMainManager(accessToken, referrer_code, login_source,REFERRAL_CODE_COUNT); 
String result = m.signIn(); 


response.setContentType("text/html"); 

response.addHeader("Access-Control-Allow-Origin","*"); 
response.addHeader("Access-Control-Allow-Methods"," GET, POST, OPTIONS"); 
response.addHeader("Access-Control-Allow-Headers","Content-Type"); 

PrintWriter out = response.getWriter(); 


out.println(result); 
out.close();//closing the stream 

私は、ネットワークを監視し、次を取得します:

一般

リクエストURL:localhostを:8080/SignInMainServlet 要求メソッド:OPTIONS ステータスコード:200 OKリモートアドレス:127.0.0.1:8080

レスポンスヘッダ

許可:GET、HEAD、POST、TRACE、 OPTIONS のContent-Length:0 日:日、2017年2月5日10時49分56秒GMT サーバー:桟橋(8.1.14.v20131031)

リクエストヘッダ

受け入れ:/ 受け入れエンコード:gzipでは、収縮、SDCH、BR のAccept-言語:EN-GB、EN-US; Q = 0.8、EN; Q = 0.6 アクセス制御リクエスト・ヘッダ:許可 アクセス制御リクエスト・メソッド:POST 接続:キープアライブ ホスト:localhostを:8080 原産地:localhostを:3000 リファラー:localhostを:3000/ のUser-Agent:Mozillaの/ 5.0(X11; Linux x86_64)AppleWebKit/537.36(GeckoのようなKHTML)Chrome/55.0.2883.87 Safari/537.36

+0

http://stackoverflow.com/questions/16037558/how-to-add-access-control-allow-origin-to-jetty-server/16043524#で概説されているアプローチを試したことがありますか? 16043524 – sideshowbarker

答えて

0

私はこのフィルタを作成しましたが、今はすべての要求に対応しています。

package com.your.package; 

import java.io.IOException; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletResponse;  

@WebFilter(asyncSupported = true, urlPatterns = { "/*" }) 
public class Filter implements javax.servlet.Filter { 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     ((HttpServletResponse) response).addHeader("Access-Control-Allow-Origin", "*"); 
     ((HttpServletResponse) response).addHeader("Access-Control-Allow-Methods", "GET, OPTIONS, HEAD, PUT, POST"); 
     ((HttpServletResponse) response).addHeader("Access-Control-Allow-Headers", "Content-Type"); 
     ((HttpServletResponse) response).addHeader("Access-Control-Max-Age", "86400"); 
     // pass the request along the filter chain 
     chain.doFilter(request, response); 
    } 

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

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 
    } 
} 

web.xmlを使用している場合は、これに従うことができます。 https://amodernstory.com/2014/12/27/using-cors-headers-with-java-example/

関連する問題