使用angular.js问题来使用Java Spring REST服务

时间:2015-04-08 14:53:08

标签: java javascript angularjs spring

我遇到了与CORS相关的问题。我正在使用angular和Spring编写客户端 - 服务器应用程序。当我想发送一些HTTP请求时,浏览器显示有一个"跨源请求被阻止:同源策略不允许在http://localhost:8080/ ...读取远程资源..."错误。我已经使用Tomcat在localhost上部署了REST,现在我尝试使用angular消耗任何响应,使用" npm"服务器,但我不能因为CORS问题而这样做。我究竟做错了什么?这是代码片段:

服务器端:

@RequestMapping(value="/dummy", consumes="application/json", method=RequestMethod.GET)
public @ResponseBody String dummy() {

    return "LOL";
}

客户方:

var authorizationApp = angular.module("authorizationApp", ['PageController','ngRoute']);

authorizationApp.config(function($httpProvider) {

  $httpProvider.defaults.useXDomain = true;


  delete $httpProvider.defaults.headers.common['X-Requested-With'];
});

authorizationApp.config(['$routeProvider', function($routeProvider) {
    .....
}])

var pageController = angular.module('PageController',[])

pageController.controller('PageCtrl',['$scope', '$routeParams', '$location', '$http', function($scope, $routeParams, $location, $http) {
    ..................................

    $scope.someFunc = function() {

        $http.get("http://localhost:8080/rabota/student/dummy")
            .success(function(data, status,headers,config) {
                alert("sent");
            })
            .error(function(data, status,headers,config) {
                alert(":-(");
            })
    }
}])

2 个答案:

答案 0 :(得分:1)

默认情况下,您的浏览器不允许AJAX请求到其他域(或具有不同端口的同一域)。有很多方法可以解决这个问题:

  • 通过托管前端的服务器代理对后端的请求
  • Access-Control-Allow-Origin标题添加到后端的回复
  • 在同一台服务器上托管前端和后端
  • 在浏览器中禁用同源策略

如果您只想让它在本地计算机上运行,​​最简单的方法是在浏览器中禁用安全性(对于Chrome:Disable same origin policy in Chrome)。

如果您需要更详细的信息,我建议您阅读本文:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

编辑: 如果您使用的是Tomcat 7(或更高版本),可以尝试将以下代码段添加到web.xml文件中

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>http://HOST:PORT</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

其中HOST和PORT是您的npm服务器的主机和端口。

答案 1 :(得分:0)

这是因为您在不同的主机而不是localhost上启动Web客户端。尝试使用外部IP,看看它能带给你什么。