Angular 2 Spring Boot 登录跨域问题

4
我正在尝试使用Spring Boot作为后端和Angular 2作为前端开发应用程序。
实际上,我遇到了连接问题,当我从Spring访问mvc登录页面时。
我遇到以下问题:
(控制台)

enter image description here

( Angular 2 代码 ) 在此输入图像描述

Spring 代码 在此输入图像描述

enter image description here

我已为前端端口设置了全局CORS配置。我的请求返回响应状态200,但我无法访问响应,因为我在控制台中收到错误消息。
Spring没有错误。
2个回答

11

你需要了解的第一件事是,Cors配置是在后端添加的。您不需要从Angular2应用程序每个请求都发送cors头信息。如果理解这一点,通过在spring安全配置类中添加全局CORS配置很容易解决此问题。

首先,您需要创建一个过滤器bean:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class MyCorsFilter implements Filter{

public MyCorsFilter () {
    super();
}

@Override
public final void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain chain) throws IOException, ServletException {
    final HttpServletResponse response = (HttpServletResponse) res;
    response.setHeader("Access-Control-Allow-Origin", "http://localhost:3000");

    // without this header jquery.ajax calls returns 401 even after successful login and SSESSIONID being succesfully stored.
    response.setHeader("Access-Control-Allow-Credentials", "true");

    response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, Origin, Content-Type, Version");
    response.setHeader("Access-Control-Expose-Headers", "X-Requested-With, Authorization, Origin, Content-Type");

    final HttpServletRequest request = (HttpServletRequest) req;
    if (!request.getMethod().equals("OPTIONS")) {
        chain.doFilter(req, res);
    } else {
        // do not continue with filter chain for options requests
    }
}

@Override
public void destroy() {

} 

@Override
public void init(FilterConfig filterConfig) throws ServletException {       
}
}

步骤2:在您的Spring安全配置类中添加:

@Autowired
private MyCorsFilter myCorsFilter;


//CORS
http.addFilterBefore(myCorsFilter, ChannelProcessingFilter.class);

编辑: 此配置假定您在本地主机上运行了位于 localhost:3000 的 angular2 应用程序。


谢谢,这是CORS的第一个问题。它对我有用。 - Muhammed Misir

1

如果你正在使用Spring 4.2及以上版本,那么跨源资源共享(CORS)将得到一流的支持。请阅读页面

你可以通过在类级别定义以下注释来轻松实现:

@CrossOrigin(origins = "http://localhost:3000", maxAge = 3600)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接