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错误,并在页面返回您是未授权用户,请联系管理员!
这句话,但是页面显示如下:

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;
}
重启网关服务,访问页面,效果如下:

网友评论