如何处理从Servlet中的角度应用程序发送的预检请求?

问题描述 投票:0回答:1

我正在Angular中创建一个项目,该项目从在localhost:8080上运行的tomcat应用程序获取用户的json。现在,我正在尝试使用http.put更新用户。当我发送看跌期权请求时,我在控制台中看到此错误:

从源'http://localhost:8080/Servlet?command=UpdateUser'到'http://localhost:4200'处对XMLHttpRequest的访问已被CORS策略阻止:对预检请求的响应未通过访问控制检查:没有'Access-Control-Allow-Origin'标头在请求的资源上。

我的servlet使用处理程序工厂,该工厂使正确的处理程序可以处理请求。 UpdateUser处理程序现在具有以下代码:

public class UpdateUser extends RequestHandler {
    @Override
    public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Enumeration<String> params = request.getParameterNames();
        System.out.println(params);
        while (params.hasMoreElements()) {
            String paramName = params.nextElement();
            System.out.println(paramName + ":" + request.getParameter(paramName));
        }
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "X-PINGOTHER,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization");
        response.addHeader("Access-Control-Expose-Headers", "xsrf-token");
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
    }
}

注意:我只是将while循环放在此处,因此我能够看到我的角度应用程序中的内容如何到达我的处理程序。

在我的角度应用程序的app.component.ts中,我有以下代码来更新用户:

updateUser(user): void {
    this.userService.updateUser(user).subscribe();
  }

这将在我的user.service.ts中调用此方法:

  private httpOptions = {headers: new HttpHeaders({
      'Content-Type':  'application/json'
  })};
  updateUser(user): Observable<User> {
    return this.http.put<User>(this.updateUsersUrl, user, this.httpOptions);
  }

在控制台的“网络”选项卡中,我看到我的处理程序被调用,但是什么都没有打印出来。所以我想我可能需要在其他地方处理我的飞行前请求?

java angular servlets cors
1个回答
0
投票

在我的servlet中重写doOptions方法并在那里设置所有标头似乎可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.