三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心( 二 )

2.4 主启动类上的注解@EnableEurekaClient@EnableZuulProxy //开启网关代理功能2.5 测试2.5.1 不屏蔽默认路由serviceId: edocmall-web和path: /edocmall-zuul/**都可以访问

三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心

文章插图
2.5.2 屏蔽默认路由 ignored-services: '*'只有path: /edocmall-zuul/**都可以访问
三 SpringBoot - Ribbon客户端负载均衡,Zuul网关,Config配置中心

文章插图
2.6 自定义网关过滤器2.6.1 自定义网关过滤器//Description: 自定义网关过滤器@Componentpublic class AuthZuulFilter extends ZuulFilter {    @Override    public String filterType() {        //指定网关过滤器的类型,允许返回值只能是:pre,post,route,error        //pre : 在请求被路由转发前调用,通常用于权限校验,日志处理等        //post : 在请求被路由转发后调用,一般都是收集服务调用信息        //route : 在请求被路由转发是调用(服务被调用前),通常用户在特定服务调用前增加参数处理        //error: 在请求被路由转发过程中,出现异常是调用        return "pre";    }    @Override    public int filterOrder() {        //指定网关过滤器的优先级,允许值是int类型整数,值越小优先级越高        return 0;    }    @Override    public boolean shouldFilter() {        //指定网关过滤器是否需要执行自定义的业务逻辑处理,如果是false不执行,true执行,执行自定义业务逻辑处理,就是下面的run方法内的业务逻辑        return true;    }    @Override    public Object run() {        //自定义网关过滤器需要执行的业务逻辑处理        //模拟场景:当请求到达网关,网关接收请求进行请求映射处理,把必须要先校验权限,        // 如果权限校验失败,不进行路由转发,只有权限校验成功,才可以路由转发到真实服务上        //引入知识点:用户在登录状态保持,一般是通过token令牌实现的,当用户登录成功,会返回一个token令牌给客户端保存,        // 如果再次请求,自动携带改=该令牌,如果令牌有效,权限通过,否者登录校验失败,不允许访问        //为了方便演示,token变为请求参数,方便获取(正常流程是后端登录成功后返回给客户端,且必须要保存在请求头,方便携带),如果请求地址中没有token参数,就不给访问,如果有,可以访问        RequestContext requestContext = RequestContext.getCurrentContext();        HttpServletRequest request = requestContext.getRequest();        //根据请求对象获取请求参数        String token = request.getParameter("token");        // TOO 必须要校验token的有效性        //权限校验,如果token令牌是有效的,可以进行路由转发,否者需要重新登陆        if(StringUtils.isBlank(token)){            //token失败,权限校验失败,必须过滤调当前请求,不能进行路由转发            requestContext.setSendZuulResponse(false);            //修改返回提示信息            requestContext.setResponseStatusCode(HttpStatus.FORBIDDEN.value());//            requestContext.setResponseBody(HttpStatus.FORBIDDEN.getReasonPhrase());            requestContext.setResponseBody("token令牌校验失败,请求非法,被拦截");            //设置响应的内容格式,防止中文乱码            HttpServletResponse response = requestContext.getResponse();            response.setContentType("text/html;charset=utf-8");        }        //返回RequestContext 对象        return requestContext;    }}

经验总结扩展阅读