Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot zuul返回302,带位置标头_Spring Boot_Netflix Zuul - Fatal编程技术网

Spring boot zuul返回302,带位置标头

Spring boot zuul返回302,带位置标头,spring-boot,netflix-zuul,Spring Boot,Netflix Zuul,我有一个简单的用例,当url包含/logout时,如果请求到达网关,我需要发送302 HTTP状态和位置头。这必须在没有路由到后端服务的情况下发生 下面是我的zuul fillter: public class LogoutFillter extends ZuulFilter{ @Override public boolean shouldFilter() { if(RequestContext.getCurrentContext().getR

我有一个简单的用例,当url包含/logout时,如果请求到达网关,我需要发送302 HTTP状态和
位置
头。这必须在没有路由到后端服务的情况下发生

下面是我的zuul fillter:

public class LogoutFillter extends ZuulFilter{

    @Override
    public boolean shouldFilter() {         
        if(RequestContext.getCurrentContext().getRequest().getRequestURI().toLowerCase().contains("/logout")){
            return true;
        }else{
            return false;
        }
    }

    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 3;
    }

    @Override
    public Object run() {
        RequestContext context = RequestContext.getCurrentContext();        
        HttpSession excistingSession = context.getRequest().getSession(false);
        if(excistingSession != null){
            excistingSession.invalidate();
            context.unset()
            //context.addZuulResponseHeader("Location", "/abc/def/logout.do"); //notworking
            context.setResponseStatusCode(302);         
        }
        return null;
    }
}
我尝试过这样做,如下所示:

HttpServletResponse response = context.getResponse();
response.setStatus(302)
response.setHeader("Location", "/abc/logout.to");
context.unset();
context.setResponse(response);

然而,这也不起作用。任何建议都将不胜感激。

最后我设法解决了这个问题。下面是我的代码

@Override
public Object run() {
    RequestContext context = RequestContext.getCurrentContext();

    HttpSession excistingSession = context.getRequest().getSession(false);
    if(excistingSession != null){
        excistingSession.invalidate();  
        context.setSendZuulResponse(false);
        context.addZuulResponseHeader("Location", "/abc/def/logout.do");
        context.setResponseStatusCode(HttpServletResponse.SC_MOVED_TEMPORARILY);
    }
    return null;
}
在上述代码中,
setSendZuulResponse(false)
将停止到后端服务的路由,而
addZuulResponseHeader
将添加响应头