- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我一直在查看与此问题相关的帖子,但没有找到解决问题的方法。实际上我有一个执行 cetain 任务(后端)的 spring RestController 我想通过 angularJs 应用程序使用这些服务但是我有以下错误消息
"XMLHttpRequest cannot load http://localhost:8084/BackendHibernateJPA/abonnes. Origin http://localhost:8383 is not allowed by Access-Control-Allow-Origin. (14:19:15:639 | error, javascript)
at app/index.html"
当我运行 Spring Rest 项目时,我可以在浏览器上找到预期的结果。我也可以通过像“Chrome Rest client”这样的 rest client 获得结果,但是我不能使用 angularJS 来使用服务
这是我的 RestController
import com.mycompany.backendhibernatejpa.service.IAbonneService;
import com.mycompany.backendhibernatejpa.entities.Abonne;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;
/**
*
* @author
*/
@CrossOrigin(origins = {"http://localhost:8383"}, methods = {RequestMethod.DELETE, RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT}, allowedHeaders = "true")
@RestController
@RequestMapping("/abonnes")
public class AbonneController {
@Autowired
private IAbonneService iAbonneService; //Service which will do all data retrieval/manipulation work
//-------------------Retrieve All Abonne--------------------------------------------------------
@RequestMapping(value = "/", method = RequestMethod.GET)
public ResponseEntity<List<Abonne>> findAllAbonnes() throws Exception {
List<Abonne> listAbonnes = iAbonneService.findAll();
if (listAbonnes.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);//You many decide to return HttpStatus.NOT_FOUND
}
return new ResponseEntity<>(listAbonnes, HttpStatus.OK);
}
@RequestMapping(value = "/some/{idDomicile}", method = RequestMethod.GET)
public ResponseEntity<List<Abonne>> findSomeAbonnes(@PathVariable("idDomicile") long idDomicile) throws Exception {
List<Abonne> listAbonnes = iAbonneService.findSomeAbonne(idDomicile);
if (listAbonnes.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);//You many decide to return HttpStatus.NOT_FOUND
}
return new ResponseEntity<>(listAbonnes, HttpStatus.OK);
}
//-------------------Retrieve Single Abonne--------------------------------------------------------
@RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Abonne> findAbonneById(@PathVariable("id") long id) throws Exception {
System.out.println("Fetching User with id " + id);
Abonne user = iAbonneService.findById(id);
if (user == null) {
System.out.println("Abonne with id " + id + " not found");
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>(user, HttpStatus.OK);
}
//-------------------Create an Abonne--------------------------------------------------------
@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity<Void> createAbonne(@RequestBody Abonne abonne, UriComponentsBuilder ucBuilder) throws Exception {
iAbonneService.create(abonne);
HttpHeaders headers = new HttpHeaders();
headers.setLocation(ucBuilder.path("/abonne/{id}").buildAndExpand(abonne.getId()).toUri());
return new ResponseEntity<>(headers, HttpStatus.CREATED);
}
//------------------- Update a Abonne --------------------------------------------------------
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity<Abonne> updateAbonne(@PathVariable("id") long id, @RequestBody Abonne abonne) throws Exception {
System.out.println("Updating Abonne " + id);
Abonne currentAbonne = iAbonneService.findById(id);
if (currentAbonne == null) {
System.out.println("Abonne with id " + id + " not found");
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
currentAbonne.setNomAbonne(abonne.getNomAbonne());
currentAbonne.setTel(abonne.getTel());
iAbonneService.update(currentAbonne);
return new ResponseEntity<>(currentAbonne, HttpStatus.OK);
}
//------------------- Delete a Abonne --------------------------------------------------------
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public ResponseEntity<Abonne> deleteUser(@PathVariable("id") long id) throws Exception {
System.out.println("Fetching & Deleting User with id " + id);
Abonne abonne = iAbonneService.findById(id);
if (abonne == null) {
System.out.println("Unable to delete. Abonne with id " + id + " not found");
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
iAbonneService.delete(abonne);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
}
这是我的servlet
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<context:component-scan base-package="com.mycompany.backendhibernatejpa.controller" />
<mvc:annotation-driven />
<bean id="iAbonneDao" class="com.mycompany.backendhibernatejpa.daoImpl.AbonneDaoImpl"/>
<bean id="iAbonneService" class="com.mycompany.backendhibernatejpa.serviceImpl.AbonneServiceImpl"/>
<!-- couche de persistance JPA -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="generateDdl" value="true" />
<property name="showSql" value="true" />
</bean>
</property>
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:bd.properties"/>
</bean>
<!-- la source de donnéees DBCP -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName" value="${bd.driver}" />
<property name="url" value="${bd.url}" />
<property name="username" value="${bd.username}" />
<property name="password" value="${bd.password}" />
</bean>
<!-- le gestionnaire de transactions -->
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<!-- traduction des exceptions -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<!-- annotations de persistance -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<!-- <bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"/>-->
</beans>
我什至在我的 web.xml 中添加了它
<!-- ================== Built In Filter Definitions ===================== -->
<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>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- ==================== Built In Filter Mappings ====================== -->
最后,这是我的 Angular 服务
'use strict';
var services = angular.module('myApp.services', ['ngResource']);
services.factory('abonneFactory', function ($resource) {
return $resource('http://localhost:8084/BackendHibernateJPA/abonnes/', {}, {
query: {method: 'GET', isArray: true},
create: {method: 'POST'}
});
});
services.factory('abonneFactory', function ($resource) {
return $resource('http://localhost:8084/BackendHibernateJPA/abonnes/:id', {}, {
show: {method: 'GET'},
update: {method: 'PUT', params: {id: '@id'}},
delete: {method: 'DELETE', params: {id: '@id'}}
});
});
最佳答案
根据错误消息,这似乎是一个 CORS 问题访问控制允许来源。当 站点 A 试图从 站点 B 获取内容时,就会发生这种情况。您应该在您的应用程序中实现 CORS,在后端添加此 header :
public static final HttpHeaders HTTP_HEADERS = new HttpHeaders();
static{
HTTP_HEADERS.add("Access-Control-Allow-Headers", "Content-Type");
HTTP_HEADERS.add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
HTTP_HEADERS.add("Access-Control-Allow-Origin", "*");
}
并将这些 header 添加到服务响应中,例如:
@RequestMapping(value = "/some/{idDomicile}", method = RequestMethod.GET)
public ResponseEntity<List<Abonne>> findSomeAbonnes(@PathVariable("idDomicile") long idDomicile) throws Exception {
List<Abonne> listAbonnes = iAbonneService.findSomeAbonne(idDomicile);
if (listAbonnes.isEmpty()) {
return new ResponseEntity<>(HttpStatus.NO_CONTENT);//You many decide to return HttpStatus.NOT_FOUND
}
return new ResponseEntity.ok().headers(HTTP_HEADERS).body(listAbonnes);
}
另一种选择是在浏览器中使用扩展
火狐浏览器 https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors/
关于javascript - 无法通过angular JS访问部署在tomcat上的spring Rest web服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43069872/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!