如何将 Angular 2 与 Spring Boot 应用程序连接起来?
Posted
技术标签:
【中文标题】如何将 Angular 2 与 Spring Boot 应用程序连接起来?【英文标题】:How to connect Angular 2 with Spring boot application? 【发布时间】:2020-11-29 09:37:50 【问题描述】:我使用 HttpModule 发送 post 请求以将登录凭据发送到 Spring 框架应用程序,但该请求被 spring security 过滤掉了。Angular 应用程序不是发送 post 请求,而是发送一些“选项”请求。
下面的代码是做什么的?
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
if (!(request.getMethod().equalsIgnoreCase("OPTIONS")))
try
chain.doFilter(req, res);
catch(Exception e)
e.printStackTrace();
else
System.out.println("Pre-flight");
response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "authorization, content-type," +
"access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with");
response.setStatus(HttpServletResponse.SC_OK);
【问题讨论】:
【参考方案1】:您的 CORS 配置仅允许来自
的流量 response.setHeader("Access-Control-Allow-Origin", "http://localhost:4200");
确保您的 Angular 客户端正在该特定主机和端口上运行。
浏览器最初发出 HTTP OPTIONS (CORS pre-flight) 请求以验证客户端主机/端口是否与服务器的响应匹配(即您设置的 Access-Control-Allow-Origin 响应标头的值)
【讨论】:
谢谢,我了解 CORS 的工作原理。它只是在发送实际请求之前进行检查。下面的代码有什么作用? System.out.println("飞行前"); response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "authorization, content-type," + "access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-和”); response.setStatus(HttpServletResponse.SC_OK); 它们指定了http请求方法和服务器允许从客户端接受的请求头。以上是关于如何将 Angular 2 与 Spring Boot 应用程序连接起来?的主要内容,如果未能解决你的问题,请参考以下文章
将从 spring-boot 检索到的数据转换为 JSON 并在 Angular 前端获取它
Angular(SPA) 前端和 Spring Boot 后端的 SAML 2.0 集成
如何将带有 angular 2 前端(angular-cli build)的 spring-boot webapp 部署到 Tomcat?
如何将 Spring Boot Rest 服务和 Angular App 捆绑在一个 war 文件中