用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 增加代理服务器
来源:互联网 发布:安卓助手for mac 编辑:程序博客网 时间:2024/06/14 23:16
上一章提到在HTTP Response中添加头的问题,如果在微服务里面添加,比如UserService项目,则每个项目都需要做重复的工作。每次遇到这样的情况,那肯定会有更好的解决方案。在前端的反向带来服务统一添加,就是一个更好的方案。这样每个微服务只需要解决自己关心的领域问题。基本思路就是在反向代理上面添加一个过滤器,对每个HTTP响应都增加一个头。
Zuul
Spring的代理服务使用了Netflix的Zuul。按照Zuul官方的介绍,https://github.com/Netflix/zuul,是一个Edge Service。Edge Service是边界服务,提供了接入的功能,包括动态路由,过滤,监控等。
Spring Cloud提供了Zuul的集成,只需要在http://start.spring.io/中添加对zuul的依赖,就可以通过简单的配置使用zuul了。Spring提供的官方文档如下:
http://cloud.spring.io/spring-cloud-netflix/
https://spring.io/guides/gs/routing-and-filtering/
实现
新建一个叫做gateway的项目,添加的依赖是zuul。然后SPRING INITIALIZR自动生成maven项目。
GatewayApplication.java:
package com.healtrav;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;import org.springframework.context.annotation.Bean;@EnableZuulProxy@SpringBootApplicationpublic class GatewayApplication { public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); } @Bean public PostFilter postFilter() { return new PostFilter(); }}
除了自动生成的代码以外,增加了一个PostFilter。注意要使用Zuul服务,只需要在Spring Application增加一个注解:@EnableZuulProxy。
PostFilter.java:
package com.healtrav;import javax.servlet.http.HttpServletResponse;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;public class PostFilter extends ZuulFilter { @Override public String filterType() { return "post"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletResponse response = ctx.getResponse(); response.addHeader("Access-Control-Allow-Origin", "*"); return null; }<a target=_blank href="http://blog.csdn.net/cuiwader/article/details/52806589">用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 增加权限控制</a>}
在Spring Cloud Zuul里面添加一个ZuulFilter非常简单,只需要从ZuulFilter继承,并且重写四个方法。第一个filterType指明了过滤的类型,包括pre,routing,post,error,即对应HTTP请求在路由前,中,后和错误时候的过滤。现在我们需要添加的是路由后的过滤,所以返回post字符串即可。filterOrder给出了过滤执行的顺序。shouldFilter用来设置是否执行该过滤的条件。一般是像在run里面一样,拿到RequestContext,然后用它来判断某些条件是否满足,返回true或者false。现在我们需要过滤所有Response,所以返回true。run就是过滤的逻辑了。这里是拿到RequestContext中的HttpServletResponse,然后给它添加一个HTTP头,添加Access-Control-Allow-Origin,后面的*表示允许所以域的请求。请注意这样的设置是不安全的,正确的做法应该是在这里设置一个域名,或者IP地址。写好PostFilter之后,只需要添加一个带@Bean注解的实例化方法,Spring Cloud Zuul会自动查找从ZuulFilter继承的Bean。完整的代码请参考这个tag:https://github.com/cuiwader/healtrav/releases/tag/simple-gateway-no-auth,注意不要使用master HEAD的代码,而是用链接里面这个tag的代码。
验证
在chrome中再次打开链接http://localhost:3000,会发现现在所有的用户都可以正常显示了。
上一章:用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - AngularJS2客户端
下一章:用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 增加权限控制
0 0
- 用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 增加代理服务器
- 用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 增加权限控制
- 用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 实现RESTful CRUD
- 用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - AngularJS2客户端
- Spring-boot:快速搭建微服务框架
- Spring Cloud微服务 Spring Boot Admin
- spring boot spring cloud微服务架构
- 基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用
- 基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用
- 基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用
- 基于Spring Boot和Spring Cloud实现微服务架构学习(三)-Spring Boot应用
- Spring Boot和Spring Cloud微服务架构学习(三)-Spring Boot应用
- Spring Boot(二):快速搭建web项目或微服务
- 搭建基于Spring Cloud的微服务应用
- spring cloud搭建微服务second-fiberhome(一):spring boot工程搭建及config服务
- 基于Spring Boot和Spring Cloud实现微服务架构学习(六)-Docker应用
- 基于Spring Boot和Spring Cloud实现微服务架构学习(六)-Docker应用
- 基于Spring Boot和Spring Cloud实现微服务架构学习(六)-Docker应用
- 第四周项目4-建设双链表算法库
- 事物
- php重写函数
- 第四周项目3—单链表的应用(3)
- java源码分析之集合框架HashTable 11
- 用Spring Boot & Cloud,Angular2快速搭建微服务web应用 - 增加代理服务器
- 关于websocket和socket
- 第4周项目5-循环双链表应用
- Android 对5.0+的外置SD卡删除操作
- Windows 下计划任务 PHP示例代码
- 【codeforces 500C 】
- 微信小程序开发系列(2)----Hello 小程序 分析篇(上)
- Java junit测试模块
- ExtJS4.0及其后版本 grid column的header 换行