And*_*ose 4 java spring spring-data-rest spring-boot
我有一个使用Angular 2和Spring Boot开发的Web应用程序.我使用spring-boot-data-rest依赖项将我的存储库公开为HTTP端点.
在开发过程中,我在端口8080上运行的本地tomcat上运行我的后端spring启动项目.为了开发前端,我使用angular-cli在端口4200上运行我的Angular 2应用程序.我在4200上运行的前端需要能够点击8080上暴露的端点,但这不起作用,因为:
请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:4200 '访问.
如果这些是我手动输入的自定义端点@RestController,我可以简单地添加@CrossOrigin注释:
@RestController
public class MyController {
@CrossOrigin(origins = "http://localhost:4200")
@RequestMapping(value = "/whatever")
public void whatever() {
//whatever
}
}
Run Code Online (Sandbox Code Playgroud)
但我显然不能为我的端点暴露出来spring-boot-data-rest.那么,我如何才能从http://localhost:4200原点访问这些端点?
我使用自定义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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4303 次 |
| 最近记录: |