2015-11-03 60 views
0
@Override 
public void addCorsMappings(CorsRegistry registry) { 
    registry.addMapping("/**") 
} 

我按照https://spring.io/blog/2015/06/08/cors-support-in-spring-framework引導,並添加上面的代碼到我的WebConfig春4.2.2 CORS支持不工作

然而,CORS不工作,日誌顯示

20151103 183823 [http-bio-8080-exec-3] WARN org.springframework.web.servlet.DispatcherServlet (DispatcherServlet.java:1136) - No mapping found for HTTP request with URI [/my/url] in DispatcherServlet with name 'dispatcher' 

我可以在沒有CORS(相同域名)的情況下成功調用我的api,所以它不是api問題。

在Chrome的控制檯,日誌顯示

XMLHttpRequest cannot load http://localhost:8080/my/url. 
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.  
Origin 'http://localhost:8100' is therefore not allowed access. The response had HTTP status code 404. 
+0

任何其他信息?可能,它與CORS無關。你是否嘗試刪除它? – SDmitry

+0

我能夠使用過濾器自己處理選項請求。在上面的指南鏈接中,它表示當我重寫WebMvcConfigurerAdapter時,HandlerMappings將被註冊,但它並不適用於我的情況。 –

+0

在日誌的行中,沒有關於Spring的CORS本身的信息。可能的是,應用程序的其他配置中存在錯誤。你能在這裏發佈嗎?但這是一個警告,而不是錯誤。啓動後,應用程序無法正常工作? – SDmitry

回答

2

就在包裏面是包含其他configuation

@Component 
    public class RequestFilter 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, PUT, OPTIONS, DELETE"); 
      response.setHeader("Access-Control-Max-Age", "3600"); 
      response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
      chain.doFilter(req, res); 
     } 

     public void init(FilterConfig filterConfig) { 
     } 

     public void destroy() { 
     } 

    } 

它會正常工作爲您添加此過濾器針對CRO。

+0

以前我使用的是這樣的一種,它適用於正常的CORS請求,但是當我的spring安全重定向請求時,我遇到了一個問題,並且CORS請求失敗,出現302狀態代碼 –

+0

正如我記得在某處讀過的,CORS規範不支持重定向。 – Sanjay

+0

所以我沒有辦法訪問與重定向的API? –