美文网首页
解决Spring Cloud Zuul 过滤器setConten

解决Spring Cloud Zuul 过滤器setConten

作者: CXY_XZL | 来源:发表于2019-10-09 14:39 被阅读0次

1.问题描述
在设置spring cloud zuul网关中,有具体业务逻辑的过滤器需要继承ZuulFilter,并重写其4个字方法,尤其是在有具体业务逻辑的run方法,问题代码如下:


···
@Override
    public Object run()  {
        RequestContext rc = RequestContext.getCurrentContext();
        HttpServletRequest hsr = rc.getRequest();
        String accessToken = hsr.getParameter("accessToken");
        if (StringUtils.isEmpty(accessToken)){
            log.info("{} request to {}",hsr.getMethod(),hsr.getRequestURL().toString());

            //令zuul过滤该请求,不对其进⾏路由
            rc.setSendZuulResponse(false);

            //设置返回的错误码
            rc.setResponseStatusCode(401);
            
            rc.setResponseBody("您是未授权用户,请联系管理员!");

            return null;
        }
        log.info("accessToken is ok!");
        return null;
    }

业务逻辑是:当请求参数中没有accessToken参数时,报401错误,并在页面返回您是未授权用户,请联系管理员!这句话,但是页面显示如下:

乱码页面.png

2.解决方法:
给run方法中的response对象设置ContentType,添加后代码如下:


···
@Override
    public Object run()  {
        RequestContext rc = RequestContext.getCurrentContext();
        HttpServletRequest hsr = rc.getRequest();
        String accessToken = hsr.getParameter("accessToken");
        if (StringUtils.isEmpty(accessToken)){
            log.info("{} request to {}",hsr.getMethod(),hsr.getRequestURL().toString());

            //令zuul过滤该请求,不对其进⾏路由
            rc.setSendZuulResponse(false);

            //设置返回的错误码
            rc.setResponseStatusCode(401);
            
            //设置返回内容类型及编码
            rc.getResponse().setContentType("text/html;charset=UTF-8");
            rc.setResponseBody("您是未授权用户,请联系管理员!");

            return null;
        }
        log.info("accessToken is ok!");
        return null;
    }

重启网关服务,访问页面,效果如下:


显示正常页面.png

相关文章

网友评论

      本文标题:解决Spring Cloud Zuul 过滤器setConten

      本文链接:https://www.haomeiwen.com/subject/vzcgpctx.html