Атрибут, добавленный в HttpServletRequest, не достигает конечного сервиса при запросе маршрутов от zuul - PullRequest
0 голосов
/ 20 октября 2018

У меня есть zuul Filter в моем zuul шлюзе.

private void setAppUser(com.netflix.zuul.context.RequestContext requestContext){
    HttpServletRequest request = requestContext.getRequest();
    String appUser = null;
    Authentication authentication  =SecurityContextHolder.getContext().getAuthentication();
    if(authentication!=null)
        appUser = authentication.getName();
    request.setAttribute("appUser", appUser);
}


@Override
public boolean shouldFilter() {
    return true;
}

@Override
public Object run() throws ZuulException {
    RequestContext requestContext =RequestContext.getCurrentContext();
    setAppUser(requestContext);
    return null;
}

здесь я беру имя пользователя и задаю его в requestAttribute.Тогда у меня есть другой сервис, к которому zuul далее направляет запрос согласно пути.Там в контроллере я пытаюсь получить параметр, как показано ниже.

    @PostMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Task> addTask(@RequestBody @Validated TaskVo taskVo, HttpServletRequest request, @RequestAttribute(name="appUser", required=false) String appUser) {
    taskVo.setAppUser(appUser);
    Task task = taskService.addTask(taskVo);
    HttpHeaders headers = new HttpHeaders();
    headers.setAccessControlAllowOrigin("*");
    ResponseEntity<Task> responseEntity = new ResponseEntity<>(task, headers, HttpStatus.CREATED);
    return responseEntity;
}

Но appUser имеет значение null, атрибут также отсутствует в запросе (атрибутах).Я попытался с HttpServletFilter тоже, но это не сработало. Что я здесь не так делаю? Любой другой способ реализовать это также приветствуется.

...