可扩展应用程序的CORS问题

时间:2015-09-06 04:50:31

标签: javascript angularjs spring-boot cors scalability

我有三个应用程序,后跟AngularJS中的authserver,资源服务器和前端应用程序。 AngularJS应用程序在Node Server上运行,其他资源在Tomcat Server上运行。通过使用CORS的AngularJS,我可以登录到authserver(http://localhost:8081/oauth/token),我无法访问资源服务器(http://localhost:8082/api/devices)。标题添加如下:

var config = {
    headers: {
        'Authorization': 'bearer '+authToken,
        'Accept': 'application/json;odata=verbose'
    }
};
$http.get(RESOURCE_SERVER + 'api/devices',config).then(function(response){
    console.log(""+response.data);
});'''

标头不会添加到资源服务器并获得类似CORS问题的异常。我主要担心的是我能够登录到auth服务器而不是资源服务器为什么会这样?

@Component
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 init(FilterConfig filterConfig) {}

    public void destroy() {}
}
  

错误::XMLHttpRequest无法加载http://192.168.0.130:8080/golive-resource/api-docs。该   'Access-Control-Allow-Origin'标题包含多个值'*,*',   但只允许一个。因此,“http://127.0.0.1:9000”来源   不允许访问。

2 个答案:

答案 0 :(得分:1)

问题是你的设置中的其他地方你也设置了Access-Control-Allow-Origin标题,而不是一个覆盖另一个它们由服务器组合,这意味着你最终得到两个值。

此标头有两个值会导致错误。因此,您应该找到设置此标头的其他位置,然后删除该实例或将其从上面的代码段中删除。

答案 1 :(得分:0)

实际上,浏览器使用http请求方法"选项"在您的执行请求之前发出预检请求。 。所以你必须向这个请求发送200 OK

if(httpRequest.getMethod().equals("OPTIONS")){
        httpResponse.setStatus(HttpServletResponse.SC_ACCEPTED);
        return;
    }

您可以在http://enable-cors.org/

找到更多信息