Как я могу установить глобальные переменные контекста в Spring? - PullRequest
1 голос
/ 15 октября 2019

Итак, у меня есть загрузочное приложение Spring со многими запросами API.

Для большого количества этих запросов, я знаю, хочу записать часть заголовка "user-agent" из запроса.

Одно из решений - это сделать.

В моих контроллерах я мог бы просто поставить @RequestHeader("user-agent") String userAgent и передать его на сервисный уровень для регистрации.

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

Итак, мой вопрос: возможно ли добавить пользовательские глобальные переменные контекста, такие как детали аутентификации, из класса фильтра аутентификации? И если да, то как?

1 Ответ

1 голос
/ 15 октября 2019

Если вы используете Spring MVC, вы можете использовать Autowire HttpServletRequest и получить от него заголовки запроса.

@Service
public class HelloService {

    @Autowired
    private HttpServletRequest httpServletRequest;

    public void print() {
        System.out.println(httpServletRequest.getHeader("x-test"));
    }
}

В качестве альтернативы вы также можете получить экземпляр запроса от RequestContextHolder:

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest().getHeader("x-test");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...