我正在使用 Angular 2 和 Spring Boot 开发一个 Web 应用程序。我用spring-boot-data-rest
将我的存储库公开为 HTTP 端点的依赖项。
在开发过程中,我在端口 8080 上运行的本地 tomcat 上运行后端 spring boot 项目。为了开发前端,我使用 angular-cli 在端口 4200 上为我的 Angular 2 应用程序提供服务。在 4200 上运行的前端需要能够访问 8080 上公开的端点,但这不起作用,因为:
请求的资源上不存在“Access-Control-Allow-Origin”标头。起源 'http://本地主机:4200 http://localhost:4200' 因此不允许访问。
如果这些是我手动输入的自定义端点@RestController
,我可以简单地添加@CrossOrigin
注释如下:
@RestController
public class MyController {
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping(value = "/whatever")
public void whatever() {
//whatever
}
}
但我显然不能为我暴露的端点做到这一点spring-boot-data-rest
。那么,我怎样才能使这些端点可以从http://localhost:4200
origin?
我使用了自定义 CORS 过滤器来使其工作:
/**
* Filter for enabling CORS support.
*/
@Component
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH, HEAD, OPTIONS");
response.addHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
response.addHeader("Access-Control-Expose-Headers", "Access-Control-Allow-Origin, Access-Control-Allow-Credentials");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addIntHeader("Access-Control-Max-Age", 10);
filterChain.doFilter(request, response);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)