gpt4 book ai didi

javascript - Angular2/Spring Boot 允许在 PUT 上跨源

转载 作者:行者123 更新时间:2023-11-29 08:32:30 25 4
gpt4 key购买 nike

我的网络应用程序有一个小问题:连接到 spring boot API 的 angular2 应用程序。

我无法从 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.

Java 代码:

@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);
}

为了解决这个问题,我在我的 Controller 类中添加了@CrossOrigin。它解决了 getAll 方法的问题,但没有解决其他方法的问题。

如何解决它以便我可以使用 PUT 方法而不会出现此错误?

最佳答案

在您的项目中创建 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 Login CORS Problems

关于javascript - Angular2/Spring Boot 允许在 PUT 上跨源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46788969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com