【postman】postman访问zuul路由网关,发生Could not get any response 的情况

摘要:
此过滤器用于构建发送到微服务的请求,并使用Apache HttpClient或NetilxRibbon请求微服务。在线解决方案如下:步骤1:首先,验证浏览器上直接访问此请求的效果。这一次,浏览器访问结果如下:它表明编写代码没有问题!!!

情况如下:

zuul配置的自定义过滤器,对所有由zuul进行路由转发的请求进行安全验证,如果请求中包含auth,则成功路由,否则失败。

代码如下:

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第1张【postman】postman访问zuul路由网关,发生Could not get any response 的情况第2张
package com.swapping.springcloud.ms.gateway.filter;

import com.alibaba.fastjson.JSON;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import com.swapping.springcloud.ms.core.response.UniVerResponse;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * >>>>>zuul的filter过滤器的生命周期有一下四个:
 *
 *  PRE: 这种过滤器在请求被路由之前调用。我们可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。
 *  ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apache HttpClient或Netfilx Ribbon请求微服务。
 *  POST:这种过滤器在路由到微服务以后执行。这种过滤器可用来为响应添加标准的HTTP Header、收集统计信息和指标、将响应从微服务发送给客户端等。
 *  ERROR:在其他阶段发生错误时执行该过滤器。 除了默认的过滤器类型,Zuul还允许我们创建自定义的过滤器类型。例如,我们可以定制一种STATIC类型的过滤器,直接在Zuul中生成响应,而不将请求转发到后端的微服务。
 *
 *
 *  Zuul中默认实现了很多Filter,也可以自己自定义过滤器
 *
 *  下面是自己自定义过滤器
 *  实际使用中我们可以结合shiro、oauth2.0等技术去做鉴权、验证
 *
 */
@Component
public class AuthFilter extends ZuulFilter{


    @Override
    public String filterType() {
        return "pre";//可以在请求被路由之前调用
    }

    @Override
    public int filterOrder() {
        return 0;//filter执行顺序,通过数字指定 ,优先级为0,数字越大,优先级越低
    }

    @Override
    public boolean shouldFilter() {
        return true;// 是否执行该过滤器,此处为true,说明需要过滤
    }

    /**
     *  filter需要执行的具体操作
     *
     * 例如:本filter实际执行的逻辑 是验证所有的访问请求中,是否包含安全信息auth
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {

        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();

        String auth = request.getParameter("auth");
        System.out.println("zuul拦截--请求前验证---auth:"+auth);

        //成功的情况
        if (StringUtils.isNotBlank(auth)){
            ctx.setSendZuulResponse(true); //对请求进行路由
            ctx.setResponseStatusCode(200);
            ctx.set("isSuccess", true);
        }else {
            //失败的情况
            UniVerResponse res = new UniVerResponse();
            res.beFalse3("zuul拦截--请求前验证---没有auth登录验证",UniVerResponse.ERROR_BUSINESS);

            ctx.setSendZuulResponse(false); //不对请求进行路由
            ctx.setResponseStatusCode(res.getCode());//设置返回状态码
            ctx.setResponseBody(JSON.toJSONString(res));//设置返回响应体
            ctx.set("isSuccess", false);
            ctx.getResponse().setContentType("application/json;charset=UTF-8");//设置返回响应体格式,可能会乱码

        }

        return null;
    }

}
View Code

通用响应体的beFalse3()什么也没做,就是初始化了一个对象【所以,不用考虑这个问题】

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第3张

然后,启动了网关服务和相对应的服务之后,开始在postMan调用接口地址:

http://localhost:8001/v1/ms-member/member/showMember

然后【这里是不带auth的请求情况】:

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第4张

 WTF?

这是什么鬼?

网上的解决方法如下:

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第5张

 第一步:

首先验证本请求在浏览器上直接访问的效果

【如果无响应,则确定是代码的问题】【如果响应,说明代码没有问题,而是postMan的问题】

而这次,浏览器访问结果如下:

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第6张

说明代码的写法没有问题!!!

第二步:

修改postMan的setting,关闭SSL安全验证

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第7张

然而访问后,依旧是这个结果,未解决问题!!

第三步:

 关闭代理设置

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第8张

依旧没能解决!

第四步:

可以尝试关闭防火墙,然后再访问【我这里依旧没有解决】

最终依旧未能找到这个问题的解决方案。在这里记录一哈,对于未能帮助到的同学们说声抱歉,如果您有解决方案,希望留言告知!!!!谢谢

========================

另外,这里附录一个问题的解决方法,可能会帮到大家

大家在测试接口时候,可能会加上token验证,时候,如果出现Could not get any response这个问题的话,有可能是

【你在粘贴token时末尾有换行符,就会导致你的问题。将变量对应的值末尾空格及换行符全部删除即可】

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第9张

【postman】postman访问zuul路由网关,发生Could not get any response 的情况第10张

免责声明:文章转载自《【postman】postman访问zuul路由网关,发生Could not get any response 的情况》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇LwIP移植uCos+stm32f407如何卸载VSTO外接程序?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ms17010复现、ms16-075提权

一、ms17010复现 1、ms17010是什么 Ehernal Blue通过Tcp端口445和139来利用SMBv1和NBT中的远程代码执行漏洞,恶意代码会扫描开放445文件共享端口的Windows机器,无需用户任何操作,只需要开机上网,攻击者就能获取system权限,且在电脑和服务器中植入勒索软件。   2、复现 ①复现环境 kali     攻击机...

WebAPI初探

WebAPI初探 由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章。因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主要还是开发WebForm的项目,所以MVC的东西也就逐渐的淡忘了。 经过这一段时间的系统学习,真的觉得MVC3相比于之前的MVC2还有Web...

爱快路由器的一些注意事项硬件配置+多线负载均衡

原文: https://help.onethingcloud.com/f63a/578d#header-16 https://www.ikuai8.com/zhic/ymgn/lyym/xtsz/qdqdq.html 爱快多对一配置教程 1)开启nat1   ②所有线路dmz到你的设备地址(不要设置端口映射,若设置了dmz则无需开启upnp)  ...

postman--常用授权

一/Basic Auth: 基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码 举例: 请求的URL如下,授权账号为: 用户名:postman 密码:password 二/Digest Auth: Digest auth 是一个简单的认证机制,最初是为 HTTP 协议开发的,因此也常叫做 H...

Linux网络配置命令介绍【转】

方法/步骤 1 在接下来的讲解中,讲解的Linux网络配置和网络诊断的命令有: ifconfig、ping、netstat、traceroute、dig和nslookup、host、hostname、route、arp、ethtool、GUI管理命令system-config-network。   2 第一个命令ifconfig,这个命令可以...

UDP 单播、广播、多播

一、UDP广播 广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机。值得强调的是:本地广播信息是不会被路由器转发。当然这是十分容易理解的,因为如果路由器转发了广播信息,那么势必会引起网络瘫痪。这也是为什么IP协议的设计者故意没有定义互联网范围的广播机制。 广播地址通常用于在...