Netflix / zuul

Zuul is a gateway service that provides dynamic routing, monitoring, resiliency, security, and more.
Apache License 2.0
13.44k stars 2.37k forks source link

zuul #475

Open HEWU10 opened 6 years ago

HEWU10 commented 6 years ago

code: `

public Object run() {
    RequestContext context = RequestContext.getCurrentContext();
    HttpServletRequest request = context.getRequest();
    HttpServletResponse response = context.getResponse();
    String accessToken = (String) request.getSession().getAttribute(AppEnums.ACCESS_TOKEN_SESSION.var());
    log.debug("SessionFilter => End to Get the result sessionId:{}. access_token:{}", request.getSession().getId(), accessToken);
    if (org.springframework.util.StringUtils.isEmpty(accessToken)) {
        context.setSendZuulResponse(false);
        try {
            log.warn("SessionFilter => user Session lose efficacy .redirect to auth server");
            response.setStatus(HttpStatus.UNAUTHORIZED.value());
            response.sendRedirect(serviceConfig.getAuthIndexUrl());
            return null;
        } catch (Throwable e) {
            log.error("SessionFilter => forward to auth error", e);
            throw new GlobalException(AppServerGlobalResult.APP_FORWAR_ERROR);
        }
    }
    context.addZuulRequestHeader(VenusConstants.USER_TOKEN, accessToken);
    log.debug("SessionFilter => set the access_token to header .token:{}", accessToken);
    return null;
}`

error result: 2018-07-08 23:08:06.829-04:00 ERROR [td] [app-service,751ef5ebfbf2d216,f281f6357998ae5f,true,,]16 --- [p-nio-80-exec-4] c.s.v.proxy.filter.zuul.SessionFilter SessionFilter => forward to auth error java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:489) at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:176) at javax.servlet.http.HttpServletResponseWrapper.sendRedirect(HttpServletResponseWrapper.java:176) at com.supernovacompanies.venus.proxy.filter.zuul.SessionFilter.run(SessionFilter.java:65) at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:112) at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193) at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157) at com.netflix.zuul.FilterProcessor.preRoute(FilterProcessor.java:133) at com.netflix.zuul.ZuulRunner.preRoute(ZuulRunner.java:105) at com.netflix.zuul.http.ZuulServlet.preRoute(ZuulServlet.java:125) at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:74)

HEWU10 commented 6 years ago

when I sendRedirect() by response. I haved return null . how to resove this question.