我有一个Spring MVC REST服务,该服务通过Tomcat在端口8080上本地运行。当我直接通过浏览器或提琴手访问该服务时,它会按预期运行。我也有一个使用AngularJS构建的本地网站。如果我将此网站放置在Tomcat目录中,并导航到Tomcat服务的网站链接,则一切仍然正常。
问题是当我没有将网站放置在Tomcat目录中时。假设我将网站项目放在桌面上,然后导航到应该从本地REST服务检索数据的页面...我可以在提琴手中看到请求正在处理,点击了服务,服务返回了数据...但是网站没有显示!
为什么只有当Tomcat都提供这两种服务时,它才能正常工作?
直接链接到点击服务:(http://localhost:8080/CPProject/users
以JSON格式返回所有用户)
网站(有效): http://localhost:8080/CPWebsite/app/#/users
网站(无效):(http://localhost:63342/CPWebsite/app/index.html#/users
63342是Webstorm 7.0使用的端口)或file:///C:/Users/someuser/CPWebsite/app/index.html#/users
我的Angular控制器如下所示:
cpControllers.controller('UserListCtrl',
function($scope, $http) {
$http.get('http://localhost:8080/CP/users')
.success(function(data) {
$scope.users = data;
}
)
}
);
我还在Sprint MVC服务中创建了CORS过滤器:
@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", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
感谢您以上的回答。事实证明,我的CORS过滤器很好,但是我忘了将其添加到应用程序初始化程序中,以便过滤器真正起作用:
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
WebApplicationContext rootContext = createRootContext(servletContext);
configureSpringMvc(servletContext, rootContext);
FilterRegistration.Dynamic corsFilter = servletContext.addFilter("corsFilter", SimpleCORSFilter.class);
corsFilter.addMappingForUrlPatterns(null, false, "/*");
}
详情请参阅这里:http : //jpgmr.wordpress.com/2013/12/12/cross-origin-resource-sharing-cors-requests-with-spring-mvc/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句