Spring boot zuul返回302,带位置标头
我有一个简单的用例,当url包含/logout时,如果请求到达网关,我需要发送302 HTTP状态和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
位置
头。这必须在没有路由到后端服务的情况下发生
下面是我的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
将添加响应头