[SPRING] Angular2 / Spring Boot는 PUT에 교차점을 허용합니다.
SPRINGAngular2 / Spring Boot는 PUT에 교차점을 허용합니다.
내 웹 응용 프로그램에 약간의 문제가 있습니다. 각도 2 앱이 스프링 부팅 API에 연결되었습니다.
angular2 앱에서 내 요청에 액세스 할 수 없습니다. 이 오류가 발생합니다.
Failed to load http://localhost:8080/deliveryMan/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
자바 코드 :
@RestController
@RequestMapping(value = "/deliveryMan")
@CrossOrigin
public class DeliveryManController {
@Autowired
DeliveryManService deliveryManService;
@RequestMapping(value = "/getAllDeliveryMan", method = RequestMethod.GET)
public Iterable<DeliveryMan> getAllDeliveryMan(){
return deliveryManService.findAll();
}
@RequestMapping(method = RequestMethod.PUT, consumes = "application/json")
public DeliveryMan addDeliveryMan(@RequestBody DeliveryMan deliveryMan) throws InvalidObjectException {
deliveryManService.save(deliveryMan);
return deliveryMan;
}
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan
public class MyApp{
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
angular2 코드 :
private apiUrl = 'http://localhost:8080/deliveryMan/';
getAll(): Promise<DeliveryMan[]> {
const url = this.apiUrl + 'getAllDeliveryMan';
return this.http.get(url)
.toPromise()
.then(response => response.json().data as DeliveryMan[])
.catch(this.handleError);
}
saveDeliveryMan(deliveryMan: DeliveryMan): Promise<DeliveryMan> {
const url = this.apiUrl;
return this.http.put(url, JSON.stringify(deliveryMan), this.headers)
.toPromise()
.then(() => deliveryMan)
.catch(this.handleError);
}
문제를 해결하기 위해 @CrossOrigin을 컨트롤러 클래스에 추가했습니다. 그것은 getAll 메소드에 대한 문제점을 해결하지만 추가 메소드에 대해서는 문제점을 해결하지 않습니다.
이 오류가 발생하지 않고 PUT 메서드를 사용할 수 있도록 해결하는 방법?
해결법
-
==============================
1.프로젝트에 CORSFilter.java 파일을 만듭니다.
프로젝트에 CORSFilter.java 파일을 만듭니다.
@Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CORSFilter implements Filter { /** * CORS filter for http-request and response */ public CORSFilter() { } /** * Do Filter on every http-request. */ @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "access_token, authorization, content-type"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } /** * Destroy method */ @Override public void destroy() { } /** * Initialize CORS filter */ @Override public void init(FilterConfig arg0) throws ServletException { } }
이 게시물을 참조 할 수 있습니다. Angular 2 Spring Boot CORS 문제
-
==============================
2.컨트롤러에 @CrossOrigin (origins = "http : // localhost : 4200") 주석을 추가하십시오.
컨트롤러에 @CrossOrigin (origins = "http : // localhost : 4200") 주석을 추가하십시오.
@CrossOrigin(origins = "http://localhost:4200") @RequestMapping(method = RequestMethod.PUT, consumes = "application/json") public DeliveryMan addDeliveryMan(@RequestBody DeliveryMan deliveryMan) throws InvalidObjectException { deliveryManService.save(deliveryMan); return deliveryMan; }
-
==============================
3.다음을 사용할 수 있습니다 : (모든 CRUD 작업에서 작동해야합니다)
다음을 사용할 수 있습니다 : (모든 CRUD 작업에서 작동해야합니다)
@CrossOrigin(origins = "*")
from https://stackoverflow.com/questions/46788969/angular2-spring-boot-allow-cross-origin-on-put by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 보안에서 역할을 수정하는 방법은 무엇입니까? (0) | 2018.12.21 |
---|---|
[SPRING] Java 8로 WebSphere에서 애플리케이션을 실행할 때 봄 예외 (0) | 2018.12.21 |
[SPRING] 스프링 데이터 REST 프로젝트에서 DTO를 사용하는 방법은 무엇입니까? (0) | 2018.12.21 |
[SPRING] Spring 4 + Hibernate 5 = org.springframework.orm.jpa.EntityManagerHolder는 org.springframework.orm.hibernate5.SessionHolder로 형변환 될 수 없다. (0) | 2018.12.21 |
[SPRING] 이미지에 텍스트를 추가하는 방법은 무엇입니까? (0) | 2018.12.21 |