2016-11-29 109 views
2

我正在嘗試開發一個應用程序,用於後端的Spring Boot和用於前端的Angular 2。Angular 2 Spring Boot登錄CORS問題

其實我有連接問題,當我從春天訪問mvc登錄頁面。

我得到以下問題:

(控制檯)

enter image description here

(角2碼) enter image description here

Spring代碼enter image description here

enter image description here

我已經爲FrontEnd端口設置了全局Cors配置。我的請求返回響應狀態200.但我不能訪問響應,因爲我得到控制檯中的錯誤消息。

Spring dosnt有錯誤。

回答

6

您需要了解Cors配置的第一件事是添加到後端。您無需將每個來自Angular2應用程序的請求發送給Cors標頭。瞭解到這個問題很容易通過在你的spring安全配置類中添加全局CORS配置來解決。

首先,你需要創建一個過濾器豆:

@Component 
@Order(Ordered.HIGHEST_PRECEDENCE) 
public class MyCorsFilter implements Filter{ 

public MyCorsFilter() { 
    super(); 
} 

@Override 
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException { 
    final HttpServletResponse response = (HttpServletResponse) res; 
    response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000"); 

    // without this header jquery.ajax calls returns 401 even after successful login and SSESSIONID being succesfully stored. 
    response.setHeader("Access-Control-Allow-Credentials", "true"); 

    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); 
    response.setHeader("Access-Control-Max-Age", "3600"); 
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, Origin, Content-Type, Version"); 
    response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, Authorization, Origin, Content-Type"); 

    final HttpServletRequest request = (HttpServletRequest) req; 
    if (!request.getMethod().equals("OPTIONS")) { 
     chain.doFilter(req, res); 
    } else { 
     // do not continue with filter chain for options requests 
    } 
} 

@Override 
public void destroy() { 

} 

@Override 
public void init(FilterConfig filterConfig) throws ServletException {  
} 
} 

第2步:在你的春季安全配置類添加:

@Autowired 
private MyCorsFilter myCorsFilter; 


//CORS 
http.addFilterBefore(myCorsFilter, ChannelProcessingFilter.class); 

編輯: 此配置假定你有angular2應用程序在運行本地主機:3000

+0

**感謝**,這是與一個Cors的第一個問題。它爲我工作 – mimu1011

+0

很高興聽到:)不客氣。 –

1

如果您正在使用Spring 4.2和更多版本,可以使用CORS開箱即用的第一類支持。閱讀page

您可以通過在類級別定義以下標註脫身: @CrossOrigin(origins = "http://localhost:3000", maxAge = 3600)