博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Zuul路由网关
阅读量:3961 次
发布时间:2019-05-24

本文共 4467 字,大约阅读时间需要 14 分钟。

目录

Zuul路由网关简介及基本使用

简介

在这里插入图片描述

请看上图,这里的API 路由网关服务 由Zuul实现,主要就是对外提供服务接口的时候,起到了请求的路由和过滤作用,也因此能够隐藏内部服务的接口细节,从来有利于保护系统的安全性。

基本使用

路由配置

我们新建一个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路由映射配置

上面是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请求过滤配置

比如我们登录某个系统 需要身份验证,用户名密码啥的

我们请求服务,也可以来设置身份验证,也就是过滤非法请求;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/

你可能感兴趣的文章
asp 中常用的文件处理函数
查看>>
ADO中sqlserver存储过程使用
查看>>
Linux KernelTech版FAQ 1.0
查看>>
ntfs分区iis故障的解决
查看>>
个人创业“六大死穴”
查看>>
最重要的 12个 J2EE 最佳实践
查看>>
通过Java Swing看透MVC设计模式
查看>>
Java 理论与实践: 关于异常的争论
查看>>
编写高效的线程安全类
查看>>
提高Java代码可重用性的三个措施
查看>>
编写跨平台Java程序注意事项
查看>>
富人和穷人的12个经典差异
查看>>
java 注意事项[教学]
查看>>
MetaWeblogAPI测试
查看>>
软件配置管理概念-1,介绍
查看>>
软件配置管理概念-2,用户角色
查看>>
软件配置管理概念-3,CM系统的概念
查看>>
JSP/Servlet应用程序优化八法
查看>>
人生必修的181条佛理
查看>>
The Most Widely Used Java Libraries
查看>>