У меня есть 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 тоже, но это не сработало. Что я здесь не так делаю? Любой другой способ реализовать это также приветствуется.