2015-06-20 82 views
0

我試圖將授權標頭添加到在我的應用程序的客戶端使用$ http所做的請求。

我正在使用nodejs來爲我的客戶端應用程序提供服務,而java爲我的後端提供了spring啓動。

我已經添加以下過濾器,以使CORS:

public class CorsFilter extends GenericFilterBean { 
private static final Logger logger = Logger.getLogger(CorsFilter.class); 
@Override 
public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    logger.info("Enable cors filter"); 
    HttpServletResponse res = (HttpServletResponse) response; 
    res.addHeader("Access-Control-Allow-Origin", "http://localhost:3000"); 
    res.addHeader("Access-Control-Allow-Credentials", "true"); 
    res.addHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS"); 
    res.addHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization"); 
    chain.doFilter(request, response); 

    } 
} 

我設置包含與以下行的令牌的授權首標:

$http.defaults.headers.common.Authorization = 'Bearer ' + token; 

尚未角似乎完全忽略這個標題,當檢查在鉻的請求我看到:

Accept:*/* 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4 
Access-Control-Request-Headers:accept, access-control-expose-headers, authorization 
Access-Control-Request-Method:GET 
Cache-Control:no-cache 
Connection:keep-alive 
Host:localhost:8080 
Origin:http://localhost:3000 
Pragma:no-cache 
Referer:http://localhost:3000/ 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36 

不tr王牌如果授權標題。

我已經添加了「授權」給我的迴應的訪問控制,允許報頭報頭中,CORS似乎正常工作,我已經設置以下我CORS過濾的屁股:

 @Bean 
public FilterRegistrationBean corsFilter() { 
    final FilterRegistrationBean registrationBean = new FilterRegistrationBean(); 
    registrationBean.setFilter(new CorsFilter()); 
    registrationBean.addUrlPatterns("/*"); 
    registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE); 

    return registrationBean; 
    } 

所以它應該首先發生在所有的URL模式上。
那麼我錯過了什麼?

回答

1

對於問題的解決方案是在評論,所以我在這裏編輯這些:

您在Chrome中看到的請求是訪問的CORS請求。方法=選項。這是由瀏覽器完成的,而不是角度。您CORSFilter應該可能處理OPTION請求。

該問題是由期望授權標題的jwt過濾器引起的,也是OPTION請求引起的。

它是通過添加一個條件來解決的,如果該方法不是OPTION,那麼只進行jwt驗證。

+2

我認爲您在chrome中看到的請求是CORS訪問請求。方法=選項。這是由瀏覽器完成的,而不是角度。您CORSFilter應該可能處理OPTION請求。我不知道如何解決這個問題,但嘗試谷歌CORS與憑據 - 這應該是一個問題的評論 - 對不起 – Michael

+0

@popovitsj - 嘗試了你的建議,不幸的是它沒有幫助。 – Anhermon

+0

@Michael - 你是對的,我在chrome中看到的請求的方法是OPTION,我會試着查找一些更多的信息,謝謝。 – Anhermon