服务网关

image

image

image

image

image

yml配置文件

server:
  port: 8080
spring:
  application:
    name: api_zuul_server
#路由配置
zuul:
  routes:
    #商品微服务
   product-service: #路由id,随便写
    path: /product-service/**   #映射路径  #localhost:8080/product-service/sxx
    url: http://127.0.0.1:9001 #映射路径对应的实际微服务url地址
   order-service:
    path: /order-service/**
    url: http://127.0.0.1:9002

imageimage

image

image
image

image

image

image

package com.yxkj.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

/**
 * @USER: 文 俊
 * @DATE: 2021-07-11
 *
 * @description: 自定义的zuul过滤器  继承父类Zuulfilter
 */
@Component
public class LoginFilter extends ZuulFilter {
    /**
     * 定义过滤器类型
     * pre
     * routing
     * post
     * error
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 指定过滤器的执行顺序
     * @return
     */
    @Override
    public int filterOrder() {
        return 1;
    }

    /**
     * 当前过滤器是否生效
     * true:使用此过滤器
     * false:不适用此过滤器
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 指定过滤器中的业务逻辑
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        System.out.println("执行了过滤器");
        return null;
    }
}

身份认证

image

package com.yxkj.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @USER:
 * @DATE: 2021-07-11
 *
 * @description: 自定义的zuul过滤器  继承父类Zuulfilter
 */
@Component
public class LoginFilter extends ZuulFilter {
    /**
     * 定义过滤器类型
     * pre
     * routing
     * post
     * error
     * @return
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 指定过滤器的执行顺序
     * @return
     */
    @Override
    public int filterOrder() {
        return 1;
    }

    /**
     * 当前过滤器是否生效
     * true:使用此过滤器
     * false:不适用此过滤器
     * @return
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }

    /**
     * 指定过滤器中的业务逻辑
     * 身份认证:
     *   1.所有的请求需要携带一个参数:access-token
     *   2.获取request请求
     *   3.通过request获取参数access-token
     *   4.判断token是否卫康
     *   4.1 token ==null 身份认证失败
     *   4。2 token!=null 执行后续操作
     *   在zuul网关中,通过requestContext的上下文访问对象,可以获取到request对象
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
        System.out.println("执行了过滤器");
        //1.获取zuul提供的上下文对象RequestContext
        RequestContext ctx = RequestContext.getCurrentContext();
        //2.从RequestContext中获取request
        HttpServletRequest request = ctx.getRequest();
        //3.获取请求参数access-token
        String token = request.getParameter("access-token");
        //4.判断
         if(token==null){
              //4.1如果token == null ,拦截请求,返回认证失败
             ctx.setSendZuulResponse(false); //拦截请求
             ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
         }
         //4.2 如果token!=null ,绩效后续执行

        return null;
    }
}

image

image

posted @ 2021-07-11 14:46  风飘落叶  阅读(51)  评论(0编辑  收藏  举报