本文共 4467 字,大约阅读时间需要 14 分钟。
路由配置
我们新建一个module microservice-zuul-3001 这里我们的zuul也注册到eureka服务里,端口3001; 我们修改下Hosts,专门为zuul搞个本地域名映射 找到C:\Windows\System32\drivers\etc 打开hosts,加配置 hosts文件 加下:127.0.0.1 zuul.zxp.com
然后pom.xml要加上:
org.springframework.cloud spring-cloud-starter-zuul
yml配置:
server: port: 3001 context-path: /spring: application: name: microservice-zuuleureka: instance: instance-id: microservice-zuul:3001 prefer-ip-address: true client: service-url: defaultZone: http://eureka2001.zxp.com:2001/eureka/,http://eureka2002.zxp.com:2002/eureka/,http://eureka2003.zxp.com:2003/eureka/info: groupId: com.zxp.testSpringcloud artifactId: microservice-zuul-3001 version: 1.0-SNAPSHOT userName: http://zxp.com phone: 123456
主启动类:ZuulApplication_3001加下@EnableZuulProxy注解:
package com.zxp.microservicezuul3001;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})@EnableZuulProxypublic class MicroserviceZuul3001Application { public static void main(String[] args) { SpringApplication.run(MicroserviceZuul3001Application.class, args); }}
测试
启动三个eureka 然后再启动下一个1001服务,以及 zuul网关服务 请求:http://localhost:1001/student/list (或者用 http://zuul.zxp.com:3001/microservice-student/student/list 域名+端口+服务名称+请求地址) 能获取到数据; 说明我们的路由基本配置OK上面是zuul的简单使用,从接口地址很轻易的就暴露了服务提供者的唯一标识名microservice-student;有安全风险,我们需要将其隐藏
ignored-services的作用是将原来的服务提供者唯一标识名禁用 Prefix的作用是给服务加前缀 yml文件中添加以下配置:zuul: routes: studentServer.serviceId: microservice-student studentServer.path: /studentServer/** ignored-services: "*" prefix: /zxp
测试
配置完毕后可通过以下链接做测试 http://zuul.zxp.com:3001/microservice-student/student/list http://zuul.zxp.com:3001/studentServer/student/list http://zuul.zxp.com:3001/zxp/microservice-student/student/list http://zuul.zxp.com:3001/zxp/studentServer/student/list 对应的配置会出现上面的错误页面,这是正常现象。比如我们登录某个系统 需要身份验证,用户名密码啥的
我们请求服务,也可以来设置身份验证,也就是过滤非法请求;Zuul通过ZuulFilter过滤器实现; 一般具体实现的话 每次经过Zuul服务网关 我们都对带来的token进行有效性验证; 定义一个 AccessFilter类package com.zxp.microservicezuul3001.filter;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.apache.log4j.Logger;import javax.servlet.http.HttpServletRequest;/** * @author笑笑 * @site www.xiaoxiao.com * @company * @create 2020-01-19 17:32 */public class AccessFilter extends ZuulFilter { Logger logger=Logger.getLogger(i.class); /** * 判断该过滤器是否要被执行 */ @Override public boolean shouldFilter() { return true; } /** * 过滤器的具体执行逻辑 */ @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String parameter = request.getParameter("accessToken"); logger.info(request.getRequestURL().toString()+" 请求访问"); if(parameter==null){ logger.error("accessToken为空!"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); ctx.setResponseBody("{\"result\":\"accessToken is empty!\"}"); return null; } // token判断逻辑 logger.info(request.getRequestURL().toString()+" 请求成功"); return null; } /** * 过滤器的类型 这里用pre,代表会再请求被路由之前执行 */ @Override public String filterType() { return "pre"; } /** * 过滤器的执行顺序 */ @Override public int filterOrder() { return 0; }}
然后再开启下 Filter配置:
package com.zxp.microservicezuul3001.config;import com.zxp.microservicezuul3001.filter.AccessFilter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class ZuulConfig { @Bean public AccessFilter accessFilter(){ return new AccessFilter(); }}
测试
http://zuul.zxp.com:3001/zxp/studentServer/student/list?accessToken=1 http://zuul.zxp.com:3001/zxp/studentServer/student/list转载地址:http://uyrzi.baihongyu.com/